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