@@ -251,15 +251,27 @@ final class PluginManager {
251251 Self . logger. error ( " Plugin ' \( pluginId) ' driver rejected: \( error. localizedDescription) " )
252252 }
253253 if !driverPlugins. keys. contains ( type ( of: driver) . databaseTypeId) {
254- let typeId = type ( of: driver) . databaseTypeId
254+ let driverType = type ( of: driver)
255+ let typeId = driverType. databaseTypeId
255256 driverPlugins [ typeId] = driver
256- for additionalId in type ( of : driver ) . additionalDatabaseTypeIds {
257+ for additionalId in driverType . additionalDatabaseTypeIds {
257258 driverPlugins [ additionalId] = driver
258259 }
259260
260- // Built-in defaults are pre-populated in PluginMetadataRegistry.init().
261- // Runtime-loaded plugins may be compiled against an older TableProPluginKit,
262- // so we don't read new protocol properties from them to avoid witness table crashes.
261+ // Self-register plugin metadata from the DriverPlugin protocol
262+ let driverInstance = driver. createDriver ( config: DriverConnectionConfig (
263+ host: " " , port: 0 , username: " " , password: " " , database: " "
264+ ) )
265+ let snapshot = PluginMetadataRegistry . shared. buildMetadataSnapshot (
266+ from: driverType,
267+ isDownloadable: driverType. isDownloadable,
268+ parameterStyle: driverInstance. parameterStyle
269+ )
270+ PluginMetadataRegistry . shared. register ( snapshot: snapshot, forTypeId: typeId)
271+ for additionalId in driverType. additionalDatabaseTypeIds {
272+ PluginMetadataRegistry . shared. register ( snapshot: snapshot, forTypeId: additionalId)
273+ PluginMetadataRegistry . shared. registerTypeAlias ( additionalId, primaryTypeId: typeId)
274+ }
263275
264276 Self . logger. debug ( " Registered driver plugin ' \( pluginId) ' for database type ' \( typeId) ' " )
265277 registeredAny = true
0 commit comments