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.

[View source]

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