sequel 3.13.0 → 3.14.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +36 -0
- data/doc/release_notes/3.14.0.txt +118 -0
- data/lib/sequel/adapters/oracle.rb +7 -2
- data/lib/sequel/adapters/shared/mssql.rb +9 -3
- data/lib/sequel/connection_pool/sharded_threaded.rb +1 -1
- data/lib/sequel/connection_pool/threaded.rb +3 -3
- data/lib/sequel/database/connecting.rb +47 -11
- data/lib/sequel/database/dataset.rb +17 -6
- data/lib/sequel/database/dataset_defaults.rb +15 -3
- data/lib/sequel/database/logging.rb +4 -3
- data/lib/sequel/database/misc.rb +33 -21
- data/lib/sequel/database/query.rb +61 -22
- data/lib/sequel/database/schema_generator.rb +108 -45
- data/lib/sequel/database/schema_methods.rb +8 -5
- data/lib/sequel/dataset/actions.rb +194 -45
- data/lib/sequel/dataset/features.rb +1 -1
- data/lib/sequel/dataset/graph.rb +51 -43
- data/lib/sequel/dataset/misc.rb +29 -5
- data/lib/sequel/dataset/mutation.rb +0 -1
- data/lib/sequel/dataset/prepared_statements.rb +14 -2
- data/lib/sequel/dataset/query.rb +268 -125
- data/lib/sequel/dataset/sql.rb +33 -44
- data/lib/sequel/extensions/migration.rb +3 -2
- data/lib/sequel/extensions/pagination.rb +1 -1
- data/lib/sequel/model/associations.rb +89 -87
- data/lib/sequel/model/base.rb +386 -109
- data/lib/sequel/model/errors.rb +15 -1
- data/lib/sequel/model/exceptions.rb +3 -3
- data/lib/sequel/model/inflections.rb +2 -2
- data/lib/sequel/model/plugins.rb +9 -5
- data/lib/sequel/plugins/rcte_tree.rb +43 -15
- data/lib/sequel/plugins/schema.rb +6 -5
- data/lib/sequel/plugins/serialization.rb +1 -1
- data/lib/sequel/plugins/single_table_inheritance.rb +1 -1
- data/lib/sequel/plugins/tree.rb +33 -1
- data/lib/sequel/timezones.rb +16 -10
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/mssql_spec.rb +36 -2
- data/spec/adapters/mysql_spec.rb +4 -4
- data/spec/adapters/postgres_spec.rb +1 -1
- data/spec/adapters/spec_helper.rb +2 -2
- data/spec/core/database_spec.rb +8 -1
- data/spec/core/dataset_spec.rb +36 -1
- data/spec/extensions/pagination_spec.rb +1 -1
- data/spec/extensions/rcte_tree_spec.rb +40 -8
- data/spec/extensions/schema_spec.rb +5 -0
- data/spec/extensions/serialization_spec.rb +4 -4
- data/spec/extensions/single_table_inheritance_spec.rb +7 -0
- data/spec/extensions/tree_spec.rb +36 -0
- data/spec/integration/dataset_test.rb +19 -0
- data/spec/integration/prepared_statement_test.rb +2 -2
- data/spec/integration/schema_test.rb +1 -1
- data/spec/integration/spec_helper.rb +4 -4
- data/spec/integration/timezone_test.rb +27 -21
- data/spec/model/associations_spec.rb +5 -5
- data/spec/model/dataset_methods_spec.rb +13 -0
- data/spec/model/hooks_spec.rb +31 -0
- data/spec/model/record_spec.rb +24 -7
- data/spec/model/validations_spec.rb +9 -4
- metadata +6 -4
@@ -1316,7 +1316,7 @@ describe Sequel::Model, "one_to_many" do
|
|
1316
1316
|
@c2.one_to_many :attributes, :class => @c1
|
1317
1317
|
n = @c2.new(:id => 1234)
|
1318
1318
|
a = @c1.new(:id => 2345)
|
1319
|
-
def a.valid
|
1319
|
+
def a.valid?(opts); false; end
|
1320
1320
|
proc{n.add_attribute(a)}.should raise_error(Sequel::Error)
|
1321
1321
|
proc{n.remove_attribute(a)}.should raise_error(Sequel::Error)
|
1322
1322
|
end
|
@@ -1325,7 +1325,7 @@ describe Sequel::Model, "one_to_many" do
|
|
1325
1325
|
@c2.one_to_many :attributes, :class => @c1, :validate=>false
|
1326
1326
|
n = @c2.new(:id => 1234)
|
1327
1327
|
a = @c1.new(:id => 2345)
|
1328
|
-
def a.valid
|
1328
|
+
def a.valid?(opts); false; end
|
1329
1329
|
n.add_attribute(a).should == a
|
1330
1330
|
n.remove_attribute(a).should == a
|
1331
1331
|
end
|
@@ -2199,7 +2199,7 @@ describe Sequel::Model, "many_to_many" do
|
|
2199
2199
|
@c2.many_to_many :attributes, :class => @c1
|
2200
2200
|
n = @c1.new
|
2201
2201
|
a = @c2.load(:id=>123)
|
2202
|
-
def n.valid
|
2202
|
+
def n.valid?(opts); false; end
|
2203
2203
|
proc{a.add_attribute(n)}.should raise_error(Sequel::ValidationFailed)
|
2204
2204
|
end
|
2205
2205
|
|
@@ -2208,7 +2208,7 @@ describe Sequel::Model, "many_to_many" do
|
|
2208
2208
|
n = @c1.new
|
2209
2209
|
n.raise_on_save_failure = false
|
2210
2210
|
a = @c2.load(:id=>123)
|
2211
|
-
def n.valid
|
2211
|
+
def n.valid?(opts); false; end
|
2212
2212
|
proc{a.add_attribute(n)}.should raise_error(Sequel::Error)
|
2213
2213
|
end
|
2214
2214
|
|
@@ -2216,7 +2216,7 @@ describe Sequel::Model, "many_to_many" do
|
|
2216
2216
|
@c2.many_to_many :attributes, :class => @c1, :validate=>false
|
2217
2217
|
n = @c1.new
|
2218
2218
|
a = @c2.load(:id=>123)
|
2219
|
-
def n.valid
|
2219
|
+
def n.valid?(opts); false; end
|
2220
2220
|
a.add_attribute(n)
|
2221
2221
|
n.new?.should == false
|
2222
2222
|
end
|
@@ -12,6 +12,7 @@ describe Sequel::Model::DatasetMethods, "#destroy" do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
@d = @c.dataset
|
15
|
+
MODEL_DB.reset
|
15
16
|
end
|
16
17
|
|
17
18
|
it "should instantiate objects in the dataset and call destroy on each" do
|
@@ -37,6 +38,18 @@ describe Sequel::Model::DatasetMethods, "#destroy" do
|
|
37
38
|
end
|
38
39
|
@d.destroy.should == 0
|
39
40
|
end
|
41
|
+
|
42
|
+
it "should use a transaction if use_transactions is true for the model" do
|
43
|
+
@c.use_transactions = true
|
44
|
+
@d.destroy
|
45
|
+
MODEL_DB.sqls.should == ["BEGIN", "SELECT * FROM items", "COMMIT"]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should not use a transaction if use_transactions is false for the model" do
|
49
|
+
@c.use_transactions = false
|
50
|
+
@d.destroy
|
51
|
+
MODEL_DB.sqls.should == ["SELECT * FROM items"]
|
52
|
+
end
|
40
53
|
end
|
41
54
|
|
42
55
|
describe Sequel::Model::DatasetMethods, "#to_hash" do
|
data/spec/model/hooks_spec.rb
CHANGED
@@ -89,6 +89,14 @@ describe "Model#before_update && Model#after_update" do
|
|
89
89
|
MODEL_DB.sqls.should == []
|
90
90
|
end
|
91
91
|
|
92
|
+
specify "#save should cancel the save and raise an error if before_update returns false and raise_on_failure option is true" do
|
93
|
+
@c.send(:define_method, :before_update){false}
|
94
|
+
@c.raise_on_save_failure = false
|
95
|
+
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should_not raise_error(Sequel::ValidationFailed)
|
96
|
+
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::BeforeHookFailed)
|
97
|
+
MODEL_DB.sqls.should == []
|
98
|
+
end
|
99
|
+
|
92
100
|
specify "#save should cancel the save and return nil if before_update returns false and raise_on_save_failure is false" do
|
93
101
|
@c.send(:define_method, :before_update){false}
|
94
102
|
@c.raise_on_save_failure = false
|
@@ -137,6 +145,14 @@ describe "Model#before_save && Model#after_save" do
|
|
137
145
|
MODEL_DB.sqls.should == []
|
138
146
|
end
|
139
147
|
|
148
|
+
specify "#save should cancel the save and raise an error if before_save returns false and raise_on_failure option is true" do
|
149
|
+
@c.send(:define_method, :before_save){false}
|
150
|
+
@c.raise_on_save_failure = false
|
151
|
+
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should_not raise_error(Sequel::ValidationFailed)
|
152
|
+
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::BeforeHookFailed)
|
153
|
+
MODEL_DB.sqls.should == []
|
154
|
+
end
|
155
|
+
|
140
156
|
specify "#save should cancel the save and return nil if before_save returns false and raise_on_save_failure is false" do
|
141
157
|
@c.send(:define_method, :before_save){false}
|
142
158
|
@c.raise_on_save_failure = false
|
@@ -176,6 +192,13 @@ describe "Model#before_destroy && Model#after_destroy" do
|
|
176
192
|
MODEL_DB.sqls.should == []
|
177
193
|
end
|
178
194
|
|
195
|
+
specify "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_failure option is true" do
|
196
|
+
@c.send(:define_method, :before_destroy){false}
|
197
|
+
@c.raise_on_save_failure = false
|
198
|
+
proc{@c.load(:id => 2233).destroy(:raise_on_failure => true)}.should raise_error(Sequel::BeforeHookFailed)
|
199
|
+
MODEL_DB.sqls.should == []
|
200
|
+
end
|
201
|
+
|
179
202
|
specify "#destroy should cancel the destroy and return nil if before_destroy returns false and raise_on_save_failure is false" do
|
180
203
|
@c.send(:define_method, :before_destroy){false}
|
181
204
|
@c.raise_on_save_failure = false
|
@@ -231,6 +254,14 @@ describe "Model#before_validation && Model#after_validation" do
|
|
231
254
|
MODEL_DB.sqls.should == []
|
232
255
|
end
|
233
256
|
|
257
|
+
specify "#save should cancel the save and raise an error if before_validation returns false and raise_on_failure option is true" do
|
258
|
+
@c.send(:define_method, :before_validation){false}
|
259
|
+
@c.raise_on_save_failure = false
|
260
|
+
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should_not raise_error(Sequel::ValidationFailed)
|
261
|
+
proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.should raise_error(Sequel::BeforeHookFailed)
|
262
|
+
MODEL_DB.sqls.should == []
|
263
|
+
end
|
264
|
+
|
234
265
|
specify "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
|
235
266
|
@c.send(:define_method, :before_validation){false}
|
236
267
|
@c.raise_on_save_failure = false
|
data/spec/model/record_spec.rb
CHANGED
@@ -243,6 +243,18 @@ describe "Model#save" do
|
|
243
243
|
MODEL_DB.reset
|
244
244
|
end
|
245
245
|
|
246
|
+
it "should rollback if before_save returns false and :raise_on_failure option is true" do
|
247
|
+
o = @c.load(:id => 3, :x => 1, :y => nil)
|
248
|
+
o.use_transactions = true
|
249
|
+
o.raise_on_save_failure = false
|
250
|
+
def o.before_save
|
251
|
+
false
|
252
|
+
end
|
253
|
+
proc { o.save(:y, :raise_on_failure => true) }.should raise_error(Sequel::BeforeHookFailed)
|
254
|
+
MODEL_DB.sqls.should == ["BEGIN", "ROLLBACK"]
|
255
|
+
MODEL_DB.reset
|
256
|
+
end
|
257
|
+
|
246
258
|
it "should not rollback outer transactions if before_save returns false and raise_on_save_failure = false" do
|
247
259
|
o = @c.load(:id => 3, :x => 1, :y => nil)
|
248
260
|
o.use_transactions = true
|
@@ -386,7 +398,7 @@ describe "Model#save_changes" do
|
|
386
398
|
|
387
399
|
it "should take options passed to save" do
|
388
400
|
o = @c.new(:x => 1)
|
389
|
-
def o.
|
401
|
+
def o.before_validation; false; end
|
390
402
|
proc{o.save_changes}.should raise_error(Sequel::Error)
|
391
403
|
MODEL_DB.sqls.should == []
|
392
404
|
o.save_changes(:validate=>false)
|
@@ -944,17 +956,22 @@ end
|
|
944
956
|
describe Sequel::Model, "#exists?" do
|
945
957
|
before(:each) do
|
946
958
|
@model = Class.new(Sequel::Model(:items))
|
947
|
-
@
|
959
|
+
@ds = @model.dataset
|
960
|
+
def @ds.fetch_rows(sql)
|
961
|
+
db.execute(sql)
|
962
|
+
yield(:x=>1) if sql =~ /id = 1/
|
963
|
+
end
|
964
|
+
MODEL_DB.reset
|
948
965
|
end
|
949
966
|
|
950
|
-
it "should
|
951
|
-
@
|
952
|
-
|
967
|
+
it "should do a query to check if the record exists" do
|
968
|
+
@model.load(:id=>1).exists?.should be_true
|
969
|
+
MODEL_DB.sqls.should == ['SELECT 1 FROM items WHERE (id = 1) LIMIT 1']
|
953
970
|
end
|
954
971
|
|
955
972
|
it "should return false when #this.count == 0" do
|
956
|
-
@
|
957
|
-
|
973
|
+
@model.load(:id=>2).exists?.should be_false
|
974
|
+
MODEL_DB.sqls.should == ['SELECT 1 FROM items WHERE (id = 2) LIMIT 1']
|
958
975
|
end
|
959
976
|
end
|
960
977
|
|
@@ -128,7 +128,7 @@ describe "Model#save" do
|
|
128
128
|
columns :id, :x
|
129
129
|
|
130
130
|
def validate
|
131
|
-
errors
|
131
|
+
errors.add(:id, 'blah') unless x == 7
|
132
132
|
end
|
133
133
|
end
|
134
134
|
@m = @c.load(:id => 4, :x=>6)
|
@@ -153,11 +153,16 @@ describe "Model#save" do
|
|
153
153
|
@m.save(:validate=>false)
|
154
154
|
MODEL_DB.sqls.should == ['UPDATE people SET x = 6 WHERE (id = 4)']
|
155
155
|
end
|
156
|
-
|
156
|
+
|
157
157
|
specify "should raise error if validations fail and raise_on_save_faiure is true" do
|
158
|
-
proc{@m.save}.should raise_error(Sequel::ValidationFailed){
|
158
|
+
proc{@m.save}.should raise_error(Sequel::ValidationFailed){|e| e.errors.should == @m.errors }
|
159
159
|
end
|
160
|
-
|
160
|
+
|
161
|
+
specify "should raise error if validations fail and :raise_on_failure option is true" do
|
162
|
+
@m.raise_on_save_failure = false
|
163
|
+
proc{@m.save(:raise_on_failure => true)}.should raise_error(Sequel::ValidationFailed)
|
164
|
+
end
|
165
|
+
|
161
166
|
specify "should return nil if validations fail and raise_on_save_faiure is false" do
|
162
167
|
@m.raise_on_save_failure = false
|
163
168
|
@m.save.should == nil
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 3
|
8
|
-
-
|
8
|
+
- 14
|
9
9
|
- 0
|
10
|
-
version: 3.
|
10
|
+
version: 3.14.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jeremy Evans
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-02 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -77,6 +77,7 @@ extra_rdoc_files:
|
|
77
77
|
- doc/release_notes/3.11.0.txt
|
78
78
|
- doc/release_notes/3.12.0.txt
|
79
79
|
- doc/release_notes/3.13.0.txt
|
80
|
+
- doc/release_notes/3.14.0.txt
|
80
81
|
files:
|
81
82
|
- COPYING
|
82
83
|
- CHANGELOG
|
@@ -121,6 +122,7 @@ files:
|
|
121
122
|
- doc/release_notes/3.11.0.txt
|
122
123
|
- doc/release_notes/3.12.0.txt
|
123
124
|
- doc/release_notes/3.13.0.txt
|
125
|
+
- doc/release_notes/3.14.0.txt
|
124
126
|
- doc/sharding.rdoc
|
125
127
|
- doc/sql.rdoc
|
126
128
|
- doc/virtual_rows.rdoc
|