Class: Sequel::SQL::CaseExpression

Inherits:
GenericExpression show all
Defined in:
lib/sequel/sql.rb,
lib/sequel/extensions/eval_inspect.rb

Overview

Represents an SQL CASE expression, used for conditional branching in SQL.

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Methods included from Postgres::HStoreOpMethods

#hstore

Methods included from Postgres::ArrayOpMethods

#pg_array

Methods included from Postgres::RangeOpMethods

#pg_range

Methods included from Postgres::JSONOpMethods

#pg_json

Methods included from Postgres::PGRowOp::ExpressionMethods

#pg_row

Methods included from SubscriptMethods

#sql_subscript

Methods included from StringMethods

#ilike, #like

Methods included from OrderMethods

#asc, #desc

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

#as

Methods inherited from Expression

#==, attr_reader, #eql?, #hash, inherited, #inspect, #lit, #sql_literal

Constructor Details

- (CaseExpression) initialize(conditions, default, expression = (no_expression=true; nil))

Create an object with the given conditions and default value. An expression can be provided to test each condition against, instead of having all conditions represent their own boolean expression.

Raises:



1081
1082
1083
1084
# File 'lib/sequel/sql.rb', line 1081

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, @default, @expression, @no_expression = conditions.to_a, default, expression, no_expression
end

Instance Attribute Details

- (Object) conditions (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.



1069
1070
1071
# File 'lib/sequel/sql.rb', line 1069

def conditions
  @conditions
end

- (Object) default (readonly)

The default value if no conditions match.



1072
1073
1074
# File 'lib/sequel/sql.rb', line 1072

def default
  @default
end

- (Object) expression (readonly)

The expression to test the conditions against



1075
1076
1077
# File 'lib/sequel/sql.rb', line 1075

def expression
  @expression
end

Instance Method Details

- (Boolean) expression?

Whether to use an expression for this CASE expression.

Returns:

  • (Boolean)


1087
1088
1089
# File 'lib/sequel/sql.rb', line 1087

def expression?
  !@no_expression
end

- (Object) with_merged_expression

Merge the CASE expression into the conditions, useful for databases that don't support CASE expressions.



1093
1094
1095
1096
1097
1098
1099
1100
# File 'lib/sequel/sql.rb', line 1093

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