Module: Sequel::Dataset::SplitArrayNil

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

Instance Method Summary collapse

Instance Method Details

#complex_expression_sql_append(sql, op, args) ⇒ Object

Over the IN/NOT IN handling with an array of values where one of the values in the array is nil, by removing nils from the array of values, and using a separate OR IS NULL clause for IN or AND IS NOT NULL clause for NOT IN.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/sequel/extensions/split_array_nil.rb', line 42

def complex_expression_sql_append(sql, op, args)
case op
when :IN, :"NOT IN"
  vals = args.at(1)
  if vals.is_a?(Array) && vals.any?{|v| v.nil?}
    cols = args.at(0)
    vals = vals.compact
    c = Sequel::SQL::BooleanExpression
    if op == :IN
      literal_append(sql, c.new(:OR, c.new(:IN, cols, vals), c.new(:IS, cols, nil)))
    else
      literal_append(sql, c.new(:AND, c.new(:"NOT IN", cols, vals), c.new(:"IS NOT", cols, nil)))
    end
  else
    super
  end
else
  super
end
end