Module: Scenic::Statements
- Defined in:
- lib/scenic/statements.rb
Overview
Methods that are made available in migrations for managing Scenic views.
Instance Method Summary collapse
-
#create_view(name, version: nil, sql_definition: nil, materialized: false) ⇒ Object
Create a new database view.
-
#drop_view(name, revert_to_version: nil, materialized: false) ⇒ Object
Drop a database view by name.
-
#replace_view(name, version: nil, revert_to_version: nil, materialized: false) ⇒ Object
Update a database view to a new version using
CREATE OR REPLACE VIEW. -
#update_view(name, version: nil, sql_definition: nil, revert_to_version: nil, materialized: false) ⇒ Object
Update a database view to a new version.
Instance Method Details
#create_view(name, version: nil, sql_definition: nil, materialized: false) ⇒ Object
Create a new database view.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/scenic/statements.rb', line 27 def create_view(name, version: nil, sql_definition: nil, materialized: false) if version.present? && sql_definition.present? raise( ArgumentError, "sql_definition and version cannot both be set" ) end if version.blank? && sql_definition.blank? version = 1 end sql_definition ||= definition(name, version) if materialized = (materialized) Scenic.database.create_materialized_view( name, sql_definition, no_data: [:no_data] ) else Scenic.database.create_view(name, sql_definition) end end |
#drop_view(name, revert_to_version: nil, materialized: false) ⇒ Object
Drop a database view by name.
67 68 69 70 71 72 73 |
# File 'lib/scenic/statements.rb', line 67 def drop_view(name, revert_to_version: nil, materialized: false) if materialized Scenic.database.drop_materialized_view(name) else Scenic.database.drop_view(name) end end |
#replace_view(name, version: nil, revert_to_version: nil, materialized: false) ⇒ Object
Update a database view to a new version using CREATE OR REPLACE VIEW.
The existing view is replaced using the supplied version
parameter.
Does not work with materialized views due to lack of database support.
162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/scenic/statements.rb', line 162 def replace_view(name, version: nil, revert_to_version: nil, materialized: false) if version.blank? raise ArgumentError, "version is required" end if materialized raise ArgumentError, "Cannot replace materialized views" end sql_definition = definition(name, version) Scenic.database.replace_view(name, sql_definition) end |
#update_view(name, version: nil, sql_definition: nil, revert_to_version: nil, materialized: false) ⇒ Object
Update a database view to a new version.
The existing view is dropped and recreated using the supplied version
parameter.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/scenic/statements.rb', line 104 def update_view(name, version: nil, sql_definition: nil, revert_to_version: nil, materialized: false) if version.blank? && sql_definition.blank? raise( ArgumentError, "sql_definition or version must be specified" ) end if version.present? && sql_definition.present? raise( ArgumentError, "sql_definition and version cannot both be set" ) end sql_definition ||= definition(name, version) if materialized = (materialized) if [:no_data] && [:side_by_side] raise( ArgumentError, "no_data and side_by_side options cannot be combined" ) end if [:side_by_side] && !transaction_open? raise "a transaction is required to perform a side-by-side update" end Scenic.database.update_materialized_view( name, sql_definition, no_data: [:no_data], side_by_side: [:side_by_side] ) else Scenic.database.update_view(name, sql_definition) end end |