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
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.
-
#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.
-
#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.
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
131 132 133 |
# File 'lib/rom/sql/schema.rb', line 131 def call(relation) relation.new(relation.dataset.select(*self), schema: self) end |
#empty ⇒ Schema
Return an empty schema
140 141 142 |
# File 'lib/rom/sql/schema.rb', line 140 def empty new(EMPTY_ARRAY) 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
111 112 113 |
# File 'lib/rom/sql/schema.rb', line 111 def join(other) merge(other.joined) end |
#joined ⇒ Schema
Return a new schema with all attributes marked as joined
120 121 122 |
# File 'lib/rom/sql/schema.rb', line 120 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
78 79 80 81 82 83 84 |
# File 'lib/rom/sql/schema.rb', line 78 def project(*names, &block) if block super(*(names + ProjectionDSL.new(self).(&block))) else super end 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 |
#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 |