Class: Sequel::Postgres::PGRow::HashRow

Inherits:
Hash show all
Includes:
SQL::AliasMethods
Defined in:
lib/sequel/extensions/pg_row.rb

Overview

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

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SQL::AliasMethods

#as

Methods inherited from Hash

#&, #case, #hstore, #pg_json, #pg_jsonb, #sql_expr, #sql_negate, #sql_or, #|, #~

Class Attribute Details

.columnsObject

The columns associated with this class.



155
156
157
# File 'lib/sequel/extensions/pg_row.rb', line 155

def columns
  @columns
end

.db_typeObject

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



159
160
161
# File 'lib/sequel/extensions/pg_row.rb', line 159

def db_type
  @db_type
end

Instance Attribute Details

#columnsObject

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



188
189
190
# File 'lib/sequel/extensions/pg_row.rb', line 188

def columns
  @columns || self.class.columns
end

#db_typeObject

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



194
195
196
# File 'lib/sequel/extensions/pg_row.rb', line 194

def db_type
  @db_type || self.class.db_type
end

Class Method Details

.subclass(db_type, columns) ⇒ Object

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



168
169
170
171
172
173
# File 'lib/sequel/extensions/pg_row.rb', line 168

def self.subclass(db_type, columns)
  Class.new(self) do
    @db_type = db_type
    @columns = columns
  end
end

Instance Method Details

#check_columns!Object

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.



201
202
203
204
205
# File 'lib/sequel/extensions/pg_row.rb', line 201

def check_columns!
  if columns.nil? || columns.empty?
    raise Error, 'cannot literalize HashRow without columns'
  end
end

#sql_literal_append(ds, sql) ⇒ Object

Append SQL fragment related to this object to the sql.



208
209
210
211
212
213
214
215
216
# File 'lib/sequel/extensions/pg_row.rb', line 208

def sql_literal_append(ds, sql)
  check_columns!
  sql << 'ROW'
  ds.literal_append(sql, values_at(*columns))
  if db_type
    sql << '::'
    ds.quote_schema_table_append(sql, db_type)
  end
end