sequel 3.13.0 → 3.14.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 +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
|