class Purview::Loaders::Base
Attributes
opts[R]
Public Class Methods
new(opts={})
click to toggle source
# File lib/purview/loaders/base.rb, line 4 def initialize(opts={}) @opts = opts end
Public Instance Methods
load(connection, rows, window)
click to toggle source
# File lib/purview/loaders/base.rb, line 8 def load(connection, rows, window) with_context_logging("`load` for: #{table.name}") do with_temporary_table(connection, rows, window) do |temporary_table_name| update_result = \ connection.execute(table_update_sql(window, temporary_table_name)) delete_result = \ connection.execute(table_delete_sql(window, temporary_table_name)) insert_result = \ connection.execute(table_insert_sql(window, temporary_table_name)) logger.debug( '%d row(s) inserted, %d row(s) updated and %d row(s) deleted in: %s' % [ insert_result.rows_affected, update_result.rows_affected, delete_result.rows_affected, table.name, ] ) end end end
Private Instance Methods
count_column_name()
click to toggle source
# File lib/purview/loaders/base.rb, line 37 def count_column_name 'count' end
create_temporary_table(connection)
click to toggle source
# File lib/purview/loaders/base.rb, line 41 def create_temporary_table(connection) database.create_table( table, :connection => connection, :table => temporary_table_opts, ) end
database()
click to toggle source
# File lib/purview/loaders/base.rb, line 49 def database table.database end
dialect_type()
click to toggle source
# File lib/purview/loaders/base.rb, line 53 def dialect_type raise %{All "#{Base}(s)" must override the "dialect_type" method} end
id_in_sql(temporary_table_name)
click to toggle source
# File lib/purview/loaders/base.rb, line 57 def id_in_sql(temporary_table_name) raise %{All "#{Base}(s)" must override the "id_in_sql" method} end
in_window_sql(window)
click to toggle source
# File lib/purview/loaders/base.rb, line 61 def in_window_sql(window) raise %{All "#{Base}(s)" must override the "in_window_sql" method} end
load_temporary_table(connection, temporary_table_name, rows, window)
click to toggle source
# File lib/purview/loaders/base.rb, line 65 def load_temporary_table(connection, temporary_table_name, rows, window) with_context_logging("`load_temporary_table` for: #{temporary_table_name}") do rows.each_slice(rows_per_slice) do |rows_slice| connection.execute( temporary_table_insert_sql( temporary_table_name, rows_slice ) ) end end end
not_in_window_sql(window)
click to toggle source
# File lib/purview/loaders/base.rb, line 78 def not_in_window_sql(window) raise %{All "#{Base}(s)" must override the "not_in_window_sql" method} end
row_values(row)
click to toggle source
# File lib/purview/loaders/base.rb, line 82 def row_values(row) table.column_names.map { |column_name| quoted(sanitized(row[column_name])) }.join(', ') end
rows_per_slice()
click to toggle source
# File lib/purview/loaders/base.rb, line 86 def rows_per_slice opts[:rows_per_slice] || 1000 end
table()
click to toggle source
# File lib/purview/loaders/base.rb, line 90 def table opts[:table] end
table_delete_sql(window, temporary_table_name)
click to toggle source
# File lib/purview/loaders/base.rb, line 94 def table_delete_sql(window, temporary_table_name) raise %{All "#{Base}(s)" must override the "table_delete_sql" method} end
table_insert_sql(window, temporary_table_name)
click to toggle source
# File lib/purview/loaders/base.rb, line 98 def table_insert_sql(window, temporary_table_name) raise %{All "#{Base}(s)" must override the "table_insert_sql" method} end
table_update_sql(window, temporary_table_name)
click to toggle source
# File lib/purview/loaders/base.rb, line 102 def table_update_sql(window, temporary_table_name) raise %{All "#{Base}(s)" must override the "table_update_sql" method} end
temporary_table_insert_sql(temporary_table_name, rows)
click to toggle source
# File lib/purview/loaders/base.rb, line 106 def temporary_table_insert_sql(temporary_table_name, rows) raise %{All "#{Base}(s)" must override the "temporary_table_insert_sql" method} end
temporary_table_opts()
click to toggle source
# File lib/purview/loaders/base.rb, line 110 def temporary_table_opts { :create_indices => true, :name => table.temporary_name, :temporary => true, } end
temporary_table_verify_sql(temporary_table_name, rows, window)
click to toggle source
# File lib/purview/loaders/base.rb, line 118 def temporary_table_verify_sql(temporary_table_name, rows, window) raise %{All "#{Base}(s)" must override the "temporary_table_verify_sql" method} end
verify_temporary_table(connection, temporary_table_name, rows, window)
click to toggle source
# File lib/purview/loaders/base.rb, line 122 def verify_temporary_table(connection, temporary_table_name, rows, window) with_context_logging("`verify_temporary_table` for: #{temporary_table_name}") do rows_outside_window = connection.execute( temporary_table_verify_sql( temporary_table_name, rows, window ) ).rows[0][count_column_name] raise Purview::Exceptions::RowsOutsideWindowForTable.new(table, rows_outside_window) \ unless zero?(rows_outside_window) end end
with_temporary_table(connection, rows, window) { |create_temporary_table(connection).tap do |temporary_table_name| load_temporary_table( connection, temporary_table_name, rows, window ) verify_temporary_table( connection, temporary_table_name, rows, window ) end| ... }
click to toggle source
# File lib/purview/loaders/base.rb, line 136 def with_temporary_table(connection, rows, window) yield( create_temporary_table(connection).tap do |temporary_table_name| load_temporary_table( connection, temporary_table_name, rows, window ) verify_temporary_table( connection, temporary_table_name, rows, window ) end ) end