Module: RailsSqlViews4::ConnectionAdapters::SchemaStatements
- Defined in:
- lib/rails_sql_views4/connection_adapters/abstract/schema_statements.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#create_mapping_view(old_name, new_name, options = {}) {|mapper| ... } ⇒ Object
Also creates a view, with the specific purpose of remapping column names to make non-ActiveRecord tables friendly with the naming conventions, while maintaining legacy app compatibility.
- #create_or_create_view_base(name, select_query, options, init_create_sql) ⇒ Object
- #create_or_replace_view(name, select_query, options = {}) ⇒ Object
-
#create_view(name, select_query, options = {}) ⇒ Object
Create a view.
-
#drop_table_with_cascade(table_name, options = {}) ⇒ Object
TODO : est appelé avec SQLITE, alors que c’est pas ok.
-
#drop_view(name, options = {}) ⇒ Object
Drop a view.
Class Method Details
.included(base) ⇒ Object
4 5 6 |
# File 'lib/rails_sql_views4/connection_adapters/abstract/schema_statements.rb', line 4 def self.included(base) base.alias_method_chain :drop_table, :cascade end |
Instance Method Details
#create_mapping_view(old_name, new_name, options = {}) {|mapper| ... } ⇒ Object
Also creates a view, with the specific purpose of remapping column names to make non-ActiveRecord tables friendly with the naming conventions, while maintaining legacy app compatibility.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/rails_sql_views4/connection_adapters/abstract/schema_statements.rb', line 62 def create_mapping_view(old_name, new_name, = {}) return unless supports_views? col_names = columns(old_name).collect { |col| col.name.to_sym } mapper = MappingDefinition.new(col_names) yield mapper if [:force] drop_view(new_name) rescue nil end view_sql = "CREATE VIEW #{new_name} " if supports_view_columns_definition? view_sql << "(#{mapper.view_cols.collect { |c| quote_column_name(c) }.join(', ')}) " end view_sql << "AS SELECT #{mapper.select_cols.collect { |c| quote_column_name(c) }.join(', ')} FROM #{old_name}" execute view_sql end |
#create_or_create_view_base(name, select_query, options, init_create_sql) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rails_sql_views4/connection_adapters/abstract/schema_statements.rb', line 29 def create_or_create_view_base(name, select_query, , init_create_sql) if supports_views? view_definition = ViewDefinition.new(self, select_query) if block_given? yield view_definition end if [:force] puts" TOTO : Please, force option is not correctly implemented in postgres" drop_view(name) rescue nil end # create_sql = "CREATE VIEW " create_sql = init_create_sql create_sql << "#{quote_table_name(name)} " if supports_view_columns_definition? && !view_definition.to_sql.blank? create_sql << "(" create_sql << view_definition.to_sql create_sql << ") " end create_sql << "AS #{view_definition.select_query}" create_sql << " WITH #{[:check_option]} CHECK OPTION" if [:check_option] execute create_sql end end |
#create_or_replace_view(name, select_query, options = {}) ⇒ Object
25 26 27 |
# File 'lib/rails_sql_views4/connection_adapters/abstract/schema_statements.rb', line 25 def create_or_replace_view(name, select_query, ={}) create_or_create_view_base(name, select_query, , "CREATE OR REPLACE VIEW ") end |
#create_view(name, select_query, options = {}) ⇒ Object
Create a view. The options hash can include the following keys:
:check_option-
Specify restrictions for inserts or updates in updatable views. ANSI SQL 92 defines two check option values: CASCADED and LOCAL. See your database documentation for allowed values.
we have a problem with the force option in postgres rescue nil will rescue the ruby program, but we still have an error for postgres and unfortunatly for postgress, the first error will stop the interpretor : ActiveRecord::StatementInvalid Exception: PG::InFailedSqlTransaction: ERROR:
current transaction is aborted, commands ignored until end of transaction block
21 22 23 |
# File 'lib/rails_sql_views4/connection_adapters/abstract/schema_statements.rb', line 21 def create_view(name, select_query, ={}) create_or_create_view_base(name, select_query, , "CREATE VIEW ") end |
#drop_table_with_cascade(table_name, options = {}) ⇒ Object
TODO : est appelé avec SQLITE, alors que c’est pas ok
83 84 85 86 87 88 89 90 |
# File 'lib/rails_sql_views4/connection_adapters/abstract/schema_statements.rb', line 83 def drop_table_with_cascade(table_name, = {}) # execute "DROP TABLE #{quote_table_name(table_name)} CASCADE" if supports_drop_table_cascade? execute "DROP TABLE #{quote_table_name(table_name)} CASCADE" else execute "DROP TABLE #{quote_table_name(table_name)}" end end |
#drop_view(name, options = {}) ⇒ Object
Drop a view. The options hash can include the following keys:
:drop_behavior-
Specify the drop behavior. ANSI SQL 92 defines two drop behaviors, CASCADE and RESTRICT. See your database documentation to determine what drop behaviors are available.
97 98 99 100 101 102 103 104 |
# File 'lib/rails_sql_views4/connection_adapters/abstract/schema_statements.rb', line 97 def drop_view(name, ={}) # if supports_views? # because of postgres (see create_view with force option) if supports_views? & table_exists?(name) drop_sql = "DROP VIEW #{quote_table_name(name)}" drop_sql << " #{[:drop_behavior]}" if [:drop_behavior] execute drop_sql end end |