Module: Sequel::Dataset::SetLiteralizer

Defined in:
lib/sequel/extensions/set_literalizer.rb

Instance Method Summary collapse

Instance Method Details

#complex_expression_sql_append(sql, op, args) ⇒ Object

Try to generate the same SQL for Set instances used in datasets that would be used for equivalent Array instances.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/sequel/extensions/set_literalizer.rb', line 22

def complex_expression_sql_append(sql, op, args)
  # Array instances are treated specially by
  # Sequel::SQL::BooleanExpression.from_value_pairs. That cannot
  # be modified by a dataset extension, so this tries to convert
  # the complex expression values generated by default to what would
  # be the complex expression values used for the equivalent array.
  case op
  when :'=', :'!='
    if (set = args[1]).is_a?(Set)
      op = op == :'=' ? :IN : :'NOT IN'
      col = args[0]
      array = set.to_a
      if Sequel.condition_specifier?(array) && col.is_a?(Array)
        array = Sequel.value_list(array)
      end
      args = [col, array]
    end
  end

  super
end