Module: Spectacles::SchemaStatements::AbstractAdapter

Included in:
MysqlAdapter, PostgreSQLAdapter, SQLServerAdapter, SQLite3Adapter, SQLiteAdapter
Defined in:
lib/spectacles/schema_statements/abstract_adapter.rb

Instance Method Summary collapse

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)
  options = args.extract_options!
  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 options[: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

Returns:

  • (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

#viewsObject



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