class Scenic::Adapters::Oracle::RefreshDependencies

Attributes

adapter[R]
connection[R]
name[R]

Public Class Methods

call(name, adapter, connection) click to toggle source
# File lib/scenic/adapters/oracle/refresh_dependencies.rb, line 9
def self.call(name, adapter, connection)
  new(name, adapter, connection).call
end
new(name, adapter, connection) click to toggle source
# File lib/scenic/adapters/oracle/refresh_dependencies.rb, line 13
def initialize(name, adapter, connection)
  @name = name
  @adapter = adapter
  @connection = connection
end

Public Instance Methods

call() click to toggle source
# File lib/scenic/adapters/oracle/refresh_dependencies.rb, line 19
def call
  dependencies.each do |dependency|
    adapter.refresh_materialized_view(dependency)
  end
end

Private Instance Methods

dependencies() click to toggle source
# File lib/scenic/adapters/oracle/refresh_dependencies.rb, line 29
def dependencies
  d = dependency_tree_for(@name)
  each_node = ->(&b) { d.each_key(&b) }
  each_child = ->(n, &b) { d[n].each(&b) }
  TSort.tsort(each_node, each_child) - [@name]
end
dependency_tree_for(name, tree = {}) click to toggle source
# File lib/scenic/adapters/oracle/refresh_dependencies.rb, line 36
        def dependency_tree_for(name, tree = {})
          ds = connection.select_values(<<~EOSQL)
            select referenced_name
            from user_dependencies
            where name = '#{name.upcase}'
              and referenced_type = 'MATERIALIZED VIEW'
          EOSQL

          tree[name.downcase.to_sym] = Array(ds).map { |x| x.downcase.to_sym }
          ds.each { |d| dependency_tree_for(d, tree) }
          tree
        end