module Sequel::Postgres::PGArray::DatabaseMethods

  1. lib/sequel/extensions/pg_array.rb
Parent: PGArray

Methods

Public Class

  1. extended

Public Instance

  1. bound_variable_arg
  2. register_array_type
  3. schema_type_class

Constants

APOS = "'".freeze  
BLOB_RANGE = 1...-1  
DOUBLE_APOS = "''".freeze  
ESCAPE_RE = /("|\\)/.freeze  
ESCAPE_REPLACEMENT = '\\\\\1'.freeze  

Public Class methods

extended (db)

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

[show source]
# File lib/sequel/extensions/pg_array.rb, line 223
def self.extended(db)
  db.instance_eval do
    @pg_array_schema_types ||= {}
    copy_conversion_procs([1009, 1007, 1016, 1231, 1022, 1000, 1001, 1182, 1183, 1270, 1005, 1028, 1021, 1014, 1015])
    [: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

  procs = db.conversion_procs
  procs[1115] = Creator.new("timestamp without time zone", procs[1114])
  procs[1185] = Creator.new("timestamp with time zone", procs[1184])
end

Public Instance methods

bound_variable_arg (arg, conn)

Handle arrays in bound variables

[show source]
# File lib/sequel/extensions/pg_array.rb, line 238
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
register_array_type (db_type, opts=OPTS, &block)

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.

[show source]
# File lib/sequel/extensions/pg_array.rb, line 253
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[:typecast_method] || opts[:type_symbol] || db_type}_array"] = PGArray
end
schema_type_class (type)

Return PGArray if this type matches any supported array type.

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