sequel 3.32.0 → 3.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +42 -0
- data/Rakefile +3 -2
- data/doc/migration.rdoc +41 -14
- data/doc/opening_databases.rdoc +2 -0
- data/doc/release_notes/3.29.0.txt +1 -1
- data/doc/release_notes/3.33.0.txt +157 -0
- data/doc/sharding.rdoc +93 -7
- data/doc/testing.rdoc +1 -1
- data/lib/sequel/adapters/do.rb +1 -0
- data/lib/sequel/adapters/do/mysql.rb +6 -0
- data/lib/sequel/adapters/jdbc.rb +1 -0
- data/lib/sequel/adapters/jdbc/mysql.rb +0 -5
- data/lib/sequel/adapters/mock.rb +10 -5
- data/lib/sequel/adapters/mysql.rb +23 -1
- data/lib/sequel/adapters/mysql2.rb +16 -2
- data/lib/sequel/adapters/postgres.rb +22 -4
- data/lib/sequel/adapters/shared/mysql.rb +51 -10
- data/lib/sequel/adapters/shared/postgres.rb +101 -63
- data/lib/sequel/adapters/shared/sqlite.rb +19 -0
- data/lib/sequel/adapters/sqlite.rb +71 -16
- data/lib/sequel/adapters/swift.rb +1 -0
- data/lib/sequel/connection_pool.rb +1 -1
- data/lib/sequel/connection_pool/sharded_single.rb +6 -1
- data/lib/sequel/connection_pool/sharded_threaded.rb +6 -1
- data/lib/sequel/connection_pool/threaded.rb +12 -11
- data/lib/sequel/database/connecting.rb +2 -0
- data/lib/sequel/database/misc.rb +6 -0
- data/lib/sequel/database/query.rb +1 -1
- data/lib/sequel/extensions/arbitrary_servers.rb +108 -0
- data/lib/sequel/extensions/migration.rb +45 -7
- data/lib/sequel/extensions/server_block.rb +139 -0
- data/lib/sequel/model/associations.rb +9 -9
- data/lib/sequel/model/inflections.rb +1 -1
- data/lib/sequel/plugins/instance_hooks.rb +1 -1
- data/lib/sequel/plugins/json_serializer.rb +1 -1
- data/lib/sequel/plugins/list.rb +12 -2
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/mysql_spec.rb +64 -8
- data/spec/adapters/postgres_spec.rb +139 -78
- data/spec/adapters/sqlite_spec.rb +87 -0
- data/spec/core/connection_pool_spec.rb +14 -0
- data/spec/core/database_spec.rb +5 -0
- data/spec/core/mock_adapter_spec.rb +21 -9
- data/spec/extensions/arbitrary_servers_spec.rb +114 -0
- data/spec/extensions/instance_hooks_spec.rb +19 -0
- data/spec/extensions/list_spec.rb +31 -0
- data/spec/extensions/migration_spec.rb +61 -4
- data/spec/extensions/server_block_spec.rb +90 -0
- data/spec/extensions/spec_helper.rb +1 -1
- data/spec/files/transaction_migrations/001_create_alt_basic.rb +3 -0
- data/spec/files/transaction_migrations/002_create_basic.rb +3 -0
- data/spec/files/transactionless_migrations/001_create_alt_basic.rb +4 -0
- data/spec/files/transactionless_migrations/002_create_basic.rb +4 -0
- data/spec/integration/dataset_test.rb +2 -2
- data/spec/integration/plugin_test.rb +9 -9
- data/spec/integration/schema_test.rb +3 -1
- data/spec/integration/transaction_test.rb +2 -2
- metadata +12 -2
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
|
2
|
+
|
3
|
+
shared_examples_for "Database#with_server" do
|
4
|
+
specify "should set the default server to use in the block" do
|
5
|
+
@db.with_server(:a){@db[:t].all}
|
6
|
+
@db.sqls.should == ["SELECT * FROM t -- a"]
|
7
|
+
@db.with_server(:b){@db[:t].all}
|
8
|
+
@db.sqls.should == ["SELECT * FROM t -- b"]
|
9
|
+
end
|
10
|
+
|
11
|
+
specify "should have no affect after the block" do
|
12
|
+
@db.with_server(:a){@db[:t].all}
|
13
|
+
@db.sqls.should == ["SELECT * FROM t -- a"]
|
14
|
+
@db[:t].all
|
15
|
+
@db.sqls.should == ["SELECT * FROM t"]
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "should not override specific server inside the block" do
|
19
|
+
@db.with_server(:a){@db[:t].server(:b).all}
|
20
|
+
@db.sqls.should == ["SELECT * FROM t -- b"]
|
21
|
+
end
|
22
|
+
|
23
|
+
specify "should work correctly when blocks are nested" do
|
24
|
+
@db[:t].all
|
25
|
+
@db.with_server(:a) do
|
26
|
+
@db[:t].all
|
27
|
+
@db.with_server(:b){@db[:t].all}
|
28
|
+
@db[:t].all
|
29
|
+
end
|
30
|
+
@db[:t].all
|
31
|
+
@db.sqls.should == ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t"]
|
32
|
+
end
|
33
|
+
|
34
|
+
specify "should work correctly for inserts/updates/deletes" do
|
35
|
+
@db.with_server(:a) do
|
36
|
+
@db[:t].insert
|
37
|
+
@db[:t].update(:a=>1)
|
38
|
+
@db[:t].delete
|
39
|
+
end
|
40
|
+
@db.sqls.should == ["INSERT INTO t DEFAULT VALUES -- a", "UPDATE t SET a = 1 -- a", "DELETE FROM t -- a"]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "Database#with_server single threaded" do
|
45
|
+
before do
|
46
|
+
@db = Sequel.mock(:single_threaded=>true, :servers=>{:a=>{}, :b=>{}})
|
47
|
+
@db.extend Sequel::ServerBlock
|
48
|
+
end
|
49
|
+
|
50
|
+
it_should_behave_like "Database#with_server"
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "Database#with_server multi threaded" do
|
54
|
+
before do
|
55
|
+
@db = Sequel.mock(:servers=>{:a=>{}, :b=>{}, :c=>{}, :d=>{}})
|
56
|
+
@db.extend Sequel::ServerBlock
|
57
|
+
end
|
58
|
+
|
59
|
+
it_should_behave_like "Database#with_server"
|
60
|
+
|
61
|
+
specify "should respect multithreaded access" do
|
62
|
+
q, q1 = Queue.new, Queue.new
|
63
|
+
|
64
|
+
t = nil
|
65
|
+
@db[:t].all
|
66
|
+
@db.with_server(:a) do
|
67
|
+
@db[:t].all
|
68
|
+
t = Thread.new do
|
69
|
+
@db[:t].all
|
70
|
+
@db.with_server(:c) do
|
71
|
+
@db[:t].all
|
72
|
+
@db.with_server(:d){@db[:t].all}
|
73
|
+
q.push nil
|
74
|
+
q1.pop
|
75
|
+
@db[:t].all
|
76
|
+
end
|
77
|
+
@db[:t].all
|
78
|
+
end
|
79
|
+
q.pop
|
80
|
+
@db.with_server(:b){@db[:t].all}
|
81
|
+
@db[:t].all
|
82
|
+
end
|
83
|
+
@db[:t].all
|
84
|
+
q1.push nil
|
85
|
+
t.join
|
86
|
+
@db.sqls.should == ["SELECT * FROM t", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t -- d",
|
87
|
+
"SELECT * FROM t -- b", "SELECT * FROM t -- a", "SELECT * FROM t", "SELECT * FROM t -- c", "SELECT * FROM t"]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
@@ -8,7 +8,7 @@ unless Sequel.const_defined?('Model')
|
|
8
8
|
require 'sequel/model'
|
9
9
|
end
|
10
10
|
|
11
|
-
Sequel.extension(*%w'string_date_time inflector pagination query pretty_table blank migration schema_dumper looser_typecasting sql_expr thread_local_timezones to_dot columns_introspection')
|
11
|
+
Sequel.extension(*%w'string_date_time inflector pagination query pretty_table blank migration schema_dumper looser_typecasting sql_expr thread_local_timezones to_dot columns_introspection server_block arbitrary_servers')
|
12
12
|
{:hook_class_methods=>[], :schema=>[], :validation_class_methods=>[]}.each{|p, opts| Sequel::Model.plugin(p, *opts)}
|
13
13
|
|
14
14
|
Sequel::Dataset.introspect_all_columns if ENV['SEQUEL_COLUMNS_INTROSPECTION']
|
@@ -81,7 +81,7 @@ describe "Simple Dataset operations" do
|
|
81
81
|
@ds.all.should == [{:id=>1, :number=>11}]
|
82
82
|
end
|
83
83
|
|
84
|
-
cspecify "should have update return the number of matched rows", [:
|
84
|
+
cspecify "should have update return the number of matched rows", [:do, :mysql], [:ado] do
|
85
85
|
@ds.update(:number=>:number).should == 1
|
86
86
|
@ds.filter(:id=>1).update(:number=>:number).should == 1
|
87
87
|
@ds.filter(:id=>2).update(:number=>:number).should == 0
|
@@ -1357,7 +1357,7 @@ describe "Dataset identifier methods" do
|
|
1357
1357
|
@db.drop_table(:a)
|
1358
1358
|
end
|
1359
1359
|
|
1360
|
-
cspecify "#identifier_output_method should change how identifiers are output", [:
|
1360
|
+
cspecify "#identifier_output_method should change how identifiers are output", [:swift] do
|
1361
1361
|
@ds.identifier_output_method = :upcase
|
1362
1362
|
@ds.first.should == {:AB=>1}
|
1363
1363
|
@ds.identifier_output_method = :uprev
|
@@ -1179,9 +1179,9 @@ describe "List plugin without a scope" do
|
|
1179
1179
|
end
|
1180
1180
|
before do
|
1181
1181
|
@c.delete
|
1182
|
-
@c.create :name => "
|
1183
|
-
@c.create :name => "def"
|
1184
|
-
@c.create :name => "
|
1182
|
+
@c.create :name => "abc"
|
1183
|
+
@c.create :name => "def"
|
1184
|
+
@c.create :name => "hig"
|
1185
1185
|
end
|
1186
1186
|
after(:all) do
|
1187
1187
|
@db.drop_table(:sites)
|
@@ -1254,12 +1254,12 @@ describe "List plugin with a scope" do
|
|
1254
1254
|
end
|
1255
1255
|
before do
|
1256
1256
|
@c.delete
|
1257
|
-
p1 = @c.create :name => "Hm", :
|
1258
|
-
p2 = @c.create :name => "Ps", :
|
1259
|
-
@c.create :name => "P1", :
|
1260
|
-
@c.create :name => "P2", :
|
1261
|
-
@c.create :name => "P3", :
|
1262
|
-
@c.create :name => "Au", :
|
1257
|
+
p1 = @c.create :name => "Hm", :parent_id => 0
|
1258
|
+
p2 = @c.create :name => "Ps", :parent_id => p1.id
|
1259
|
+
@c.create :name => "P1", :parent_id => p2.id
|
1260
|
+
@c.create :name => "P2", :parent_id => p2.id
|
1261
|
+
@c.create :name => "P3", :parent_id => p2.id
|
1262
|
+
@c.create :name => "Au", :parent_id => p1.id
|
1263
1263
|
end
|
1264
1264
|
after(:all) do
|
1265
1265
|
@db.drop_table(:pages)
|
@@ -441,7 +441,9 @@ describe "Database schema modifiers" do
|
|
441
441
|
end
|
442
442
|
|
443
443
|
cspecify "should remove columns from tables correctly", :h2, :mssql, [:jdbc, :db2], :hsqldb do
|
444
|
-
|
444
|
+
# MySQL with InnoDB cannot drop foreign key columns unless you know the
|
445
|
+
# name of the constraint, see Bug #14347
|
446
|
+
@db.create_table!(:items, :engine=>:MyISAM) do
|
445
447
|
primary_key :id
|
446
448
|
String :name
|
447
449
|
Integer :number
|
@@ -156,7 +156,7 @@ describe "Database transactions" do
|
|
156
156
|
@d.select_order_map(:name).should == []
|
157
157
|
end
|
158
158
|
|
159
|
-
if INTEGRATION_DB.
|
159
|
+
if INTEGRATION_DB.supports_savepoints_in_prepared_transactions?
|
160
160
|
specify "should support savepoints when using prepared transactions" do
|
161
161
|
@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@d << {:name => '1'}}}
|
162
162
|
@db.commit_prepared_transaction('XYZ')
|
@@ -252,7 +252,7 @@ describe "Database transactions" do
|
|
252
252
|
proc{@db.transaction(:prepare=>'XYZ'){@db.after_rollback{}}}.should raise_error(Sequel::Error)
|
253
253
|
end
|
254
254
|
|
255
|
-
if INTEGRATION_DB.
|
255
|
+
if INTEGRATION_DB.supports_savepoints_in_prepared_transactions?
|
256
256
|
specify "should raise an error if you attempt to use after_commit or after rollback inside a savepoint in a prepared transaction" do
|
257
257
|
proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_commit{}}}}.should raise_error(Sequel::Error)
|
258
258
|
proc{@db.transaction(:prepare=>'XYZ'){@db.transaction(:savepoint=>true){@db.after_rollback{}}}}.should raise_error(Sequel::Error)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.33.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-01 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: The Database Toolkit for Ruby
|
15
15
|
email: code@jeremyevans.net
|
@@ -91,6 +91,7 @@ extra_rdoc_files:
|
|
91
91
|
- doc/release_notes/3.30.0.txt
|
92
92
|
- doc/release_notes/3.31.0.txt
|
93
93
|
- doc/release_notes/3.32.0.txt
|
94
|
+
- doc/release_notes/3.33.0.txt
|
94
95
|
files:
|
95
96
|
- MIT-LICENSE
|
96
97
|
- CHANGELOG
|
@@ -160,6 +161,7 @@ files:
|
|
160
161
|
- doc/release_notes/3.30.0.txt
|
161
162
|
- doc/release_notes/3.31.0.txt
|
162
163
|
- doc/release_notes/3.32.0.txt
|
164
|
+
- doc/release_notes/3.33.0.txt
|
163
165
|
- doc/sharding.rdoc
|
164
166
|
- doc/sql.rdoc
|
165
167
|
- doc/validations.rdoc
|
@@ -246,6 +248,8 @@ files:
|
|
246
248
|
- spec/extensions/prepared_statements_with_pk_spec.rb
|
247
249
|
- spec/extensions/prepared_statements_associations_spec.rb
|
248
250
|
- spec/extensions/dataset_associations_spec.rb
|
251
|
+
- spec/extensions/arbitrary_servers_spec.rb
|
252
|
+
- spec/extensions/server_block_spec.rb
|
249
253
|
- spec/extensions/columns_introspection_spec.rb
|
250
254
|
- spec/integration/associations_test.rb
|
251
255
|
- spec/integration/database_test.rb
|
@@ -315,6 +319,10 @@ files:
|
|
315
319
|
- spec/files/reversible_migrations/003_reversible.rb
|
316
320
|
- spec/files/reversible_migrations/004_reversible.rb
|
317
321
|
- spec/files/reversible_migrations/005_reversible.rb
|
322
|
+
- spec/files/transaction_migrations/001_create_alt_basic.rb
|
323
|
+
- spec/files/transaction_migrations/002_create_basic.rb
|
324
|
+
- spec/files/transactionless_migrations/001_create_alt_basic.rb
|
325
|
+
- spec/files/transactionless_migrations/002_create_basic.rb
|
318
326
|
- lib/sequel.rb
|
319
327
|
- lib/sequel/adapters/ado.rb
|
320
328
|
- lib/sequel/adapters/ado/mssql.rb
|
@@ -411,6 +419,8 @@ files:
|
|
411
419
|
- lib/sequel/extensions/string_date_time.rb
|
412
420
|
- lib/sequel/extensions/thread_local_timezones.rb
|
413
421
|
- lib/sequel/extensions/to_dot.rb
|
422
|
+
- lib/sequel/extensions/arbitrary_servers.rb
|
423
|
+
- lib/sequel/extensions/server_block.rb
|
414
424
|
- lib/sequel/extensions/columns_introspection.rb
|
415
425
|
- lib/sequel/metaprogramming.rb
|
416
426
|
- lib/sequel/model.rb
|