class Sequel::Postgres::PGArray

Represents a PostgreSQL array column value.

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, line 419
def initialize(array, type=nil)
  super(array)
  @array_type = type
end

Public Instance Methods

op() click to toggle source

Wrap the PGArray instance in an ArrayOp, allowing you to easily use the PostgreSQL array functions and operators with literal arrays.

# File lib/sequel/extensions/pg_array_ops.rb, line 286
def op
  ArrayOp.new(self)
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, line 427
def sql_literal_append(ds, sql)
  at = array_type
  if empty? && at
    sql << "'{}'"
  else
    sql << "ARRAY"
    _literal_append(sql, ds, to_a)
  end
  if at
    sql << '::' << at.to_s << '[]'
  end
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, line 445
def _literal_append(sql, ds, array)
  sql << '['
  comma = false
  commas = ','
  array.each do |i|
    sql << commas if comma
    if i.is_a?(Array)
      _literal_append(sql, ds, i)
    else
      ds.literal_append(sql, i)
    end
    comma = true
  end
  sql << ']'
end