Skip to content

Commit c347c27

Browse files
committed
fix: address all 6 PR review issues for self-describing plugin system
1 parent 88ba042 commit c347c27

39 files changed

Lines changed: 593 additions & 220 deletions

TablePro/AppDelegate+ConnectionHandler.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ extension AppDelegate {
141141
let connectionName = url.deletingPathExtension().lastPathComponent
142142

143143
for (sessionId, session) in DatabaseManager.shared.activeSessions {
144-
if session.connection.type == DatabaseType(rawValue: "DuckDB")
144+
if session.connection.type == .duckdb
145145
&& session.connection.database == filePath
146146
&& session.driver != nil {
147147
bringConnectionWindowToFront(sessionId)
@@ -155,7 +155,7 @@ extension AppDelegate {
155155
port: 0,
156156
database: filePath,
157157
username: "",
158-
type: DatabaseType(rawValue: "DuckDB")
158+
type: .duckdb
159159
)
160160

161161
openNewConnectionWindow(for: connection)

TablePro/AppDelegate+FileOpen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ extension AppDelegate {
6666
switch dbType {
6767
case .sqlite:
6868
self.handleSQLiteFile(url)
69-
case DatabaseType(rawValue: "DuckDB"):
69+
case .duckdb:
7070
self.handleDuckDBFile(url)
7171
default:
7272
self.handleGenericDatabaseFile(url, type: dbType)

TablePro/Core/Database/DatabaseDriver.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -362,15 +362,15 @@ enum DatabaseDriverFactory {
362362
}
363363

364364
switch connection.type {
365-
case DatabaseType(rawValue: "MongoDB"):
365+
case .mongodb:
366366
fields["sslCACertPath"] = ssl.caCertificatePath
367367
fields["mongoReadPreference"] = connection.mongoReadPreference ?? ""
368368
fields["mongoWriteConcern"] = connection.mongoWriteConcern ?? ""
369-
case DatabaseType(rawValue: "Redis"):
369+
case .redis:
370370
fields["redisDatabase"] = String(connection.redisDatabase ?? 0)
371-
case DatabaseType(rawValue: "SQL Server"):
371+
case .mssql:
372372
fields["mssqlSchema"] = connection.mssqlSchema ?? "dbo"
373-
case DatabaseType(rawValue: "Oracle"):
373+
case .oracle:
374374
fields["oracleServiceName"] = connection.oracleServiceName ?? ""
375375
default:
376376
break

TablePro/Core/Database/DatabaseManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,7 @@ final class DatabaseManager {
803803
driver: DatabaseDriver
804804
) async -> String? {
805805
// Only needed for PostgreSQL PK modifications
806-
guard databaseType == .postgresql || databaseType == .redshift || databaseType == DatabaseType(rawValue: "DuckDB") else { return nil }
806+
guard databaseType == .postgresql || databaseType == .redshift || databaseType == .duckdb else { return nil }
807807
guard
808808
changes.contains(where: {
809809
if case .modifyPrimaryKey = $0 { return true }

TablePro/Core/Plugins/PluginManager.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -258,14 +258,11 @@ final class PluginManager {
258258
driverPlugins[additionalId] = driver
259259
}
260260

261-
// Self-register plugin metadata from the DriverPlugin protocol
262-
let driverInstance = driver.createDriver(config: DriverConnectionConfig(
263-
host: "", port: 0, username: "", password: "", database: ""
264-
))
261+
// Self-register plugin metadata from the DriverPlugin protocol.
262+
// parameterStyle defaults to .questionMark; built-in defaults already have correct values.
265263
let snapshot = PluginMetadataRegistry.shared.buildMetadataSnapshot(
266264
from: driverType,
267-
isDownloadable: driverType.isDownloadable,
268-
parameterStyle: driverInstance.parameterStyle
265+
isDownloadable: driverType.isDownloadable
269266
)
270267
PluginMetadataRegistry.shared.register(snapshot: snapshot, forTypeId: typeId)
271268
for additionalId in driverType.additionalDatabaseTypeIds {

TablePro/Core/Plugins/PluginMetadataRegistry.swift

Lines changed: 409 additions & 44 deletions
Large diffs are not rendered by default.

TablePro/Core/Utilities/Connection/ConnectionURLFormatter.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ struct ConnectionURLFormatter {
1313
return formatSQLite(connection.database)
1414
}
1515

16-
if connection.type == DatabaseType(rawValue: "DuckDB") {
16+
if connection.type == .duckdb {
1717
return formatDuckDB(connection.database)
1818
}
1919

@@ -76,7 +76,7 @@ struct ConnectionURLFormatter {
7676
result += ":\(connection.port)"
7777
}
7878

79-
let sshPathComponent = connection.type == DatabaseType(rawValue: "Oracle")
79+
let sshPathComponent = connection.type == .oracle
8080
? (connection.oracleServiceName ?? connection.database)
8181
: connection.database
8282
result += "/\(sshPathComponent)"
@@ -109,7 +109,7 @@ struct ConnectionURLFormatter {
109109
result += ":\(connection.port)"
110110
}
111111

112-
let pathComponent = connection.type == DatabaseType(rawValue: "Oracle")
112+
let pathComponent = connection.type == .oracle
113113
? (connection.oracleServiceName ?? connection.database)
114114
: connection.database
115115
result += "/\(pathComponent)"

TablePro/Core/Utilities/Connection/ConnectionURLParser.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,19 +101,19 @@ struct ConnectionURLParser {
101101
case "sqlite":
102102
dbType = .sqlite
103103
case "mongodb", "mongodb+srv":
104-
dbType = DatabaseType(rawValue: "MongoDB")
104+
dbType = .mongodb
105105
case "redis", "rediss":
106-
dbType = DatabaseType(rawValue: "Redis")
106+
dbType = .redis
107107
case "sqlserver", "mssql", "jdbc:sqlserver":
108-
dbType = DatabaseType(rawValue: "SQL Server")
108+
dbType = .mssql
109109
case "oracle", "jdbc:oracle:thin":
110-
dbType = DatabaseType(rawValue: "Oracle")
110+
dbType = .oracle
111111
case "clickhouse", "ch":
112-
dbType = DatabaseType(rawValue: "ClickHouse")
112+
dbType = .clickhouse
113113
case "cassandra", "cql":
114-
dbType = DatabaseType(rawValue: "Cassandra")
114+
dbType = .cassandra
115115
case "scylladb", "scylla":
116-
dbType = DatabaseType(rawValue: "ScyllaDB")
116+
dbType = .scylladb
117117
default:
118118
if let resolvedType = PluginMetadataRegistry.shared.databaseType(forUrlScheme: scheme) {
119119
dbType = resolvedType
@@ -186,7 +186,7 @@ struct ConnectionURLParser {
186186
var sslMode = ext.sslMode
187187
// Redis-specific: parse database index from path and handle TLS scheme
188188
var redisDatabase: Int?
189-
if dbType == DatabaseType(rawValue: "Redis") {
189+
if dbType == .redis {
190190
if !database.isEmpty {
191191
redisDatabase = Int(database)
192192
database = ""
@@ -198,7 +198,7 @@ struct ConnectionURLParser {
198198

199199
// Oracle-specific: path component is the service name, not the database name
200200
var oracleServiceName: String?
201-
if dbType == DatabaseType(rawValue: "Oracle") && !database.isEmpty {
201+
if dbType == .oracle && !database.isEmpty {
202202
oracleServiceName = database
203203
database = ""
204204
}
@@ -329,7 +329,7 @@ struct ConnectionURLParser {
329329

330330
// Oracle-specific: path component is the service name, not the database name
331331
var oracleServiceName: String?
332-
if dbType == DatabaseType(rawValue: "Oracle") && !database.isEmpty {
332+
if dbType == .oracle && !database.isEmpty {
333333
oracleServiceName = database
334334
database = ""
335335
}

TablePro/Models/Connection/DatabaseConnection.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,17 @@ extension DatabaseType {
225225
static let postgresql = DatabaseType(rawValue: "PostgreSQL")
226226
static let sqlite = DatabaseType(rawValue: "SQLite")
227227
static let redshift = DatabaseType(rawValue: "Redshift")
228+
229+
// Registry-distributed types (known plugins, downloadable separately)
230+
static let mongodb = DatabaseType(rawValue: "MongoDB")
231+
static let redis = DatabaseType(rawValue: "Redis")
232+
static let mssql = DatabaseType(rawValue: "SQL Server")
233+
static let oracle = DatabaseType(rawValue: "Oracle")
234+
static let clickhouse = DatabaseType(rawValue: "ClickHouse")
235+
static let duckdb = DatabaseType(rawValue: "DuckDB")
236+
static let cassandra = DatabaseType(rawValue: "Cassandra")
237+
static let scylladb = DatabaseType(rawValue: "ScyllaDB")
238+
static let etcd = DatabaseType(rawValue: "etcd")
228239
}
229240

230241
extension DatabaseType: Codable {

TablePro/ViewModels/QuickSwitcherViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ internal final class QuickSwitcherViewModel {
8787
}
8888

8989
// Schemas (only for databases that support them)
90-
let supportsSchemas = [DatabaseType.postgresql, .redshift, DatabaseType(rawValue: "Oracle"), DatabaseType(rawValue: "SQL Server")]
90+
let supportsSchemas = [DatabaseType.postgresql, .redshift, .oracle, .mssql]
9191
if supportsSchemas.contains(databaseType) {
9292
do {
9393
let schemas = try await driver.fetchSchemas()

0 commit comments

Comments
 (0)