Class: ROM::SQL::Schema
- Inherits:
-
ROM::Schema
- Object
- ROM::Schema
- ROM::SQL::Schema
- Defined in:
- lib/rom/sql/schema.rb,
lib/rom/sql/schema/dsl.rb,
lib/rom/sql/schema/inferrer.rb,
lib/rom/sql/schema/index_dsl.rb,
lib/rom/sql/schema/type_builder.rb,
lib/rom/sql/schema/associations_dsl.rb,
lib/rom/sql/schema/attributes_inferrer.rb
Overview
Specialized schema for SQL databases
Defined Under Namespace
Classes: AssociationsDSL, AttributesInferrer, DSL, IndexDSL, Inferrer, TypeBuilder
Instance Attribute Summary collapse
-
#foreign_keys ⇒ Array<ForeignKey>
readonly
Array with foreign keys.
-
#indexes ⇒ Array<Index>
readonly
Array with schema indexes.
Instance Method Summary collapse
-
#call(relation) ⇒ Relation
Create a new relation based on the schema definition.
-
#empty ⇒ Schema
Return an empty schema.
-
#finalize_associations!(relations:) ⇒ Object
private
Finalize associations.
-
#finalize_attributes!(options = EMPTY_HASH) ⇒ Object
private
Finalize all attributes by qualifying them and initializing primary key names.
-
#group(&block) ⇒ Mixed
Open Group DSL for setting GROUP BY clause in queries.
-
#join(other) ⇒ Schema
Join with another schema.
-
#joined ⇒ Schema
Return a new schema with all attributes marked as joined.
-
#order(&block) ⇒ Mixed
Open Order DSL for setting ORDER clause in queries.
-
#project(*names, &block) ⇒ Schema
Project a schema.
-
#project_fk(mapping) ⇒ Schema
private
Project schema so that it only contains renamed foreign key.
-
#project_pk ⇒ Schema
private
Project schema so that it only contains primary key.
-
#qualified(table_alias = nil) ⇒ Schema
Return a new schema with attributes marked as qualified.
-
#restriction(&block) ⇒ Mixed
Open restriction DSL for defining query conditions using schema attributes.
Instance Attribute Details
#foreign_keys ⇒ Array<ForeignKey> (readonly)
Returns Array with foreign keys.
24 |
# File 'lib/rom/sql/schema.rb', line 24 option :foreign_keys, default: -> { EMPTY_SET } |
#indexes ⇒ Array<Index> (readonly)
Returns Array with schema indexes.
20 |
# File 'lib/rom/sql/schema.rb', line 20 option :indexes, default: -> { EMPTY_SET } |
Instance Method Details
#call(relation) ⇒ Relation
Create a new relation based on the schema definition
129 130 131 |
# File 'lib/rom/sql/schema.rb', line 129 def call(relation) relation.new(relation.dataset.select(*self), schema: self) end |
#empty ⇒ Schema
Return an empty schema
138 139 140 |
# File 'lib/rom/sql/schema.rb', line 138 def empty new(EMPTY_ARRAY) end |
#finalize_associations!(relations:) ⇒ 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.
Finalize associations
155 156 157 158 159 160 161 |
# File 'lib/rom/sql/schema.rb', line 155 def finalize_associations!(relations:) super do associations.map do |definition| SQL::Associations.const_get(definition.type).new(definition, relations) end end end |
#finalize_attributes!(options = EMPTY_HASH) ⇒ 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.
Finalize all attributes by qualifying them and initializing primary key names
145 146 147 148 149 150 |
# File 'lib/rom/sql/schema.rb', line 145 def finalize_attributes!( = EMPTY_HASH) super do @attributes = map(&:qualified) initialize_primary_key_names end end |
#group(&block) ⇒ Mixed
Open Group DSL for setting GROUP BY clause in queries
55 56 57 |
# File 'lib/rom/sql/schema.rb', line 55 def group(&block) GroupDSL.new(self).call(&block) end |
#join(other) ⇒ Schema
Join with another schema
109 110 111 |
# File 'lib/rom/sql/schema.rb', line 109 def join(other) merge(other.joined) end |
#joined ⇒ Schema
Return a new schema with all attributes marked as joined
118 119 120 |
# File 'lib/rom/sql/schema.rb', line 118 def joined new(map(&:joined)) end |
#order(&block) ⇒ Mixed
Open Order DSL for setting ORDER clause in queries
44 45 46 |
# File 'lib/rom/sql/schema.rb', line 44 def order(&block) OrderDSL.new(self).call(&block) end |
#project(*names, &block) ⇒ Schema
Project a schema
76 77 78 79 80 81 82 |
# File 'lib/rom/sql/schema.rb', line 76 def project(*names, &block) if block super(*(names + ProjectionDSL.new(self).(&block))) else super end end |
#project_fk(mapping) ⇒ Schema
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.
Project schema so that it only contains renamed foreign key
98 99 100 |
# File 'lib/rom/sql/schema.rb', line 98 def project_fk(mapping) new(rename(mapping).map(&:foreign_key)) end |
#project_pk ⇒ Schema
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.
Project schema so that it only contains primary key
89 90 91 |
# File 'lib/rom/sql/schema.rb', line 89 def project_pk project(*primary_key_names) end |
#qualified(table_alias = nil) ⇒ Schema
Return a new schema with attributes marked as qualified
64 65 66 |
# File 'lib/rom/sql/schema.rb', line 64 def qualified(table_alias = nil) new(map { |attr| attr.qualified(table_alias) }) end |
#restriction(&block) ⇒ Mixed
Open restriction DSL for defining query conditions using schema attributes
33 34 35 |
# File 'lib/rom/sql/schema.rb', line 33 def restriction(&block) RestrictionDSL.new(self).call(&block) end |