Module: Sequel::Platform
- Defined in:
- lib/sequel/extensions/platform.rb
Overview
The Platform module provides database platform abstraction through configuration-driven capabilities and code-driven function translations.
Defined Under Namespace
Classes: Athena, Base, Postgres, Snowflake, Spark
Constant Summary collapse
- PLATFORM_CLASSES =
Map adapter schemes to platform classes
{ postgres: Postgres, postgresql: Postgres, spark: Spark, athena: Athena, presto: Athena, trino: Athena, snowflake: Snowflake, }.freeze
- ADAPTER_CONFIG_NAMES =
Map adapter schemes to config file names
{ postgres: 'postgres', postgresql: 'postgres', spark: 'spark', athena: 'athena', presto: 'athena', trino: 'athena', snowflake: 'snowflake', }.freeze
Class Attribute Summary collapse
-
.config_dir ⇒ Object
Find the config directory, searching gem paths.
Class Method Summary collapse
-
.build_platform(db, extra_configs = []) ⇒ Platform::Base
Build platform instance for database.
-
.config_paths_for(adapter_scheme, extra_configs = []) ⇒ Array<String>
Build config paths for the given adapter.
-
.effective_adapter(db) ⇒ Symbol
Detect the effective adapter for platform selection.
-
.extended(db) ⇒ Object
Extension hook - called when extension is loaded.
Instance Method Summary collapse
-
#platform ⇒ Platform::Base
Access the platform instance.
Class Attribute Details
.config_dir ⇒ Object
Find the config directory, searching gem paths
210 211 212 |
# File 'lib/sequel/extensions/platform.rb', line 210 def config_dir @config_dir ||= find_config_dir end |
Class Method Details
.build_platform(db, extra_configs = []) ⇒ Platform::Base
Build platform instance for database
261 262 263 264 265 266 |
# File 'lib/sequel/extensions/platform.rb', line 261 def self.build_platform(db, extra_configs = []) adapter = effective_adapter(db) platform_class = PLATFORM_CLASSES.fetch(adapter, Base) config_paths = config_paths_for(adapter, extra_configs) platform_class.new(db, *config_paths) end |
.config_paths_for(adapter_scheme, extra_configs = []) ⇒ Array<String>
Build config paths for the given adapter
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
# File 'lib/sequel/extensions/platform.rb', line 238 def self.config_paths_for(adapter_scheme, extra_configs = []) paths = [] if config_dir base_config = File.join(config_dir, 'base.csv') paths << base_config if File.exist?(base_config) adapter_name = ADAPTER_CONFIG_NAMES[adapter_scheme] if adapter_name rdbms_config = File.join(config_dir, 'rdbms', "#{adapter_name}.csv") paths << rdbms_config if File.exist?(rdbms_config) end end paths.concat(extra_configs.select { |p| File.exist?(p) }) paths end |
.effective_adapter(db) ⇒ Symbol
Detect the effective adapter for platform selection. For mock databases, use database_type or host option; otherwise use adapter_scheme.
273 274 275 276 277 278 279 280 281 282 |
# File 'lib/sequel/extensions/platform.rb', line 273 def self.effective_adapter(db) return db.adapter_scheme unless db.adapter_scheme == :mock # Mock databases: try database_type first (set for known types like postgres, spark) db_type = db.database_type return db_type if db_type && db_type != :mock # Fall back to host option (for unknown types like snowflake, athena) db.opts[:host] end |
.extended(db) ⇒ Object
Extension hook - called when extension is loaded
285 286 287 288 |
# File 'lib/sequel/extensions/platform.rb', line 285 def self.extended(db) extra_configs = db.opts[:platform_configs] || [] db.instance_variable_set(:@platform, build_platform(db, extra_configs)) end |
Instance Method Details
#platform ⇒ Platform::Base
Access the platform instance
293 294 295 |
# File 'lib/sequel/extensions/platform.rb', line 293 def platform @platform end |