class Sequel::Postgres::PGArray
Represents a PostgreSQL array column value.
:nocov:
Attributes
array_type[RW]
The type of this array. May be nil if no type was given. If a type is provided, the array is automatically casted to this type when literalizing. This type is the underlying type, not the array type itself, so for an int4[] database type, it should be :int4 or 'int4'
Public Class Methods
new(array, type=nil)
click to toggle source
Set the array to delegate to, and a database type.
Calls superclass method
# File lib/sequel/extensions/pg_array.rb 450 def initialize(array, type=nil) 451 super(array) 452 @array_type = type 453 end
Public Instance Methods
op()
click to toggle source
sequel_auto_param_type(ds)
click to toggle source
Allow automatic parameterization of the receiver if all elements can be can be automatically parameterized.
# File lib/sequel/extensions/pg_array.rb 473 def sequel_auto_param_type(ds) 474 if array_type && all?{|x| nil == x || ds.send(:auto_param_type, x)} 475 "::#{array_type}[]" 476 end 477 end
sql_literal_append(ds, sql)
click to toggle source
Append the array SQL
to the given sql string. If the receiver has a type, add a cast to the database array type.
# File lib/sequel/extensions/pg_array.rb 458 def sql_literal_append(ds, sql) 459 at = array_type 460 if empty? && at 461 sql << "'{}'" 462 else 463 sql << "ARRAY" 464 _literal_append(sql, ds, to_a) 465 end 466 if at 467 sql << '::' << at.to_s << '[]' 468 end 469 end
Private Instance Methods
_literal_append(sql, ds, array)
click to toggle source
Recursive method that handles multi-dimensional arrays, surrounding each with [] and interspersing entries with ,.
# File lib/sequel/extensions/pg_array.rb 484 def _literal_append(sql, ds, array) 485 sql << '[' 486 comma = false 487 commas = ',' 488 array.each do |i| 489 sql << commas if comma 490 if i.is_a?(Array) 491 _literal_append(sql, ds, i) 492 else 493 ds.literal_append(sql, i) 494 end 495 comma = true 496 end 497 sql << ']' 498 end