class Sequel::Postgres::PGRow::HashRow

Class for row-valued/composite types that are treated as hashes. Types registered via Database#register_row_type will use this class by default.

Attributes

columns[RW]

The columns associated with this class.

db_type[RW]

The database type for this class. May be nil if this class done not have a specific database type.

columns[W]

Sets the columns associated with this instance. This is used to override the class's default columns.

db_type[W]

Sets the database type associated with this instance. This is used to override the class's default database type.

Public Class Methods

subclass(db_type, columns) click to toggle source

Create a new subclass of this class with the given database type and columns.

# File lib/sequel/extensions/pg_row.rb, line 163
def self.subclass(db_type, columns)
  Class.new(self) do
    @db_type = db_type
    @columns = columns
  end
end

Public Instance Methods

check_columns!() click to toggle source

Check that the HashRow has valid columns. This should be used before all attempts to literalize the object, since literalization depends on the columns to get the column order.

# File lib/sequel/extensions/pg_row.rb, line 196
def check_columns!
  if columns.nil? || columns.empty?
    raise Error, 'cannot literalize HashRow without columns'
  end
end
columns() click to toggle source

Return the instance's columns, or the class's columns if the instance has not overridden it.

# File lib/sequel/extensions/pg_row.rb, line 183
def columns
  @columns || self.class.columns
end
db_type() click to toggle source

Return the instance's database type, or the class's columns if the instance has not overridden it.

# File lib/sequel/extensions/pg_row.rb, line 189
def db_type
  @db_type || self.class.db_type
end
sql_literal_append(ds, sql) click to toggle source

Append SQL fragment related to this object to the sql.

# File lib/sequel/extensions/pg_row.rb, line 203
def sql_literal_append(ds, sql)
  check_columns!
  sql << ROW
  ds.literal_append(sql, values_at(*columns))
  if db_type
    sql << CAST
    ds.quote_schema_table_append(sql, db_type)
  end
end