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::Table.engine.connection.schema_cache.columns_hash(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 388 def visit_ArelExtensions_Nodes_FormattedNumber o, collector format = Arel::Nodes::NamedFunction.new('printf',[Arel::Nodes.build_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 collector << " AS \"" collector = visit o.right, collector collector << "\"" 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