Class: ROM::SQL::Relation
- Inherits:
-
Relation
- Object
- Relation
- ROM::SQL::Relation
- Extended by:
- Notifications::Listener
- Defined in:
- lib/rom/sql/relation.rb,
lib/rom/sql/relation/reading.rb,
lib/rom/sql/relation/writing.rb
Overview
Sequel-specific relation extensions
Defined Under Namespace
Constant Summary
Constants included from Reading
Constants included from ROM::SQL
CheckConstraintError, ConstraintError, DatabaseError, ERROR_MAP, ForeignKeyConstraintError, MigrationError, MissingConfigurationError, MissingPrimaryKeyError, NoAssociationError, NotNullConstraintError, UniqueConstraintError, UnknownDBTypeError, UnsupportedConversion, VERSION
Class Method Summary collapse
- .associations ⇒ Object private
- .define_default_views! ⇒ Object private
- .primary_key_columns(db, table) ⇒ Object private
Instance Method Summary collapse
-
#assoc(name) ⇒ Relation
Return relation that will load associated tuples of this relation.
-
#columns ⇒ Array<Symbol>
private
Return raw column names.
-
#transaction(opts = EMPTY_HASH) {|t| ... } ⇒ Mixed
Open a database transaction.
Methods included from Reading
#as_hash, #avg, #count, #distinct, #each_batch, #exclude, #exist?, #exists, #fetch, #first, #group, #group_and_count, #group_append, #having, #invert, #join, #last, #left_join, #limit, #lock, #map, #max, #min, #offset, #order, #pluck, #prefix, #qualified, #qualified_columns, #query, #read, #rename, #reverse, #right_join, #select, #select_append, #select_group, #sum, #unfiltered, #union, #unique?, #unordered, #where, #wrap
Methods included from Writing
#delete, #import, #insert, #multi_insert, #update, #upsert
Methods included from ROM::SQL
Class Method Details
.associations ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
92 93 94 |
# File 'lib/rom/sql/relation.rb', line 92 def self.associations schema.associations end |
.define_default_views! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/rom/sql/relation.rb', line 52 def self.define_default_views! undef_method :by_pk if method_defined?(:by_pk) if schema.primary_key.size > 1 # @!method by_pk(val1, val2) # Return a relation restricted by its composite primary key # # @param [Array] args A list with composite pk values # # @return [SQL::Relation] # # @api public class_eval <<-RUBY, __FILE__, __LINE__ + 1 def by_pk(#{schema.primary_key.map(&:name).join(', ')}) where(#{schema.primary_key.map { |attr| "schema.canonical[:#{attr.name}] => #{attr.name}" }.join(', ')}) end RUBY else # @!method by_pk(pk) # Return a relation restricted by its primary key # # @param [Object] pk The primary key value # # @return [SQL::Relation] # # @api public class_eval <<-RUBY, __FILE__, __LINE__ + 1 def by_pk(pk) if primary_key.nil? raise MissingPrimaryKeyError.new( "Missing primary key for :\#{schema.name}" ) end where(schema.canonical[schema.canonical.primary_key_name].qualified => pk) end RUBY end end |
.primary_key_columns(db, table) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
97 98 99 100 |
# File 'lib/rom/sql/relation.rb', line 97 def self.primary_key_columns(db, table) names = db.respond_to?(:primary_key) ? Array(db.primary_key(table)) : [:id] names.map { |col| :"#{table}__#{col}" } end |
Instance Method Details
#assoc(name) ⇒ Relation
Return relation that will load associated tuples of this relation
This method is useful for defining custom relation views for relation composition when you want to enhance default association query
117 118 119 |
# File 'lib/rom/sql/relation.rb', line 117 def assoc(name) associations[name].() end |
#columns ⇒ Array<Symbol>
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Return raw column names
151 152 153 |
# File 'lib/rom/sql/relation.rb', line 151 def columns @columns ||= dataset.columns end |
#transaction(opts = EMPTY_HASH) {|t| ... } ⇒ Mixed
Open a database transaction
142 143 144 |
# File 'lib/rom/sql/relation.rb', line 142 def transaction(opts = EMPTY_HASH, &block) Transaction.new(dataset.db).run(opts, &block) end |