Class: Sequel::SQL::VirtualRow
- Inherits:
- BasicObject
- Includes:
- OperatorBuilders
- Defined in:
- lib/sequel/sql.rb,
lib/sequel/extensions/virtual_row_method_block.rb
Overview
The purpose of the VirtualRow class is to allow the easy creation of SQL identifiers and functions,
in a way that leads to more compact code.
An instance of this class is yielded to the block supplied to Dataset#where, Dataset#order, and Dataset#select (and the other methods that accept a block and pass it to one of those methods). If the block doesn't take an argument, the block is instance_execed in the context of an instance of this class.
VirtualRow uses method_missing to return either an Identifier, Function
depending on how it is called.
FunctionReturned if any arguments are supplied, using the method name as the function name, and the arguments as the function arguments.
IdentifierReturned otherwise, using the method name.
If splitting symbols has been enabled (not the default), then method calls without
arguments will return QualifiedIdentifier instances if the method call includes a
double underscore.
Examples:
ds = DB[:t]
# Argument yielded to block
ds.where{|r| r.name < 2} # SELECT * FROM t WHERE (name < 2)
# Block without argument (instance_exec)
ds.where{name < 2} # SELECT * FROM t WHERE (name < 2)
# Functions
ds.where{is_active(1, 'arg2')} # SELECT * FROM t WHERE is_active(1, 'arg2')
ds.select{version.function} # SELECT version() FROM t
ds.select{count.function.*} # SELECT count(*) FROM t
ds.select{count(col1).distinct} # SELECT count(DISTINCT col1) FROM t
# Math Operators
ds.select{|o| o.+(1, :a).as(:b)} # SELECT (1 + a) AS b FROM t
ds.select{|o| o.-(2, :a).as(:b)} # SELECT (2 - a) AS b FROM t
ds.select{|o| o.*(3, :a).as(:b)} # SELECT (3 * a) AS b FROM t
ds.select{|o| o./(4, :a).as(:b)} # SELECT (4 / a) AS b FROM t
# Boolean Operators
ds.where{|o| o.&({a: 1}, :b)} # SELECT * FROM t WHERE ((a = 1) AND b)
ds.where{|o| o.|({a: 1}, :b)} # SELECT * FROM t WHERE ((a = 1) OR b)
ds.where{|o| o.~(a: 1)} # SELECT * FROM t WHERE (a != 1)
ds.where{|o| o.~(a: 1, b: 2)} # SELECT * FROM t WHERE ((a != 1) OR (b != 2))
# Inequality Operators
ds.where{|o| o.>(1, :a)} # SELECT * FROM t WHERE (1 > a)
ds.where{|o| o.<(2, :a)} # SELECT * FROM t WHERE (2 < a)
ds.where{|o| o.>=(3, :a)} # SELECT * FROM t WHERE (3 >= a)
ds.where{|o| o.<=(4, :a)} # SELECT * FROM t WHERE (4 <= a)
For a more detailed explanation, see the Virtual Rows guide.
Instance Method Summary collapse
-
#initialize ⇒ VirtualRow
constructor
A new instance of VirtualRow.
Methods included from OperatorBuilders
Methods inherited from BasicObject
Constructor Details
#initialize ⇒ VirtualRow
Returns a new instance of VirtualRow.
1845 1846 1847 |
# File 'lib/sequel/sql.rb', line 1845 def initialize freeze end |