Module: Spectacles::SchemaStatements::AbstractAdapter
- Included in:
- MysqlAdapter, PostgreSQLAdapter, SQLServerAdapter, SQLite3Adapter, SQLiteAdapter
- Defined in:
- lib/spectacles/schema_statements/abstract_adapter.rb
Instance Method Summary collapse
- #create_view(view_name, *args) ⇒ Object
- #create_view_statement(view_name, create_query) ⇒ Object
- #drop_view(view_name) ⇒ Object
- #drop_view_statement(view_name) ⇒ Object
- #view_exists?(name) ⇒ Boolean
- #views ⇒ Object
Instance Method Details
#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_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 |
#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 |