class Sequel::Postgres::ArrayOp
The ArrayOp
class is a simple container for a single object that defines methods that yield Sequel
expression objects representing PostgreSQL array operators and functions.
In the method documentation examples, assume that:
array_op = :array.pg_array
Constants
- CONCAT
- CONTAINED_BY
- CONTAINS
- OVERLAPS
Public Instance Methods
Access
a member of the array, returns an SQL::Subscript
instance:
array_op[1] # array[1]
# File lib/sequel/extensions/pg_array_ops.rb 91 def [](key) 92 s = Sequel::SQL::Subscript.new(self, [key]) 93 s = ArrayOp.new(s) if key.is_a?(Range) 94 s 95 end
Call the ALL function:
array_op.all # ALL(array)
Usually used like:
dataset.where(1=>array_op.all) # WHERE (1 = ALL(array))
# File lib/sequel/extensions/pg_array_ops.rb 105 def all 106 function(:ALL) 107 end
Call the ANY function:
array_op.all # ANY(array)
Usually used like:
dataset.where(1=>array_op.any) # WHERE (1 = ANY(array))
# File lib/sequel/extensions/pg_array_ops.rb 117 def any 118 function(:ANY) 119 end
Call the cardinality method:
array_op.cardinality # cardinality(array)
# File lib/sequel/extensions/pg_array_ops.rb 124 def cardinality 125 function(:cardinality) 126 end
Use the contained by (<@) operator:
array_op.contained_by(:a) # (array <@ a)
# File lib/sequel/extensions/pg_array_ops.rb 138 def contained_by(other) 139 bool_op(CONTAINED_BY, wrap_array(other)) 140 end
Use the contains (@>) operator:
array_op.contains(:a) # (array @> a)
# File lib/sequel/extensions/pg_array_ops.rb 131 def contains(other) 132 bool_op(CONTAINS, wrap_array(other)) 133 end
Call the array_dims method:
array_op.dims # array_dims(array)
# File lib/sequel/extensions/pg_array_ops.rb 145 def dims 146 function(:array_dims) 147 end
Convert the array into an hstore using the hstore function. If given an argument, use the two array form:
array_op.hstore # hstore(array) array_op.hstore(:array2) # hstore(array, array2)
# File lib/sequel/extensions/pg_array_ops.rb 154 def hstore(arg=(no_arg_given=true; nil)) 155 v = if no_arg_given 156 Sequel.function(:hstore, self) 157 else 158 Sequel.function(:hstore, self, wrap_array(arg)) 159 end 160 if Sequel.respond_to?(:hstore_op) 161 v = Sequel.hstore_op(v) 162 end 163 v 164 end
Call the array_length method:
array_op.length # array_length(array, 1) array_op.length(2) # array_length(array, 2)
# File lib/sequel/extensions/pg_array_ops.rb 170 def length(dimension = 1) 171 function(:array_length, dimension) 172 end
Call the array_lower method:
array_op.lower # array_lower(array, 1) array_op.lower(2) # array_lower(array, 2)
# File lib/sequel/extensions/pg_array_ops.rb 178 def lower(dimension = 1) 179 function(:array_lower, dimension) 180 end
Use the overlaps (&&) operator:
array_op.overlaps(:a) # (array && a)
# File lib/sequel/extensions/pg_array_ops.rb 185 def overlaps(other) 186 bool_op(OVERLAPS, wrap_array(other)) 187 end
Return the receiver.
# File lib/sequel/extensions/pg_array_ops.rb 199 def pg_array 200 self 201 end
Use the concatentation (||) operator:
array_op.push(:a) # (array || a) array_op.concat(:a) # (array || a)
# File lib/sequel/extensions/pg_array_ops.rb 193 def push(other) 194 array_op(CONCAT, [self, wrap_array(other)]) 195 end
Remove the given element from the array:
array_op.remove(1) # array_remove(array, 1)
# File lib/sequel/extensions/pg_array_ops.rb 206 def remove(element) 207 ArrayOp.new(function(:array_remove, element)) 208 end
Replace the given element in the array with another element:
array_op.replace(1, 2) # array_replace(array, 1, 2)
# File lib/sequel/extensions/pg_array_ops.rb 214 def replace(element, replacement) 215 ArrayOp.new(function(:array_replace, element, replacement)) 216 end
Call the array_to_string method:
array_op.join # array_to_string(array, '', NULL) array_op.to_string # array_to_string(array, '', NULL) array_op.join(":") # array_to_string(array, ':', NULL) array_op.join(":", "*") # array_to_string(array, ':', '*')
# File lib/sequel/extensions/pg_array_ops.rb 224 def to_string(joiner="", null=nil) 225 function(:array_to_string, joiner, null) 226 end
Call the unnest method:
array_op.unnest # unnest(array)
# File lib/sequel/extensions/pg_array_ops.rb 232 def unnest(*args) 233 function(:unnest, *args.map{|a| wrap_array(a)}) 234 end
Use the concatentation (||) operator, reversing the order:
array_op.unshift(:a) # (a || array)
# File lib/sequel/extensions/pg_array_ops.rb 239 def unshift(other) 240 array_op(CONCAT, [wrap_array(other), self]) 241 end
Private Instance Methods
Return a placeholder literal with the given str and args, wrapped in an ArrayOp
, used by operators that return arrays.
# File lib/sequel/extensions/pg_array_ops.rb 247 def array_op(str, args) 248 ArrayOp.new(Sequel::SQL::PlaceholderLiteralString.new(str, args)) 249 end
Return a placeholder literal with the given str and args, wrapped in a boolean expression, used by operators that return booleans.
# File lib/sequel/extensions/pg_array_ops.rb 253 def bool_op(str, other) 254 Sequel::SQL::BooleanExpression.new(:NOOP, Sequel::SQL::PlaceholderLiteralString.new(str, [value, other])) 255 end
Return a function with the given name, and the receiver as the first argument, with any additional arguments given.
# File lib/sequel/extensions/pg_array_ops.rb 259 def function(name, *args) 260 SQL::Function.new(name, self, *args) 261 end