Class: Sequel::SQL::CaseExpression
- Inherits:
-
GenericExpression
- Object
- Expression
- GenericExpression
- Sequel::SQL::CaseExpression
- Defined in:
- lib/sequel/sql.rb,
lib/sequel/extensions/eval_inspect.rb more...
Overview
Represents an SQL CASE expression, used for conditional branching in SQL.
Instance Attribute Summary collapse
-
#conditions ⇒ Object
readonly
An array of all two pairs with the first element specifying the condition and the second element specifying the result if the condition matches.
-
#default ⇒ Object
readonly
The default value if no conditions match.
-
#expression ⇒ Object
readonly
An optional expression to test the conditions against.
Instance Method Summary collapse
-
#expression? ⇒ Boolean
Whether to use an expression for this CASE expression.
-
#initialize(conditions, default, expression = (no_expression=true; nil)) ⇒ CaseExpression
constructor
Create an object with the given conditions and default value, and optional expression.
-
#with_merged_expression ⇒ Object
Merge the CASE expression into the conditions, useful for databases that don’t support CASE expressions.
Methods included from IsDistinctFrom::Methods
Methods included from Sequel::SQLite::JSONOpMethods
#sqlite_json_op, #sqlite_jsonb_op
Methods included from Postgres::HStoreOpMethods
Methods included from Postgres::RangeOpMethods
Methods included from Postgres::ArrayOpMethods
Methods included from Postgres::JSONOpMethods
Methods included from Postgres::InetOpMethods
Methods included from Postgres::PGRowOp::ExpressionMethods
Methods included from SubscriptMethods
Methods included from StringMethods
#escaped_ilike, #escaped_like, #ilike, #like
Methods included from PatternMatchMethods
Methods included from OrderMethods
Methods included from NumericMethods
Methods included from ComplexExpressionMethods
#extract, #sql_boolean, #sql_number, #sql_string
Methods included from CastMethods
#cast, #cast_numeric, #cast_string
Methods included from BooleanMethods
Methods included from AliasMethods
Methods inherited from Expression
#==, attr_reader, #clone, #eql?, #hash, inherited, #inspect
Constructor Details
permalink #initialize(conditions, default, expression = (no_expression=true; nil)) ⇒ CaseExpression
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.
1213 1214 1215 1216 1217 1218 1219 1220 |
# File 'lib/sequel/sql.rb', line 1213 def initialize(conditions, default, expression=(no_expression=true; nil)) raise(Sequel::Error, 'CaseExpression conditions must be a hash or array of all two pairs') unless Sequel.condition_specifier?(conditions) @conditions = conditions.to_a.dup.freeze @default = default @expression = expression @no_expression = no_expression freeze end |
Instance Attribute Details
permalink #conditions ⇒ Object (readonly)
An array of all two pairs with the first element specifying the condition and the second element specifying the result if the condition matches.
1201 1202 1203 |
# File 'lib/sequel/sql.rb', line 1201 def conditions @conditions end |
Instance Method Details
permalink #expression? ⇒ Boolean
Whether to use an expression for this CASE expression.
1223 1224 1225 |
# File 'lib/sequel/sql.rb', line 1223 def expression? !@no_expression end |
permalink #with_merged_expression ⇒ Object
Merge the CASE expression into the conditions, useful for databases that don’t support CASE expressions.
1229 1230 1231 1232 1233 1234 1235 1236 |
# File 'lib/sequel/sql.rb', line 1229 def with_merged_expression if expression? e = expression CaseExpression.new(conditions.map{|c, r| [::Sequel::SQL::BooleanExpression.new(:'=', e, c), r]}, default) else self end end |