def update(options = {:forced => false, :expire_time => 1})
return unless options[:forced] or Time.now - self.last_updated >= options[:expire_time]
self.last_updated = Time.now
cursor = connection.select_cursor(
:table => change_log_table,
:from => {'id' => current_id},
:exclude_starting_row => true,
:row_buffer_size => 1
)
return unless cursor.next?
cursor = connection.select_cursor(
:table => change_log_table,
:from => {'id' => current_id},
:exclude_starting_row => true,
:type_cast => true,
:row_buffer_size => session.configuration.options[:row_buffer_size]
)
while cursor.next?
change = cursor.next_row
self.current_id = change['id']
self.change_array << change
change['array_index'] = self.change_array.size - 1
table_change_tree = change_tree[change['change_table']] ||= {}
key_changes = table_change_tree[change['change_key']] ||= []
key_changes << change
end
cursor.clear
end