Class | DataMapper::Adapters::Sql::Commands::LoadCommand::Loader |
In: |
lib/data_mapper/adapters/sql/commands/load_command.rb
lib/data_mapper/adapters/sql/commands/load_command.rb |
Parent: | Object |
# File lib/data_mapper/adapters/sql/commands/load_command.rb, line 10 10: def initialize(load_command, klass) 11: @load_command, @klass = load_command, klass 12: @columns = {} 13: @key = nil 14: @key_index = nil 15: @type_override_present = false 16: @type_override_index = nil 17: @type_override = nil 18: @database_context = load_command.database_context 19: @reload = load_command.reload? 20: @set = [] 21: end
# File lib/data_mapper/adapters/sql/commands/load_command.rb, line 10 10: def initialize(load_command, klass) 11: @load_command, @klass = load_command, klass 12: @columns = {} 13: @key = nil 14: @key_index = nil 15: @type_override_present = false 16: @type_override_index = nil 17: @type_override = nil 18: @database_context = load_command.database_context 19: @reload = load_command.reload? 20: @set = [] 21: end
# File lib/data_mapper/adapters/sql/commands/load_command.rb, line 23 23: def add_column(column, index) 24: if column.key? 25: @key = column 26: @key_index = index 27: end 28: 29: if column.type == :class 30: @type_override_present = true 31: @type_override_index = index 32: @type_override = column 33: end 34: 35: @columns[index] = column 36: 37: self 38: end
# File lib/data_mapper/adapters/sql/commands/load_command.rb, line 23 23: def add_column(column, index) 24: if column.key? 25: @key = column 26: @key_index = index 27: end 28: 29: if column.type == :class 30: @type_override_present = true 31: @type_override_index = index 32: @type_override = column 33: end 34: 35: @columns[index] = column 36: 37: self 38: end
# File lib/data_mapper/adapters/sql/commands/load_command.rb, line 85 85: def loaded_set 86: @set 87: end
# File lib/data_mapper/adapters/sql/commands/load_command.rb, line 85 85: def loaded_set 86: @set 87: end
# File lib/data_mapper/adapters/sql/commands/load_command.rb, line 40 40: def materialize(values) 41: instance_id = @key.type_cast_value(values[@key_index]) 42: instance = create_instance(instance_id, 43: if @type_override_present 44: @type_override.type_cast_value(values[@type_override_index]) || @klass 45: else 46: @klass 47: end 48: ) 49: 50: @klass.callbacks.execute(:before_materialize, instance) 51: 52: type_casted_values = {} 53: 54: @columns.each_pair do |index, column| 55: # This may be a little confusing, but we're 56: # setting both the original_value, and the 57: # instance-variable through method chaining to avoid 58: # lots of extra short-lived local variables. 59: begin 60: type_casted_values[column.name] = instance.instance_variable_set( 61: column.instance_variable_name, 62: column.type_cast_value(values[index]) 63: ) 64: rescue => e 65: raise MaterializationError.new("Failed to materialize column #{column.name.inspect} with value #{values[index].inspect}\n#{e.display}") 66: end 67: end 68: 69: instance.original_values = type_casted_values 70: instance.instance_variable_set(:@loaded_set, @set) 71: @set << instance 72: 73: @klass.callbacks.execute(:after_materialize, instance) 74: 75: return instance 76: 77: rescue => e 78: if e.is_a?(MaterializationError) 79: raise e 80: else 81: raise MaterializationError.new("Failed to materialize row: #{values.inspect}\n#{e.display}") 82: end 83: end
# File lib/data_mapper/adapters/sql/commands/load_command.rb, line 40 40: def materialize(values) 41: instance_id = @key.type_cast_value(values[@key_index]) 42: instance = create_instance(instance_id, 43: if @type_override_present 44: @type_override.type_cast_value(values[@type_override_index]) || @klass 45: else 46: @klass 47: end 48: ) 49: 50: @klass.callbacks.execute(:before_materialize, instance) 51: 52: type_casted_values = {} 53: 54: @columns.each_pair do |index, column| 55: # This may be a little confusing, but we're 56: # setting both the original_value, and the 57: # instance-variable through method chaining to avoid 58: # lots of extra short-lived local variables. 59: begin 60: type_casted_values[column.name] = instance.instance_variable_set( 61: column.instance_variable_name, 62: column.type_cast_value(values[index]) 63: ) 64: rescue => e 65: raise MaterializationError.new("Failed to materialize column #{column.name.inspect} with value #{values[index].inspect}\n#{e.display}") 66: end 67: end 68: 69: instance.original_values = type_casted_values 70: instance.instance_variable_set(:@loaded_set, @set) 71: @set << instance 72: 73: @klass.callbacks.execute(:after_materialize, instance) 74: 75: return instance 76: 77: rescue => e 78: if e.is_a?(MaterializationError) 79: raise e 80: else 81: raise MaterializationError.new("Failed to materialize row: #{values.inspect}\n#{e.display}") 82: end 83: end