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 |