Created
October 3, 2011 22:56
-
-
Save royw/1260479 to your computer and use it in GitHub Desktop.
DataMapper query returning duplicates
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'rubygems' | |
require 'data_mapper' | |
require 'extlib' | |
require 'pp' | |
require 'rspec' | |
# If you want the logs displayed you have to do this before the call to setup | |
DataMapper::Logger.new($stdout, :debug) | |
# An in-memory Sqlite3 connection: | |
DataMapper.setup(:default, 'sqlite::memory:') | |
class Project | |
include DataMapper::Resource | |
property :id, Serial | |
property :name, String | |
property :description, Text | |
has n, :requirements, :through => DataMapper::Resource | |
end | |
class Requirement | |
include DataMapper::Resource | |
property :id, Serial | |
property :name, String | |
property :description, Text | |
has n, :projects, :through => DataMapper::Resource | |
end | |
DataMapper.auto_migrate! | |
describe 'associations' do | |
before :all do | |
@p1 = Project.create(:name => 'Minion') | |
@p1.description = 'a fantastic widget' | |
@r1 = Requirement.create(:name => 'Quality') | |
@r1.description = 'be the best' | |
@r1.save | |
@p1.requirements << @r1 | |
@p1.save | |
end | |
it 'should have one requirement for the project' do | |
@p1.requirements.all.should_not be_empty | |
@p1.requirements.all.size.should == 1 | |
end | |
it 'should have one requirement when accessed via all' do | |
@p1.requirements.all(:description => 'be the best').size.should == 1 | |
@p1.requirements.all.size.should == 1 | |
end | |
# this one fails | |
it 'should have one requirement when accessed via first' do | |
puts "\n\n" + @p1.requirements.all.pretty_inspect + "\n" | |
@p1.requirements.first.description.should == 'be the best' | |
puts "\n\n" + @p1.requirements.all.pretty_inspect + "\n" | |
@p1.requirements.all.size.should == 1 | |
end | |
end | |
17:52:10 royw@royw-mbp:~/projects ruby-1.9.2-p180 | |
∴ rspec bug1.rb | |
DataObjects::URI.new with arguments is deprecated, use a Hash of URI components (/Users/royw/.rvm/gems/ruby-1.9.2-p180/gems/dm-do-adapter-1.1.0/lib/dm-do-adapter/adapter.rb:231:in `new') | |
~ (0.000224) PRAGMA table_info("projects") | |
~ (0.000007) PRAGMA table_info("requirements") | |
~ (0.000047) SELECT sqlite_version(*) | |
~ (0.000041) DROP TABLE IF EXISTS "projects" | |
~ (0.000010) PRAGMA table_info("projects") | |
~ (0.000321) CREATE TABLE "projects" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" VARCHAR(50), "description" TEXT) | |
~ (0.000013) DROP TABLE IF EXISTS "requirements" | |
~ (0.000009) PRAGMA table_info("requirements") | |
~ (0.000084) CREATE TABLE "requirements" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "name" VARCHAR(50), "description" TEXT) | |
~ (0.000012) DROP TABLE IF EXISTS "project_requirements" | |
~ (0.000009) PRAGMA table_info("project_requirements") | |
~ (0.000124) CREATE TABLE "project_requirements" ("project_id" INTEGER NOT NULL, "requirement_id" INTEGER NOT NULL, PRIMARY KEY("project_id", "requirement_id")) | |
~ (0.000073) INSERT INTO "projects" ("name") VALUES ('Minion') | |
~ (0.000032) INSERT INTO "requirements" ("name") VALUES ('Quality') | |
~ (0.000038) UPDATE "requirements" SET "description" = 'be the best' WHERE "id" = 1 | |
~ (0.000028) UPDATE "projects" SET "description" = 'a fantastic widget' WHERE "id" = 1 | |
~ (0.000039) SELECT "project_id", "requirement_id" FROM "project_requirements" WHERE ("project_id" = 1 AND "requirement_id" = 1) ORDER BY "project_id", "requirement_id" LIMIT 1 | |
~ (0.000031) INSERT INTO "project_requirements" ("project_id", "requirement_id") VALUES (1, 1) | |
~ (0.000059) SELECT "requirements"."id", "requirements"."name" FROM "requirements" INNER JOIN "project_requirements" ON "requirements"."id" = "project_requirements"."requirement_id" INNER JOIN "projects" ON "project_requirements"."project_id" = "projects"."id" WHERE "project_requirements"."project_id" = 1 GROUP BY "requirements"."id", "requirements"."name" ORDER BY "requirements"."id" | |
. ~ (0.000065) SELECT "requirements"."id", "requirements"."name" FROM "requirements" INNER JOIN "project_requirements" ON "requirements"."id" = "project_requirements"."requirement_id" INNER JOIN "projects" ON "project_requirements"."project_id" = "projects"."id" WHERE ("project_requirements"."project_id" = 1 AND "requirements"."description" = 'be the best') GROUP BY "requirements"."id", "requirements"."name" ORDER BY "requirements"."id" | |
~ (0.000055) SELECT "requirements"."id", "requirements"."name" FROM "requirements" INNER JOIN "project_requirements" ON "requirements"."id" = "project_requirements"."requirement_id" INNER JOIN "projects" ON "project_requirements"."project_id" = "projects"."id" WHERE "project_requirements"."project_id" = 1 GROUP BY "requirements"."id", "requirements"."name" ORDER BY "requirements"."id" | |
. ~ (0.000113) SELECT "requirements"."id", "requirements"."name" FROM "requirements" INNER JOIN "project_requirements" ON "requirements"."id" = "project_requirements"."requirement_id" INNER JOIN "projects" ON "project_requirements"."project_id" = "projects"."id" WHERE "project_requirements"."project_id" = 1 GROUP BY "requirements"."id", "requirements"."name" ORDER BY "requirements"."id" | |
[#<Requirement @id=1 @name="Quality" @description="be the best">] | |
~ (0.000054) SELECT "requirements"."id", "requirements"."name" FROM "requirements" INNER JOIN "project_requirements" ON "requirements"."id" = "project_requirements"."requirement_id" INNER JOIN "projects" ON "project_requirements"."project_id" = "projects"."id" WHERE "project_requirements"."project_id" = 1 GROUP BY "requirements"."id", "requirements"."name" ORDER BY "requirements"."id" LIMIT 1 | |
~ (0.000022) SELECT "id", "description" FROM "requirements" WHERE "id" = 1 ORDER BY "id" | |
~ (0.000050) SELECT "requirements"."id", "requirements"."name" FROM "requirements" INNER JOIN "project_requirements" ON "requirements"."id" = "project_requirements"."requirement_id" INNER JOIN "projects" ON "project_requirements"."project_id" = "projects"."id" WHERE "project_requirements"."project_id" = 1 GROUP BY "requirements"."id", "requirements"."name" ORDER BY "requirements"."id" | |
[#<Requirement @id=1 @name="Quality" @description="be the best">, #<Requirement @id=1 @name="Quality" @description="be the best">] | |
~ (0.000053) SELECT "requirements"."id", "requirements"."name" FROM "requirements" INNER JOIN "project_requirements" ON "requirements"."id" = "project_requirements"."requirement_id" INNER JOIN "projects" ON "project_requirements"."project_id" = "projects"."id" WHERE "project_requirements"."project_id" = 1 GROUP BY "requirements"."id", "requirements"."name" ORDER BY "requirements"."id" | |
F | |
Failures: | |
1) associations should have one requirement when accessed via first | |
Failure/Error: @p1.requirements.all.size.should == 1 | |
expected: 1 | |
got: 2 (using ==) | |
# ./bug1.rb:62:in `block (2 levels) in <top (required)>' | |
Finished in 0.02302 seconds | |
3 examples, 1 failure | |
Failed examples: | |
rspec ./bug1.rb:58 # associations should have one requirement when accessed via first |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment