Module: Aikido::Zen::SQL::Dialects
- Defined in:
- lib/aikido/zen/sql.rb
Defined Under Namespace
Classes: Dialect
Constant Summary collapse
- DIALECTS =
Maps easy-to-use Symbols to a struct that keeps both the name and the internal identifier used by libzen.
{ common: Dialect.new( name: "SQL", internals_key: 0, placeholder_resolver: method(:common_placeholder_resolver) ), mysql: Dialect.new( name: "MySQL", internals_key: 8, placeholder_resolver: method(:common_placeholder_resolver) ), postgresql: Dialect.new( name: "PostgreSQL", internals_key: 9, placeholder_resolver: method(:postgresql_placeholder_resolver) ), sqlite: Dialect.new( name: "SQLite", internals_key: 12, placeholder_resolver: method(:sqlite_placeholder_resolver) ) }.freeze
Class Method Summary collapse
- .common_placeholder_resolver(value, placeholder_number, params) ⇒ Object
- .fetch(dialect) ⇒ Aikido::Zen::SQL::Dialects::Dialect
- .postgresql_placeholder_resolver(value, placeholder_number, params) ⇒ Object
- .sqlite_placeholder_resolver(value, placeholder_number, params) ⇒ Object
Class Method Details
.common_placeholder_resolver(value, placeholder_number, params) ⇒ Object
20 21 22 23 24 |
# File 'lib/aikido/zen/sql.rb', line 20 def self.common_placeholder_resolver(value, placeholder_number, params) return nil unless params params[placeholder_number] unless placeholder_number.nil? end |
.fetch(dialect) ⇒ Aikido::Zen::SQL::Dialects::Dialect
103 104 105 |
# File 'lib/aikido/zen/sql.rb', line 103 def self.fetch(dialect) DIALECTS.fetch(dialect, DIALECTS[:common]) end |
.postgresql_placeholder_resolver(value, placeholder_number, params) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/aikido/zen/sql.rb', line 30 def self.postgresql_placeholder_resolver(value, placeholder_number, params) return nil unless params match = value.match(/^\$(\d+)$/) if match index = match[1].to_i - 1 return if index < 0 params[index] end end |
.sqlite_placeholder_resolver(value, placeholder_number, params) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/aikido/zen/sql.rb', line 46 def self.sqlite_placeholder_resolver(value, placeholder_number, params) return nil unless params return params[placeholder_number] unless placeholder_number.nil? case value when /^\?(\d+)$/ match = Regexp.last_match index = match[1].to_i - 1 return if index < 0 params[index] when /^[:@$]([A-Za-z_][A-Za-z0-9_]*)$/ match = Regexp.last_match key = match[1] params.flatten.each do |param| if Hash === param param.each do |param_key, param_value| return param_value if param_key.to_s == key end end end end end |