Module: Spectacles::SchemaStatements::AbstractAdapter
- Included in:
- MysqlAdapter, PostgreSQLAdapter, SQLServerAdapter, SQLite3Adapter, VerticaAdapter
- Defined in:
- lib/spectacles/schema_statements/abstract_adapter.rb
Instance Method Summary collapse
- #create_materialized_view(view_name, *args) ⇒ Object
- #create_view(view_name, *args) ⇒ Object
- #create_view_statement(view_name, create_query) ⇒ Object
- #drop_materialized_view(view_name) ⇒ Object
- #drop_view(view_name) ⇒ Object
- #drop_view_statement(view_name) ⇒ Object
- #materialized_view_build_query(view_name) ⇒ Object
- #materialized_view_exists?(name) ⇒ Boolean
- #materialized_views ⇒ Object
- #refresh_materialized_view(view_name) ⇒ Object
- #supports_materialized_views? ⇒ Boolean
- #view_exists?(name) ⇒ Boolean
- #views ⇒ Object
Instance Method Details
#create_materialized_view(view_name, *args) ⇒ Object
66 67 68 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 66 def create_materialized_view(view_name, *args) raise NotImplementedError, "Override create_materialized_view for your db adapter in #{self.class}" end |
#create_view(view_name, *args) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 4 def create_view(view_name, *args) = args. build_query = args.shift raise "#{self.class} requires a query or block" if build_query.nil? && !block_given? build_query = yield if block_given? build_query = build_query.to_sql if build_query.respond_to?(:to_sql) if [:force] && view_exists?(view_name) drop_view(view_name) end query = create_view_statement(view_name, build_query) execute(query) end |
#create_view_statement(view_name, create_query) ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 21 def create_view_statement(view_name, create_query) query = "CREATE VIEW ? AS #{create_query}" query_array = [query, view_name.to_s] #return ActiveRecord::Base.__send__(:sanitize_sql_array, query_array) "CREATE VIEW #{view_name} AS #{create_query}" end |
#drop_materialized_view(view_name) ⇒ Object
70 71 72 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 70 def drop_materialized_view(view_name) raise NotImplementedError, "Override drop_materialized_view for your db adapter in #{self.class}" end |
#drop_view(view_name) ⇒ Object
29 30 31 32 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 29 def drop_view(view_name) query = drop_view_statement(view_name) execute(query) end |
#drop_view_statement(view_name) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 34 def drop_view_statement(view_name) query = "DROP VIEW IF EXISTS ? " query_array = [query, view_name.to_s] #return ActiveRecord::Base.__send__(:sanitize_sql_array, query_array) "DROP VIEW IF EXISTS #{view_name} " end |
#materialized_view_build_query(view_name) ⇒ Object
62 63 64 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 62 def materialized_view_build_query(view_name) raise NotImplementedError, "Override materialized_view_build_query for your db adapter in #{self.class}" end |
#materialized_view_exists?(name) ⇒ Boolean
54 55 56 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 54 def materialized_view_exists?(name) return materialized_views.include?(name.to_s) end |
#materialized_views ⇒ Object
58 59 60 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 58 def materialized_views raise NotImplementedError, "Override materialized_views for your db adapter in #{self.class}" end |
#refresh_materialized_view(view_name) ⇒ Object
74 75 76 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 74 def refresh_materialized_view(view_name) raise NotImplementedError, "Override refresh_materialized_view for your db adapter in #{self.class}" end |
#supports_materialized_views? ⇒ Boolean
50 51 52 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 50 def supports_materialized_views? false end |
#view_exists?(name) ⇒ Boolean
42 43 44 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 42 def view_exists?(name) return views.include?(name.to_s) end |
#views ⇒ Object
46 47 48 |
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 46 def views raise "Override view for your db adapter in #{self.class}" end |