Method: Sequel::SQLite::DatasetMethods#complex_expression_sql

Defined in:
lib/sequel/adapters/shared/sqlite.rb

#complex_expression_sql(op, args) ⇒ Object

SQLite does not support pattern matching via regular expressions. SQLite is case insensitive (depending on pragma), so use LIKE for ILIKE.



407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
# File 'lib/sequel/adapters/shared/sqlite.rb', line 407

def complex_expression_sql(op, args)
  case op
  when :~, :'!~', :'~*', :'!~*'
    raise Error, "SQLite does not support pattern matching via regular expressions"
  when :ILIKE
    super(:LIKE, args.map{|a| SQL::Function.new(:upper, a)})
  when :"NOT LIKE", :"NOT ILIKE"
    "NOT #{complex_expression_sql((op == :"NOT ILIKE" ? :ILIKE : :LIKE), args)}"
  when :^
    complex_expression_arg_pairs(args) do |a, b|
      a = literal(a)
      b = literal(b)
      "((~(#{a} & #{b})) & (#{a} | #{b}))"
    end
  when :extract
    part = args.at(0)
    raise(Sequel::Error, "unsupported extract argument: #{part.inspect}") unless format = EXTRACT_MAP[part]
    expr = args.at(1)
    "CAST(strftime(#{format}, #{literal(expr)}) AS #{part == :second ? 'NUMERIC' : 'INTEGER'})"
  else
    super(op, args)
  end
end