Class: Sequel::Postgres::PGArray

Inherits:
Array show all
Includes:
SQL::AliasMethods
Defined in:
lib/sequel/extensions/pg_array.rb,
lib/sequel/extensions/pg_array_ops.rb

Overview

:nocov:

Defined Under Namespace

Modules: DatabaseMethods Classes: Creator, Parser

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from SQL::AliasMethods

#as

Methods inherited from Array

#case, #pg_array, #pg_json, #pg_jsonb, #pg_row, #sql_expr, #sql_negate, #sql_or, #sql_string_join, #sql_value_list, #~

Constructor Details

#initialize(array, type = nil) ⇒ PGArray

Set the array to delegate to, and a database type.



458
459
460
461
# File 'lib/sequel/extensions/pg_array.rb', line 458

def initialize(array, type=nil)
  super(array)
  @array_type = type
end

Instance Attribute Details

#array_typeObject

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’



455
456
457
# File 'lib/sequel/extensions/pg_array.rb', line 455

def array_type
  @array_type
end

Instance Method Details

#opObject

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



294
295
296
# File 'lib/sequel/extensions/pg_array_ops.rb', line 294

def op
  ArrayOp.new(self)
end

#sequel_auto_param_type(ds) ⇒ Object

Allow automatic parameterization of the receiver if all elements can be can be automatically parameterized.



481
482
483
484
485
# File 'lib/sequel/extensions/pg_array.rb', line 481

def sequel_auto_param_type(ds)
  if array_type && all?{|x| nil == x || ds.send(:auto_param_type, x)}
    "::#{array_type}[]"
  end
end

#sql_literal_append(ds, sql) ⇒ Object

Append the array SQL to the given sql string. If the receiver has a type, add a cast to the database array type.



466
467
468
469
470
471
472
473
474
475
476
477
# File 'lib/sequel/extensions/pg_array.rb', line 466

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