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.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/scenic/statements.rb', line 25 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 Scenic.database.create_materialized_view( name, sql_definition, no_data: no_data(materialized), ) 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.
63 64 65 66 67 68 69 |
# File 'lib/scenic/statements.rb', line 63 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.
135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/scenic/statements.rb', line 135 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.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/scenic/statements.rb', line 91 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 Scenic.database.update_materialized_view( name, sql_definition, no_data: no_data(materialized), ) else Scenic.database.update_view(name, sql_definition) end end |