Module: Sequel::SQL::NumericMethods

Included in:
Dataset, LiteralString, GenericExpression, NumericExpression, Symbol
Defined in:
lib/sequel/sql.rb

Overview

This module includes the standard mathematical methods (+, -, *, and /) that are defined on objects that can be used in a numeric context in SQL (Symbol, LiteralString, and SQL::GenericExpression).

:a + :b # "a" + "b"
:a - :b # "a" - "b"
:a * :b # "a" * "b"
:a / :b # "a" / "b"

One exception to this is if + is called with a String or StringExpression, in which case the || operator is used instead of the + operator:

:a + 'b' # "a" || 'b'

Instance Method Summary collapse

Instance Method Details

#+(ce) ⇒ Object

Use || as the operator when called with StringExpression and String instances, and the + operator for LiteralStrings and all other types.



808
809
810
811
812
813
814
815
816
817
# File 'lib/sequel/sql.rb', line 808

def +(ce)
  case ce
  when LiteralString
    NumericExpression.new(:+, self, ce)
  when StringExpression, String
    StringExpression.new(:'||', self, ce)
  else
    NumericExpression.new(:+, self, ce)
  end
end

#coerce(other) ⇒ Object

If the argument given is Numeric, treat it as a NumericExpression, allowing code such as:

1 + Sequel.expr(:x) # SQL: (1 + x)
Sequel.expr{1 - x(y)} # SQL: (1 - x(y))


798
799
800
801
802
803
804
# File 'lib/sequel/sql.rb', line 798

def coerce(other)
  if other.is_a?(Numeric)
    [SQL::NumericExpression.new(:NOOP, other), self]
  else
    super 
  end
end