module Sequel::Postgres::PGArray::DatabaseMethods

Constants

APOS
BLOB_RANGE
DOUBLE_APOS
ESCAPE_RE
ESCAPE_REPLACEMENT

Public Class Methods

extended(db) click to toggle source

Create the local hash of database type strings to schema type symbols, used for array types local to this database.

# File lib/sequel/extensions/pg_array.rb, line 199
def self.extended(db)
  db.instance_eval do
    @pg_array_schema_types ||= {}
    procs = conversion_procs
    procs[1115] = Creator.new("timestamp without time zone", procs[1114])
    procs[1185] = Creator.new("timestamp with time zone", procs[1184])
    copy_conversion_procs([143, 791, 1000, 1001, 1003, 1005, 1006, 1007, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1021, 1022, 1028, 1182, 1183, 1231, 1270, 1561, 1563, 2951])
    [:string_array, :integer_array, :decimal_array, :float_array, :boolean_array, :blob_array, :date_array, :time_array, :datetime_array].each do |v|
      @schema_type_classes[v] = PGArray
    end
  end
end

Public Instance Methods

bound_variable_arg(arg, conn) click to toggle source

Handle arrays in bound variables

# File lib/sequel/extensions/pg_array.rb, line 213
def bound_variable_arg(arg, conn)
  case arg
  when PGArray
    bound_variable_array(arg.to_a)
  when Array
    bound_variable_array(arg)
  else
    super
  end
end
freeze() click to toggle source

Freeze the pg array schema types to prevent adding new ones.

# File lib/sequel/extensions/pg_array.rb, line 225
def freeze
  @pg_array_schema_types.freeze
  super
end
register_array_type(db_type, opts=OPTS, &block) click to toggle source

Register a database specific array type. This can be used to support different array types per Database. Use of this method does not affect global state, unlike Sequel::Postgres::PGArray.register. See Sequel::Postgres::PGArray.register for possible options.

# File lib/sequel/extensions/pg_array.rb, line 234
def register_array_type(db_type, opts=OPTS, &block)
  opts = {:type_procs=>conversion_procs, :typecast_method_map=>@pg_array_schema_types, :typecast_methods_module=>(class << self; self; end)}.merge!(opts)
  unless (opts.has_key?(:scalar_oid) || block) && opts.has_key?(:oid)
    array_oid, scalar_oid = from(:pg_type).where(:typname=>db_type.to_s).get([:typarray, :oid])
    opts[:scalar_oid] = scalar_oid unless opts.has_key?(:scalar_oid) || block
    opts[:oid] = array_oid unless opts.has_key?(:oid)
  end
  PGArray.register(db_type, opts, &block)
  @schema_type_classes[:"#{opts[:type_symbol] || db_type}_array"] = PGArray
  conversion_procs_updated
end
schema_type_class(type) click to toggle source

Return PGArray if this type matches any supported array type.

# File lib/sequel/extensions/pg_array.rb, line 247
def schema_type_class(type)
  super || (ARRAY_TYPES.each_value{|v| return PGArray if type == v}; nil)
end