Module: Spectacles::SchemaStatements::AbstractAdapter

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

Instance Method Summary collapse

Instance Method Details

#create_materialized_view(view_name, *args) ⇒ Object

Raises:

  • (NotImplementedError)


66
67
68
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 66

def create_materialized_view(view_name, *args)
  raise NotImplementedError, "Override create_materialized_view for your db adapter in #{self.class}"
end

#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_materialized_view(view_name) ⇒ Object

Raises:

  • (NotImplementedError)


70
71
72
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 70

def drop_materialized_view(view_name)
  raise NotImplementedError, "Override drop_materialized_view for your db adapter in #{self.class}"
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

#materialized_view_build_query(view_name) ⇒ Object

Raises:

  • (NotImplementedError)


62
63
64
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 62

def materialized_view_build_query(view_name)
  raise NotImplementedError, "Override materialized_view_build_query for your db adapter in #{self.class}"
end

#materialized_view_exists?(name) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 54

def materialized_view_exists?(name)
  return materialized_views.include?(name.to_s)
end

#materialized_viewsObject

Raises:

  • (NotImplementedError)


58
59
60
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 58

def materialized_views
  raise NotImplementedError, "Override materialized_views for your db adapter in #{self.class}"
end

#refresh_materialized_view(view_name) ⇒ Object

Raises:

  • (NotImplementedError)


74
75
76
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 74

def refresh_materialized_view(view_name)
  raise NotImplementedError, "Override refresh_materialized_view for your db adapter in #{self.class}"
end

#supports_materialized_views?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/spectacles/schema_statements/abstract_adapter.rb', line 50

def supports_materialized_views?
  false
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