Class: DBViewCTI::SQLGeneration::Migration::Base
- Inherits:
-
Object
- Object
- DBViewCTI::SQLGeneration::Migration::Base
- Defined in:
- lib/db_view_cti/sql_generation/migration/base.rb
Direct Known Subclasses
Instance Method Summary collapse
- #create_trigger_sql ⇒ Object
- #create_view_sql ⇒ Object
- #drop_trigger_sql ⇒ Object
- #drop_view_sql ⇒ Object
-
#initialize(class_name, options = {}) ⇒ Base
constructor
A new instance of Base.
- #view_exists_sql ⇒ Object
Constructor Details
#initialize(class_name, options = {}) ⇒ Base
Returns a new instance of Base.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/db_view_cti/sql_generation/migration/base.rb', line 6 def initialize(class_name, = {}) @options = @derived_class = class_name.constantize @base_class = @derived_class.superclass @base_class_table = @base_class.table_name @derived_class_table = DBViewCTI::Names.table_name(@derived_class) # we assume the foreign key is in the derived class @base_class_key = 'id' @derived_class_key = DBViewCTI::Names.foreign_key(@base_class) # columns in base class @base_class_columns = @base_class.column_names if @base_class.cti_derived_class? # base class is itself derived, so we remove the foreign key it holds to the higher # level class foreign_key = DBViewCTI::Names.foreign_key(@base_class.superclass) @base_class_columns = @base_class_columns - [ foreign_key ] end # columns in derived class # first, reset table name (it might have been changed to the view name by cti_derived_class) temp = @derived_class.table_name @derived_class.table_name = @derived_class_table @derived_class.reset_column_information @derived_class_columns = @derived_class.column_names # put back old table name (needed since the class might be used again in a next migration) @derived_class.table_name = temp @derived_class.reset_column_information # names @view_name = DBViewCTI::Names.view_name(@derived_class) @trigger_name = DBViewCTI::Names.trigger_name(@derived_class) # column arrays for triggers @insert_base_class_columns = @base_class_columns - ['id'] @insert_derived_class_columns = @derived_class_columns - ['id', @derived_class_key] @update_base_class_columns = explicit_columns(@base_class_columns) + ['updated_at'] @update_derived_class_columns = @derived_class_columns - [ @derived_class_key ] end |
Instance Method Details
#create_trigger_sql ⇒ Object
64 65 66 67 |
# File 'lib/db_view_cti/sql_generation/migration/base.rb', line 64 def create_trigger_sql # to be implemented by derived classes raise NotImplementedError, "DBViewCTI: create_trigger_sql not implemented for this adapter." end |
#create_view_sql ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/db_view_cti/sql_generation/migration/base.rb', line 42 def create_view_sql base_columns = add_table_name( explicit_columns(@base_class_columns), @base_class_table). join(', ') derived_columns = add_table_name( @derived_class_columns - ['id', @derived_class_key], @derived_class_table). join(', ') query = <<-eos CREATE VIEW #{@view_name} AS SELECT #{@derived_class_table}.id, #{base_columns}, #{derived_columns} FROM #{@base_class_table} INNER JOIN #{@derived_class_table} ON #{ add_table_name(@base_class_key, @base_class_table) } = #{ add_table_name(@derived_class_key, @derived_class_table) }; eos end |
#drop_trigger_sql ⇒ Object
69 70 71 72 |
# File 'lib/db_view_cti/sql_generation/migration/base.rb', line 69 def drop_trigger_sql # to be implemented by derived classes raise NotImplementedError, "DBViewCTI: drop_trigger_sql not implemented for this adapter." end |
#drop_view_sql ⇒ Object
56 57 58 |
# File 'lib/db_view_cti/sql_generation/migration/base.rb', line 56 def drop_view_sql "DROP VIEW #{@view_name};" end |
#view_exists_sql ⇒ Object
60 61 62 |
# File 'lib/db_view_cti/sql_generation/migration/base.rb', line 60 def view_exists_sql raise NotImplementedError, "DBViewCTI: view_exists_sql not implemented for this adapter." end |