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
more...

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.

[View source]

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.

[View source]

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.

[View source]

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.

[View source]

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.

[View source]

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