From 52ad6b0b7b325a031238f9f2f6193163f3563349 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Mon, 7 Jan 2013 12:12:30 -0800 Subject: [PATCH] Support default_schema when reseting primary key sequences on PostgreSQL (Fixes #596) --- CHANGELOG | 2 ++ lib/sequel/adapters/shared/postgres.rb | 2 ++ spec/adapters/postgres_spec.rb | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index beebc824e8..770244db49 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,7 @@ === HEAD +* Support default_schema when reseting primary key sequences on PostgreSQL (jeremyevans) (#596) + * Allow treating tinyint(1) unsigned columns as booleans in the mysql adapters (jeremyevans) * Support the jdbc-hsqldb gem in the jdbc adapter, since it has been updated to 2.2.9 (jeremyevans) diff --git a/lib/sequel/adapters/shared/postgres.rb b/lib/sequel/adapters/shared/postgres.rb index f71996deaf..9176aa5944 100644 --- a/lib/sequel/adapters/shared/postgres.rb +++ b/lib/sequel/adapters/shared/postgres.rb @@ -429,6 +429,8 @@ def reset_primary_key_sequence(table) pk = SQL::Identifier.new(primary_key(table)) db = self seq_ds = db.from(LiteralString.new(seq)) + s, t = schema_and_table(table) + table = Sequel.qualify(s, t) if s get{setval(seq, db[table].select{coalesce(max(pk)+seq_ds.select{:increment_by}, seq_ds.select(:min_value))}, false)} end diff --git a/spec/adapters/postgres_spec.rb b/spec/adapters/postgres_spec.rb index 65891433fa..546d40cc7d 100644 --- a/spec/adapters/postgres_spec.rb +++ b/spec/adapters/postgres_spec.rb @@ -539,6 +539,25 @@ def logger.method_missing(m, msg) @db[:posts].insert.should == 21 @db[:posts].order(:a).map(:a).should == [1, 2, 10, 20, 21] end + + specify "should support resetting the primary key sequence with default_schema" do + begin + @db.run("DROP SCHEMA p") rescue nil + @db.run("CREATE SCHEMA p") + @db.default_schema = :p + @db.create_table(:posts){primary_key :a} + @db[:p__posts].insert(:a=>20).should == 20 + @db[:p__posts].insert.should == 1 + @db[:p__posts].insert.should == 2 + @db[:p__posts].insert(:a=>10).should == 10 + @db.reset_primary_key_sequence(:posts).should == 21 + @db[:p__posts].insert.should == 21 + @db[:p__posts].order(:a).map(:a).should == [1, 2, 10, 20, 21] + ensure + @db.default_schema = nil + @db.run("DROP SCHEMA p CASCADE") + end + end specify "should support specifying Integer/Bignum/Fixnum types in primary keys and have them be auto incrementing" do @db.create_table(:posts){primary_key :a, :type=>Integer}