Module: DBViewCTI::ConnectionAdapters::SchemaStatements

Defined in:
lib/db_view_cti/connection_adapters/schema_statements.rb

Instance Method Summary collapse

Instance Method Details

#cti_create_view(class_name, options = {}) ⇒ Object



5
6
7
8
9
# File 'lib/db_view_cti/connection_adapters/schema_statements.rb', line 5

def cti_create_view(class_name, options = {})
  generator = DBViewCTI::SQLGeneration::Migration::Factory.generator(class_name)
  cti_execute_sql(generator.create_view_sql)
  cti_execute_sql(generator.create_trigger_sql)
end

#cti_drop_view(class_name, options = {}) ⇒ Object



11
12
13
14
15
# File 'lib/db_view_cti/connection_adapters/schema_statements.rb', line 11

def cti_drop_view(class_name, options = {})
  generator = DBViewCTI::SQLGeneration::Migration::Factory.generator(class_name)
  cti_execute_sql(generator.drop_trigger_sql)
  cti_execute_sql(generator.drop_view_sql)
end

#cti_execute_sql(sql) ⇒ Object

Needed since sqlite only executes the first statement in a string containing multiple statements



43
44
45
46
47
48
# File 'lib/db_view_cti/connection_adapters/schema_statements.rb', line 43

def cti_execute_sql(sql)
  return execute(sql) if sql.is_a?(String)
  sql.map do |query|
    execute(query)
  end
end

#cti_recreate_views_after_change_to(class_name, options = {}) ⇒ Object

use with block in up/down methods



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/db_view_cti/connection_adapters/schema_statements.rb', line 23

def cti_recreate_views_after_change_to(class_name, options = {})
  klass = class_name.constantize
  classes = klass.cti_all_descendants
  # only add class_name if it is not the base class
  classes = classes.unshift( class_name ) unless klass.cti_base_class?
  # drop all views in reverse order
  classes.reverse.each do |kklass|
    cti_drop_view(kklass, options)
  end
  yield # perform table changes in block (e.g. add column)
  # recreate views in forward order
  cti_reset_column_information(class_name) if klass.cti_base_class?
  classes.each do |kklass|
    cti_reset_column_information(kklass)
    cti_create_view(kklass, options)
  end
end

#cti_view_exists?(class_name) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
20
# File 'lib/db_view_cti/connection_adapters/schema_statements.rb', line 17

def cti_view_exists?(class_name)
  generator = DBViewCTI::SQLGeneration::Migration::Factory.generator(class_name)
  cti_execute_sql(generator.view_exists_sql)[0]['count'].to_i > 0
end