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/attributes_inferrer.rb
Overview
Specialized schema for SQL databases
Defined Under Namespace
Classes: 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) ⇒ 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.
-
#qualified_projection(table_alias = nil) ⇒ Schema
Return a new schema with attributes that are aliased and 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.
26 |
# File 'lib/rom/sql/schema.rb', line 26 option :foreign_keys, default: -> { EMPTY_SET } |
#indexes ⇒ Array<Index> (readonly)
Returns Array with schema indexes.
22 |
# File 'lib/rom/sql/schema.rb', line 22 option :indexes, default: -> { EMPTY_SET } |
Instance Method Details
#call(relation) ⇒ Relation
Create a new relation based on the schema definition
143 144 145 |
# File 'lib/rom/sql/schema.rb', line 143 def call(relation) relation.new(relation.dataset.select(*self.qualified_projection), schema: self) end |
#empty ⇒ Schema
Return an empty schema
152 153 154 |
# File 'lib/rom/sql/schema.rb', line 152 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
168 169 170 171 172 173 174 |
# File 'lib/rom/sql/schema.rb', line 168 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) ⇒ 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
159 160 161 162 163 |
# File 'lib/rom/sql/schema.rb', line 159 def finalize_attributes!(**) super do @attributes = map(&:qualified) end end |
#group(&block) ⇒ Mixed
Open Group DSL for setting GROUP BY clause in queries
57 58 59 |
# File 'lib/rom/sql/schema.rb', line 57 def group(&block) GroupDSL.new(self).call(&block) end |
#join(other) ⇒ Schema
Join with another schema
123 124 125 |
# File 'lib/rom/sql/schema.rb', line 123 def join(other) merge(other.joined) end |
#joined ⇒ Schema
Return a new schema with all attributes marked as joined
132 133 134 |
# File 'lib/rom/sql/schema.rb', line 132 def joined new(map(&:joined)) end |
#order(&block) ⇒ Mixed
Open Order DSL for setting ORDER clause in queries
46 47 48 |
# File 'lib/rom/sql/schema.rb', line 46 def order(&block) OrderDSL.new(self).call(&block) end |
#project(*names, &block) ⇒ Schema
Project a schema
90 91 92 93 94 95 96 |
# File 'lib/rom/sql/schema.rb', line 90 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
112 113 114 |
# File 'lib/rom/sql/schema.rb', line 112 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
103 104 105 |
# File 'lib/rom/sql/schema.rb', line 103 def project_pk project(*primary_key_names) end |
#qualified(table_alias = nil) ⇒ Schema
Return a new schema with attributes marked as qualified
66 67 68 |
# File 'lib/rom/sql/schema.rb', line 66 def qualified(table_alias = nil) new(map { |attr| attr.qualified(table_alias) }) end |
#qualified_projection(table_alias = nil) ⇒ Schema
Return a new schema with attributes that are aliased and marked as qualified
Intended to be used when passing attributes to ‘dataset#select`
78 79 80 |
# File 'lib/rom/sql/schema.rb', line 78 def qualified_projection(table_alias = nil) new(map { |attr| attr.qualified_projection(table_alias) }) end |
#restriction(&block) ⇒ Mixed
Open restriction DSL for defining query conditions using schema attributes
35 36 37 |
# File 'lib/rom/sql/schema.rb', line 35 def restriction(&block) RestrictionDSL.new(self).call(&block) end |