Describes a (record specific) difference between both databases as identifed via change log.
Constants
| OTHER_SIDE | = | { :left => :right, :right => :left } | Shortcut to calculate the “other” database. | |
| DIFF_TYPES | = | { :insert => {:insert => :conflict, :update => :conflict, :delete => :conflict, :no_change => :left}, :update => {:insert => :conflict, :update => :conflict, :delete => :conflict, :no_change => :left}, :delete => {:insert => :conflict, :update => :conflict, :delete => :no_change, :no_change => :left}, :no_change => {:insert => :right, :update => :right, :delete => :right, :no_change => :no_change} } | Resulting diff type based on types of left changes (outer hash) and right changes (inner hash) |
Attributes
| loaded | [W] | Should be set to true if this ReplicationDifference instance was successfully loaded. |
| loaders | [RW] | The current LoggedChangeLoaders instance |
| type | [RW] |
The type of the difference. Either
|
Public class methods
Creates a new ReplicationDifference instance. loaders is teh current LoggedChangeLoaders instance
# File lib/rubyrep/replication_difference.rb, line 30 def initialize(loaders) self.loaders = loaders end
Public instance methods
Amends a difference according to new entries in the change log table
# File lib/rubyrep/replication_difference.rb, line 59 def amend loaders.update changes[:left].load changes[:right].load self.type = DIFF_TYPES[changes[:left].type][changes[:right].type] end
A hash with keys :left and / or :right. Hash values are LoggedChange instances.
# File lib/rubyrep/replication_difference.rb, line 24 def changes @changes ||= {} end
Loads a difference
# File lib/rubyrep/replication_difference.rb, line 67 def load change_times = {} [:left, :right].each do |database| changes[database] = LoggedChange.new loaders[database] change_times[database] = loaders[database].oldest_change_time end return if change_times[:left] == nil and change_times[:right] == nil oldest = nil [:left, :right].each do |database| oldest = OTHER_SIDE[database] if change_times[database] == nil end oldest ||= change_times[:left] <= change_times[:right] ? :left : :right changes[oldest].load_oldest changes[OTHER_SIDE[oldest]].load_specified( session.corresponding_table(oldest, changes[oldest].table), changes[oldest].key) self.type = DIFF_TYPES[changes[:left].type][changes[:right].type] self.loaded = true end
Returns true if a replication difference was loaded
# File lib/rubyrep/replication_difference.rb, line 39 def loaded? @loaded end
The current Session.
# File lib/rubyrep/replication_difference.rb, line 8 def session @session ||= loaders.session end
Prevents session and change loaders from going into YAML output
# File lib/rubyrep/replication_difference.rb, line 91 def to_yaml_properties instance_variables.sort.reject {|var_name| ['@session', '@loaders'].include? var_name} end