module ArelExtensions::Visitors
Public Class Methods
strftime_to_format(format, mapping)
click to toggle source
Convert date format in strftime syntax to whatever the RDBMs wants, based on the table of conversion mapping
.
# File lib/arel_extensions/visitors/convert_format.rb, line 5 def self.strftime_to_format format, mapping @mapping_regexps ||= {} @mapping_regexps[mapping] ||= Regexp.new( mapping .keys .map{|k| Regexp.escape(k)} .join('|') ) regexp = @mapping_regexps[mapping] s = StringScanner.new format res = StringIO.new while !s.eos? res << case when s.scan(regexp) if v = mapping[s.matched] v else # Should never happen. s.matched end when s.scan(/[^%]+/) s.matched when s.scan(/./) s.matched end end res.string end
Public Instance Methods
is_distinct_from(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/oracle12.rb, line 45 def is_distinct_from(o, collector) collector << 'DECODE(' collector = visit [o.left, o.right, 0, 1], collector collector << ')' end
visit_ArelExtensions_Nodes_Json(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/oracle12.rb, line 51 def visit_ArelExtensions_Nodes_Json o, collector case o.dict when Array collector << 'json_array(' o.dict.each.with_index do |v, i| if i != 0 collector << Arel::Visitors::MySQL::COMMA end collector = visit v, collector end collector << ')' when Hash collector << 'json__object(' o.dict.each.with_index do |(k, v), i| if i != 0 collector << Arel::Visitors::MySQL::COMMA end collector << 'KEY ' collector = visit k, collector collector << ' IS ' collector = visit v, collector collector << 'FORMAT JSON' end collector << ')' when String, Numeric, TrueClass, FalseClass collector = visit Arel.quoted("#{o.dict}"), collector collector << ' FORMAT JSON' when NilClass collector << %Q['null' FORMAT JSON] when Arel::Attributes::Attribute collector = visit o.dict.cast('JSON'), collector else collector = visit o.dict, collector collector << ' FORMAT JSON' end collector end
visit_Arel_Nodes_BindParam(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/oracle12.rb, line 41 def visit_Arel_Nodes_BindParam(o, collector) collector.add_bind(o.value) { |i| ":a#{i}" } end
visit_Arel_Nodes_Except(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/oracle12.rb, line 24 def visit_Arel_Nodes_Except(o, collector) collector << '( ' collector = infix_value o, collector, ' MINUS ' collector << ' )' end
visit_Arel_Nodes_Limit(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/oracle12.rb, line 12 def visit_Arel_Nodes_Limit(o, collector) collector << 'FETCH FIRST ' collector = visit o.expr, collector collector << ' ROWS ONLY' end
visit_Arel_Nodes_Offset(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/oracle12.rb, line 18 def visit_Arel_Nodes_Offset(o, collector) collector << 'OFFSET ' visit o.expr, collector collector << ' ROWS' end
visit_Arel_Nodes_SelectOptions(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/oracle12.rb, line 6 def visit_Arel_Nodes_SelectOptions(o, collector) collector = maybe_visit o.offset, collector collector = maybe_visit o.limit, collector maybe_visit o.lock, collector end
visit_Arel_Nodes_UpdateStatement(o, collector)
click to toggle source
Calls superclass method
# File lib/arel_extensions/visitors/oracle12.rb, line 30 def visit_Arel_Nodes_UpdateStatement(o, collector) # Oracle does not allow ORDER BY/LIMIT in UPDATEs. if o.orders.any? && o.limit.nil? # However, there is no harm in silently eating the ORDER BY clause if no LIMIT has been provided, # otherwise let the user deal with the error o = o.dup o.orders = [] end super end