Class: Sequel::Platform::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/sequel/extensions/platform.rb

Overview

Base platform class with KVCSV config loading and default implementations. Subclasses override function translation methods for platform-specific SQL.

Direct Known Subclasses

Athena, Postgres, Snowflake, Spark

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(db, *config_paths) ⇒ Base

Initialize platform with database connection and config paths.

Parameters:

  • db (Sequel::Database)

    The database connection

  • config_paths (Array<String>)

    Paths to CSV config files (stacked in order)



39
40
41
42
# File 'lib/sequel/extensions/platform.rb', line 39

def initialize(db, *config_paths)
  @db = db
  @config = config_paths.empty? ? {} : KVCSV::Settings.new(*config_paths)
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



33
34
35
# File 'lib/sequel/extensions/platform.rb', line 33

def config
  @config
end

#dbObject (readonly)

Returns the value of attribute db.



33
34
35
# File 'lib/sequel/extensions/platform.rb', line 33

def db
  @db
end

Instance Method Details

#[](key) ⇒ Object

Access arbitrary config values.

Examples:

platform[:interim_schema]           # => "scratch"
platform[:schema_switching_method]  # => "use"

Parameters:

  • key (Symbol)

    Config key

Returns:

  • (Object)

    Config value or nil



76
77
78
# File 'lib/sequel/extensions/platform.rb', line 76

def [](key)
  config[key]
end

#cast_date(expr) ⇒ Sequel::SQL::Cast

Cast expression to date type.

Parameters:

  • expr (Object)

    Expression to cast

Returns:

  • (Sequel::SQL::Cast)

    Cast expression



104
105
106
# File 'lib/sequel/extensions/platform.rb', line 104

def cast_date(expr)
  Sequel.cast(expr, Date)
end

#date_diff(from, to) ⇒ Sequel::SQL::Expression

Calculate date difference between two dates.

Parameters:

  • from (Symbol, Sequel::SQL::Expression)

    Start date

  • to (Symbol, Sequel::SQL::Expression)

    End date

Returns:

  • (Sequel::SQL::Expression)

    Date difference expression



96
97
98
# File 'lib/sequel/extensions/platform.rb', line 96

def date_diff(from, to)
  Sequel.function(:datediff, from, to)
end

#days_between(from, to) ⇒ Sequel::SQL::Expression

Calculate days between two dates.

Parameters:

  • from (Symbol, Sequel::SQL::Expression)

    Start date

  • to (Symbol, Sequel::SQL::Expression)

    End date

Returns:

  • (Sequel::SQL::Expression)

    Days between expression



122
123
124
# File 'lib/sequel/extensions/platform.rb', line 122

def days_between(from, to)
  date_diff(from, to)
end

#fetch(key, default = nil) ⇒ Object

Fetch config value with default.

Parameters:

  • key (Symbol)

    Config key

  • default (Object) (defaults to: nil)

    Default value if key not found

Returns:

  • (Object)

    Config value or default



85
86
87
# File 'lib/sequel/extensions/platform.rb', line 85

def fetch(key, default = nil)
  config.respond_to?(:fetch) ? config.fetch(key, default) : (config[key] || default)
end

#prefers?(feature) ⇒ Boolean

Check if the platform prefers a feature (may support but not prefer).

Examples:

platform.prefers?(:cte)      # Spark supports CTEs but doesn't prefer them
platform.prefers?(:parquet)  # Spark prefers parquet format

Parameters:

  • feature (Symbol)

    Feature name (e.g., :cte, :parquet)

Returns:

  • (Boolean)

    true if preferred



64
65
66
# File 'lib/sequel/extensions/platform.rb', line 64

def prefers?(feature)
  config[:"prefers_#{feature}"] || false
end

#str_to_date(value, format) ⇒ Sequel::SQL::Expression

Parse string to date with format.

Parameters:

  • value (Object)

    String value to parse

  • format (String)

    Date format string

Returns:

  • (Sequel::SQL::Expression)

    Parsed date expression



113
114
115
# File 'lib/sequel/extensions/platform.rb', line 113

def str_to_date(value, format)
  Sequel.function(:to_date, value, format)
end

#supports?(feature) ⇒ Boolean

Check if the platform supports a feature.

Examples:

platform.supports?(:cte)           # checks supports_cte in config
platform.supports?(:temp_tables)   # checks supports_temp_tables in config

Parameters:

  • feature (Symbol)

    Feature name (e.g., :cte, :temp_tables)

Returns:

  • (Boolean)

    true if supported



52
53
54
# File 'lib/sequel/extensions/platform.rb', line 52

def supports?(feature)
  config[:"supports_#{feature}"] || false
end