diff --git a/Plugins/OracleDriverPlugin/OracleConnection.swift b/Plugins/OracleDriverPlugin/OracleConnection.swift index 79b9228ad..129445b20 100644 --- a/Plugins/OracleDriverPlugin/OracleConnection.swift +++ b/Plugins/OracleDriverPlugin/OracleConnection.swift @@ -286,16 +286,7 @@ final class OracleConnectionWrapper: @unchecked Sendable { } private static func isChannelFatal(_ error: OracleSQLError) -> Bool { - isChannelFatalCode(error.code.description) - } - - static func isChannelFatalCode(_ codeDescription: String) -> Bool { - switch codeDescription { - case "connectionError", "messageDecodingFailure", "unexpectedBackendMessage": - return true - default: - return false - } + OracleChannelFatalCode.isChannelFatal(error.code.description) } func disconnect() { diff --git a/Plugins/TableProPluginKit/OracleChannelFatalCode.swift b/Plugins/TableProPluginKit/OracleChannelFatalCode.swift new file mode 100644 index 000000000..b27c66865 --- /dev/null +++ b/Plugins/TableProPluginKit/OracleChannelFatalCode.swift @@ -0,0 +1,12 @@ +import Foundation + +public enum OracleChannelFatalCode { + public static func isChannelFatal(_ codeDescription: String) -> Bool { + switch codeDescription { + case "connectionError", "messageDecodingFailure", "unexpectedBackendMessage": + return true + default: + return false + } + } +} diff --git a/TableProTests/Plugins/OracleConnectionErrorTests.swift b/TableProTests/Plugins/OracleConnectionErrorTests.swift index 3ce3c6111..fd17f9a06 100644 --- a/TableProTests/Plugins/OracleConnectionErrorTests.swift +++ b/TableProTests/Plugins/OracleConnectionErrorTests.swift @@ -1,21 +1,19 @@ -import Foundation import Testing - -@testable import TablePro +import TableProPluginKit @Suite("Oracle channel-fatal error classification") struct OracleConnectionErrorTests { @Test("Decode and connection failures are treated as channel-fatal") func channelFatalCodes() { - #expect(OracleConnectionWrapper.isChannelFatalCode("connectionError")) - #expect(OracleConnectionWrapper.isChannelFatalCode("messageDecodingFailure")) - #expect(OracleConnectionWrapper.isChannelFatalCode("unexpectedBackendMessage")) + #expect(OracleChannelFatalCode.isChannelFatal("connectionError")) + #expect(OracleChannelFatalCode.isChannelFatal("messageDecodingFailure")) + #expect(OracleChannelFatalCode.isChannelFatal("unexpectedBackendMessage")) } @Test("Server-side SQL errors keep the connection alive") func nonFatalCodes() { - #expect(!OracleConnectionWrapper.isChannelFatalCode("server")) - #expect(!OracleConnectionWrapper.isChannelFatalCode("statementCancelled")) - #expect(!OracleConnectionWrapper.isChannelFatalCode("malformedStatement")) + #expect(!OracleChannelFatalCode.isChannelFatal("server")) + #expect(!OracleChannelFatalCode.isChannelFatal("statementCancelled")) + #expect(!OracleChannelFatalCode.isChannelFatal("malformedStatement")) } }