class ArelExtensions::Visitors::ArelExtensions::Visitors::Arel::Visitors::SQLite
Constants
- DATE_FORMAT_DIRECTIVES
- DATE_MAPPING
- NUMBER_COMMA_MAPPING
Public Instance Methods
get_time_converted(element)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 326 def get_time_converted element if element.is_a?(Time) return Arel::Nodes::NamedFunction.new('STRFTIME', [element, '%H:%M:%S']) elsif element.is_a?(Arel::Attributes::Attribute) col = Arel.column_of(element.relation.table_name, element.name.to_s) if col && (col.type == :time) return Arel::Nodes::NamedFunction.new('STRFTIME', [element, '%H:%M:%S']) else return element end else return element end end
visit_ArelExtensions_InsertManager_BulkValues(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 241 def visit_ArelExtensions_InsertManager_BulkValues o, collector o.left.each_with_index do |row, idx| collector << 'SELECT ' len = row.length - 1 row.zip(o.cols).each_with_index { |(value, attr), i| case value when Arel::Nodes::SqlLiteral, Arel::Nodes::BindParam collector = visit value.as(attr.name), collector else collector << quote(value, attr && column_for(attr)).to_s if idx == 0 collector << ' AS ' collector << quote(attr.name) end end collector << COMMA unless i == len } collector << ' UNION ALL ' unless idx == o.left.length - 1 end collector end
visit_ArelExtensions_Nodes_AiIMatches(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 45 def visit_ArelExtensions_Nodes_AiIMatches o, collector collector = visit o.left.collate(true, true), collector collector << ' LIKE ' collector = visit o.right.collate(true, true), collector if o.escape collector << ' ESCAPE ' visit o.escape, collector else collector end end
visit_ArelExtensions_Nodes_AiMatches(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 33 def visit_ArelExtensions_Nodes_AiMatches o, collector collector = visit o.left.ai_collate, collector collector << ' LIKE ' collector = visit o.right.ai_collate, collector if o.escape collector << ' ESCAPE ' visit o.escape, collector else collector end end
visit_ArelExtensions_Nodes_Ceil(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 227 def visit_ArelExtensions_Nodes_Ceil o, collector collector << 'CASE WHEN ROUND(' collector = visit o.left, collector collector << ', 1) > ROUND(' collector = visit o.left, collector collector << ') THEN ROUND(' collector = visit o.left, collector collector << ') + 1 ELSE ROUND(' collector = visit o.left, collector collector << ') END' collector end
visit_ArelExtensions_Nodes_Collate(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 69 def visit_ArelExtensions_Nodes_Collate o, collector if o.ai collector = visit o.expressions.first, collector collector << ' COLLATE NOACCENTS' elsif o.ci collector = visit o.expressions.first, collector collector << ' COLLATE NOCASE' else collector = visit o.expressions.first, collector collector << ' COLLATE BINARY' end collector end
visit_ArelExtensions_Nodes_Concat(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 138 def visit_ArelExtensions_Nodes_Concat o, collector collector << '(' o.expressions.each_with_index { |arg, i| collector = visit arg, collector collector << ' || ' unless i == o.expressions.length - 1 } collector << ')' collector end
visit_ArelExtensions_Nodes_DateAdd(o, collector)
click to toggle source
Date operations
# File lib/arel_extensions/visitors/sqlite.rb, line 96 def visit_ArelExtensions_Nodes_DateAdd o, collector collector << 'date(' collector = visit o.expressions.first, collector collector << COMMA collector = visit o.sqlite_value, collector collector << ')' collector end
visit_ArelExtensions_Nodes_DateDiff(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 105 def visit_ArelExtensions_Nodes_DateDiff o, collector case o.left_node_type when :ruby_time, :datetime, :time collector << "strftime('%s', " collector = visit o.left, collector collector << ") - strftime('%s', " collector = visit o.right, collector else collector << 'julianday(' collector = visit o.left, collector collector << ') - julianday(' collector = visit o.right, collector end collector << ')' collector end
visit_ArelExtensions_Nodes_Duration(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 122 def visit_ArelExtensions_Nodes_Duration o, collector collector << "strftime('#{DATE_MAPPING[o.left]}'#{COMMA}" collector = visit o.right, collector collector << ')' collector end
visit_ArelExtensions_Nodes_Floor(o, collector)
click to toggle source
CAST(
CASE WHEN 3.42 >= 0 THEN CAST(3.42 AS INT) WHEN CAST(3.42 AS INT) = 3.42 THEN CAST(3.42 AS INT) ELSE CAST((3.42 - 1.0) AS INT) END AS FLOAT
)
# File lib/arel_extensions/visitors/sqlite.rb, line 210 def visit_ArelExtensions_Nodes_Floor o, collector collector << 'CAST(CASE WHEN ' collector = visit o.left, collector collector << ' >= 0 THEN CAST(' collector = visit o.left, collector collector << ' AS INT) WHEN CAST(' collector = visit o.left, collector collector << ' AS INT) = ' collector = visit o.left, collector collector << ' THEN CAST(' collector = visit o.left, collector collector << ' AS INT) ELSE CAST((' collector = visit o.left, collector collector << ' - 1.0) AS INT) END AS FLOAT)' collector end
visit_ArelExtensions_Nodes_FormattedNumber(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 389 def visit_ArelExtensions_Nodes_FormattedNumber o, collector format = Arel::Nodes::NamedFunction.new('printf', [Arel.quoted(o.original_string), o.left]) locale_map = NUMBER_COMMA_MAPPING[o.locale] if locale_map format = format.replace(',', locale_map[',']).replace('.', locale_map['.']) end visit format, collector collector end
visit_ArelExtensions_Nodes_IDoesNotMatch(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 83 def visit_ArelExtensions_Nodes_IDoesNotMatch o, collector collector = visit o.left.lower, collector collector << ' NOT LIKE ' collector = visit o.right.lower(o.right), collector if o.escape collector << ' ESCAPE ' visit o.escape, collector else collector end end
visit_ArelExtensions_Nodes_IMatches(o, collector)
click to toggle source
String functions
# File lib/arel_extensions/visitors/sqlite.rb, line 21 def visit_ArelExtensions_Nodes_IMatches o, collector # insensitive on ASCII collector = visit o.left.ci_collate, collector collector << ' LIKE ' collector = visit o.right.ci_collate, collector if o.escape collector << ' ESCAPE ' visit o.escape, collector else collector end end
visit_ArelExtensions_Nodes_IsNotNull(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 164 def visit_ArelExtensions_Nodes_IsNotNull o, collector collector = visit o.expr, collector collector << ' IS NOT NULL' collector end
visit_ArelExtensions_Nodes_IsNull(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 158 def visit_ArelExtensions_Nodes_IsNull o, collector collector = visit o.expr, collector collector << ' IS NULL' collector end
visit_ArelExtensions_Nodes_Locate(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 129 def visit_ArelExtensions_Nodes_Locate o, collector collector << 'instr(' collector = visit o.expr, collector collector << COMMA collector = visit o.right, collector collector << ')' collector end
visit_ArelExtensions_Nodes_Rand(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 170 def visit_ArelExtensions_Nodes_Rand o, collector collector << 'RANDOM(' if o.left != nil && o.right != nil collector = visit o.left, collector collector << COMMA collector = visit o.right, collector end collector << ')' collector end
visit_ArelExtensions_Nodes_SMatches(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 57 def visit_ArelExtensions_Nodes_SMatches o, collector collector = visit o.left.collate, collector collector << ' LIKE ' collector = visit o.right.collate, collector if o.escape collector << ' ESCAPE ' visit o.escape, collector else collector end end
visit_ArelExtensions_Nodes_Substring(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 148 def visit_ArelExtensions_Nodes_Substring o, collector collector << 'SUBSTR(' o.expressions.each_with_index { |arg, i| collector << COMMA if i != 0 collector = visit arg, collector } collector << ')' collector end
visit_ArelExtensions_Nodes_Union(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 292 def visit_ArelExtensions_Nodes_Union o, collector collector = if o.left.is_a?(Arel::SelectManager) visit o.left.ast, collector else visit o.left, collector end collector << ' UNION ' collector = if o.right.is_a?(Arel::SelectManager) visit o.right.ast, collector else visit o.right, collector end collector end
visit_ArelExtensions_Nodes_UnionAll(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 309 def visit_ArelExtensions_Nodes_UnionAll o, collector collector = if o.left.is_a?(Arel::SelectManager) visit o.left.ast, collector else visit o.left, collector end collector << ' UNION ALL ' collector = if o.right.is_a?(Arel::SelectManager) visit o.right.ast, collector else visit o.right, collector end collector end
visit_ArelExtensions_Nodes_Wday(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 195 def visit_ArelExtensions_Nodes_Wday o, collector collector << "STRFTIME('%w'," collector = visit o.date, collector collector << ')' collector end
visit_Arel_Nodes_As(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 374 def visit_Arel_Nodes_As o, collector if o.left.is_a?(Arel::Nodes::Binary) collector << '(' collector = visit o.left, collector collector << ')' else collector = visit o.left, collector end sep = o.right.size > 1 && o.right[0] == '"' && o.right[-1] == '"' ? '' : '"' collector << " AS #{sep}" collector = visit o.right, collector collector << "#{sep}" collector end
Also aliased as: old_visit_Arel_Nodes_As
visit_Arel_Nodes_GreaterThan(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 350 def visit_Arel_Nodes_GreaterThan o, collector collector = visit get_time_converted(o.left), collector collector << ' > ' collector = visit get_time_converted(o.right), collector collector end
visit_Arel_Nodes_GreaterThanOrEqual(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 342 def visit_Arel_Nodes_GreaterThanOrEqual o, collector collector = visit get_time_converted(o.left), collector collector << ' >= ' collector = visit get_time_converted(o.right), collector collector end
visit_Arel_Nodes_LessThan(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 366 def visit_Arel_Nodes_LessThan o, collector collector = visit get_time_converted(o.left), collector collector << ' < ' collector = visit get_time_converted(o.right), collector collector end
visit_Arel_Nodes_LessThanOrEqual(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 358 def visit_Arel_Nodes_LessThanOrEqual o, collector collector = visit get_time_converted(o.left), collector collector << ' <= ' collector = visit get_time_converted(o.right), collector collector end
visit_Arel_Nodes_NotRegexp(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 188 def visit_Arel_Nodes_NotRegexp o, collector collector = visit o.left, collector collector << ' NOT REGEXP ' collector = visit o.right, collector collector end
visit_Arel_Nodes_Regexp(o, collector)
click to toggle source
# File lib/arel_extensions/visitors/sqlite.rb, line 181 def visit_Arel_Nodes_Regexp o, collector collector = visit o.left, collector collector << ' REGEXP' collector = visit o.right, collector collector end