diff --git a/.gitignore b/.gitignore index 83e58975..1c6a7b44 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.log +log/* doc cov pkg diff --git a/environment.rb b/environment.rb index 61116af4..4f176de2 100644 --- a/environment.rb +++ b/environment.rb @@ -16,7 +16,12 @@ # Determine log path. ENV['_'] =~ /(\w+)/ - DataMapper::Logger.new(__DIR__ + "log/#{$1}.log", 0) + log_path = __DIR__ + "log/#{$1 == 'opt' ? 'spec' : $1}.log" + + FileUtils::mkdir_p(File.dirname(log_path)) + FileUtils::rm(log_path) if File.exists?(log_path) + + DataMapper::Logger.new(log_path, 0) at_exit { DataMapper.logger.close } Pathname.glob(__DIR__ + 'spec/models/*.rb').sort.each { |path| load path } diff --git a/lib/data_mapper/adapters/data_objects_adapter.rb b/lib/data_mapper/adapters/data_objects_adapter.rb index a47e7db7..cf9380b4 100644 --- a/lib/data_mapper/adapters/data_objects_adapter.rb +++ b/lib/data_mapper/adapters/data_objects_adapter.rb @@ -165,13 +165,14 @@ def read_set(repository, query) set = LoadedSet.new(repository, query.resource, properties_with_indexes) sql = query_read_statement(query) - DataMapper.logger.debug { sql } + parameters = query.parameters + DataMapper.logger.debug { "QUERY: '#{sql}' PARAMETERS: #{parameters.inspect}" } begin connection = create_connection command = connection.create_command(sql) command.set_types(properties.map { |property| property.type }) - reader = command.execute_reader(*query.parameters) + reader = command.execute_reader(*parameters) while(reader.next!) set.materialize!(reader.values, query.reload?) diff --git a/log/spec.log b/log/spec.log deleted file mode 100644 index c2e86772..00000000 --- a/log/spec.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun, 02 Mar 2008 05:08:42 GMT ~ info ~ Logfile created -Sun, 02 Mar 2008 05:08:42 GMT ~ ~ uninitialized constant DataMapper::Adapters::Sqlite3Adapter::DataObject diff --git a/spec/integration/sqlite3_adapter_spec.rb b/spec/integration/sqlite3_adapter_spec.rb index 404e8148..0a552d6a 100644 --- a/spec/integration/sqlite3_adapter_spec.rb +++ b/spec/integration/sqlite3_adapter_spec.rb @@ -213,8 +213,6 @@ class BankCustomer describe "query" do - - before do @adapter = repository(:sqlite3).adapter @@ -222,7 +220,8 @@ class BankCustomer CREATE TABLE "sail_boats" ( "id" INTEGER PRIMARY KEY, "name" VARCHAR(50), - "port" VARCHAR(50) + "port" VARCHAR(50), + "notes" VARCHAR(50) ) EOS @@ -231,13 +230,15 @@ class SailBoat property :id, Fixnum, :serial => true property :name, String property :port, String + property :notes, String, :lazy => true + class << self def property_by_name(name) properties(repository.name).detect do |property| property.name == name end end - end + end end repository(:sqlite3).save(SailBoat.new(:id => 1, :name => "A", :port => "C")) @@ -266,17 +267,20 @@ def property_by_name(name) result = repository(:sqlite3).all(SailBoat,{:order => [ SailBoat.property_by_name(:name), DataMapper::Query::Direction.new(SailBoat.property_by_name(:port), :asc) - ]}) + ]}) result[0].id.should == 1 - end - + end + + it "should lazy load" do + result = repository(:sqlite3).all(SailBoat,{}) + result[0].id.should == 1 + puts result[0].id + puts result[0].notes + end after do @adapter.execute('DROP TABLE "sail_boats"') end - - - end @@ -328,7 +332,15 @@ class SerialFinderSpec sfs.instance_variables.should_not include('@sample') sfs.sample.should_not be_nil end - + + it "should translate an Array to an IN clause" do + ids = repository(:sqlite3).all(SerialFinderSpec, { :limit => 100 }).map(&:id) + results = repository(:sqlite3).all(SerialFinderSpec, { :id => ids }) + + results.size.should == 100 + results.map(&:ids).should == ids + end + after do @adapter.execute('DROP TABLE "serial_finder_specs"') end