Class: Scenic::Adapters::Oracle

Inherits:
Object
  • Object
show all
Defined in:
lib/scenic/adapters/oracle.rb,
lib/scenic/adapters/oracle/index.rb,
lib/scenic/adapters/oracle/indexes.rb,
lib/scenic/adapters/oracle/railtie.rb,
lib/scenic/adapters/oracle/index_reapplication.rb,
lib/scenic/adapters/oracle/refresh_dependencies.rb

Defined Under Namespace

Classes: Index, IndexReapplication, Indexes, Railtie, RefreshDependencies

Instance Method Summary collapse

Constructor Details

#initialize(connectable = ActiveRecord::Base) ⇒ Oracle

Returns a new instance of Oracle.



11
12
13
# File 'lib/scenic/adapters/oracle.rb', line 11

def initialize(connectable = ActiveRecord::Base)
  @connectable = connectable
end

Instance Method Details

#create_materialized_view(name, definition, no_data: false) ⇒ Object



36
37
38
# File 'lib/scenic/adapters/oracle.rb', line 36

def create_materialized_view(name, definition, no_data: false)
  execute("create materialized view #{quote_table_name(name)} #{'build deferred' if no_data} as #{trimmed_definition(definition)}")
end

#create_view(name, definition) ⇒ Object



19
20
21
# File 'lib/scenic/adapters/oracle.rb', line 19

def create_view(name, definition)
  execute("create view #{quote_table_name(name)} as #{trimmed_definition(definition)}")
end

#drop_materialized_view(name) ⇒ Object



47
48
49
# File 'lib/scenic/adapters/oracle.rb', line 47

def drop_materialized_view(name)
  execute("drop materialized view #{quote_table_name(name)}")
end

#drop_view(name) ⇒ Object



23
24
25
# File 'lib/scenic/adapters/oracle.rb', line 23

def drop_view(name)
  execute("drop view #{quote_table_name(name)}")
end

#populated?(name) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/scenic/adapters/oracle.rb', line 62

def populated?(name)
  !select_value("select last_refresh_date from user_mviews where mview_name = '#{name.upcase}'").nil?
end

#refresh_materialized_view(name, concurrently: false, cascade: false) ⇒ Object



51
52
53
54
55
56
57
58
59
60
# File 'lib/scenic/adapters/oracle.rb', line 51

def refresh_materialized_view(name, concurrently: false, cascade: false)
  refresh_dependencies_for(name) if cascade

  atomic_refresh = concurrently.to_s.upcase
  execute("    begin\n      dbms_mview.refresh('\#{name}', method => '?', atomic_refresh => \#{atomic_refresh});\n    end;\n  EOSQL\nend\n")

#replace_view(name, definition) ⇒ Object



27
28
29
# File 'lib/scenic/adapters/oracle.rb', line 27

def replace_view(name, definition)
  execute("create or replace view #{quote_table_name(name)} as #{trimmed_definition(definition)}")
end

#update_materialized_view(name, definition, no_data: false) ⇒ Object



40
41
42
43
44
45
# File 'lib/scenic/adapters/oracle.rb', line 40

def update_materialized_view(name, definition, no_data: false)
  IndexReapplication.new(connection: connection).on(name) do
    drop_materialized_view(name)
    create_materialized_view(name, definition, no_data: no_data)
  end
end

#update_view(name, definition) ⇒ Object



31
32
33
34
# File 'lib/scenic/adapters/oracle.rb', line 31

def update_view(name, definition)
  drop_view(name)
  create_view(name, definition)
end

#viewsObject



15
16
17
# File 'lib/scenic/adapters/oracle.rb', line 15

def views
  sorted_dependency_views + sorted_missing_dependency_views
end