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
#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, #read, #rename, #reverse, #right_join, #select, #select_append, #select_group, #sum, #union, #unique?, #where
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.
90 91 92 |
# File 'lib/rom/sql/relation.rb', line 90 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.
50 51 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 |
# File 'lib/rom/sql/relation.rb', line 50 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.
95 96 97 98 |
# File 'lib/rom/sql/relation.rb', line 95 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
115 116 117 |
# File 'lib/rom/sql/relation.rb', line 115 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
149 150 151 |
# File 'lib/rom/sql/relation.rb', line 149 def columns @columns ||= dataset.columns end |
#transaction(opts = EMPTY_HASH) {|t| ... } ⇒ Mixed
Open a database transaction
140 141 142 |
# File 'lib/rom/sql/relation.rb', line 140 def transaction(opts = EMPTY_HASH, &block) Transaction.new(dataset.db).run(opts, &block) end |