Class: Sequel::Postgres::PGArray

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

Overview

simplecov:enable

Defined Under Namespace

Modules: DatabaseMethods Classes: Creator, Parser

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from SQL::CastMethods

#cast, #cast_numeric, #cast_string

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.



461
462
463
464
# File 'lib/sequel/extensions/pg_array.rb', line 461

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'



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

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.



390
391
392
# File 'lib/sequel/extensions/pg_array_ops.rb', line 390

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.



484
485
486
487
488
# File 'lib/sequel/extensions/pg_array.rb', line 484

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.



469
470
471
472
473
474
475
476
477
478
479
480
# File 'lib/sequel/extensions/pg_array.rb', line 469

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