class Sequel::SQL::CaseExpression
Represents an SQL
CASE expression, used for conditional branching in SQL
.
Attributes
An array of all two pairs with the first element specifying the condition and the second element specifying the result if the condition matches.
The default value if no conditions match.
An optional expression to test the conditions against
Public Class Methods
Create an object with the given conditions and default value, and optional expression. An expression can be provided to test each condition against, instead of having all conditions represent their own boolean expression.
# File lib/sequel/sql.rb 1190 def initialize(conditions, default, expression=(no_expression=true; nil)) 1191 raise(Sequel::Error, 'CaseExpression conditions must be a hash or array of all two pairs') unless Sequel.condition_specifier?(conditions) 1192 @conditions = conditions.to_a.dup.freeze 1193 @default = default 1194 @expression = expression 1195 @no_expression = no_expression 1196 freeze 1197 end
Public Instance Methods
Whether to use an expression for this CASE expression.
# File lib/sequel/sql.rb 1200 def expression? 1201 !@no_expression 1202 end
Merge the CASE expression into the conditions, useful for databases that don't support CASE expressions.
# File lib/sequel/sql.rb 1206 def with_merged_expression 1207 if expression? 1208 e = expression 1209 CaseExpression.new(conditions.map{|c, r| [::Sequel::SQL::BooleanExpression.new(:'=', e, c), r]}, default) 1210 else 1211 self 1212 end 1213 end
Private Instance Methods
CaseExpression's initializer checks whether an argument was provided, to differentiate CASE WHEN from CASE NULL WHEN, so check if an expression was provided, and only include the expression in the inspect output if so.
# File lib/sequel/extensions/eval_inspect.rb 123 def inspect_args 124 if expression? 125 [:conditions, :default, :expression] 126 else 127 [:conditions, :default] 128 end 129 end