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

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

Overview

:nocov:

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.



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

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.



163
164
165
# File 'lib/sequel/extensions/pg_row.rb', line 163

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.



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

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.



199
200
201
# File 'lib/sequel/extensions/pg_row.rb', line 199

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.



172
173
174
175
176
177
178
# File 'lib/sequel/extensions/pg_row.rb', line 172

def self.subclass(db_type, columns)
  Class.new(self) do
    Sequel.set_temp_name(self){"Sequel::Postgres::PGRow::HashRow::_Subclass(#{db_type})"}
    @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.



206
207
208
209
210
# File 'lib/sequel/extensions/pg_row.rb', line 206

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

#opObject

Wrap the PGRow::ArrayRow instance in an PGRowOp, allowing you to easily use the PostgreSQL row functions and operators with literal rows.



180
181
182
# File 'lib/sequel/extensions/pg_row_ops.rb', line 180

def op
  Sequel.pg_row_op(self)
end

#sequel_auto_param_type(ds) ⇒ Object

Allow automatic parameterization if all values support it.



224
225
226
227
228
229
230
# File 'lib/sequel/extensions/pg_row.rb', line 224

def sequel_auto_param_type(ds)
  if db_type && all?{|_,v| nil == v || ds.send(:auto_param_type, v)}
    s = String.new << "::"
    ds.quote_schema_table_append(s, db_type)
    s
  end
end

#sql_literal_append(ds, sql) ⇒ Object

Append SQL fragment related to this object to the sql.



213
214
215
216
217
218
219
220
221
# File 'lib/sequel/extensions/pg_row.rb', line 213

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