sequel 3.38.0 → 3.39.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 +62 -0
- data/README.rdoc +2 -2
- data/bin/sequel +12 -2
- data/doc/advanced_associations.rdoc +1 -1
- data/doc/association_basics.rdoc +13 -0
- data/doc/release_notes/3.39.0.txt +237 -0
- data/doc/schema_modification.rdoc +4 -4
- data/lib/sequel/adapters/jdbc/derby.rb +1 -0
- data/lib/sequel/adapters/mock.rb +5 -0
- data/lib/sequel/adapters/mysql.rb +8 -1
- data/lib/sequel/adapters/mysql2.rb +10 -3
- data/lib/sequel/adapters/postgres.rb +72 -8
- data/lib/sequel/adapters/shared/db2.rb +1 -0
- data/lib/sequel/adapters/shared/mssql.rb +57 -0
- data/lib/sequel/adapters/shared/mysql.rb +95 -19
- data/lib/sequel/adapters/shared/oracle.rb +14 -0
- data/lib/sequel/adapters/shared/postgres.rb +63 -24
- data/lib/sequel/adapters/shared/sqlite.rb +6 -9
- data/lib/sequel/connection_pool/sharded_threaded.rb +8 -3
- data/lib/sequel/connection_pool/threaded.rb +9 -4
- data/lib/sequel/database/query.rb +60 -48
- data/lib/sequel/database/schema_generator.rb +13 -6
- data/lib/sequel/database/schema_methods.rb +65 -12
- data/lib/sequel/dataset/actions.rb +22 -4
- data/lib/sequel/dataset/features.rb +5 -0
- data/lib/sequel/dataset/graph.rb +2 -3
- data/lib/sequel/dataset/misc.rb +2 -2
- data/lib/sequel/dataset/query.rb +0 -2
- data/lib/sequel/dataset/sql.rb +33 -12
- data/lib/sequel/extensions/constraint_validations.rb +451 -0
- data/lib/sequel/extensions/eval_inspect.rb +17 -2
- data/lib/sequel/extensions/pg_array_ops.rb +15 -5
- data/lib/sequel/extensions/pg_interval.rb +2 -2
- data/lib/sequel/extensions/pg_row_ops.rb +18 -0
- data/lib/sequel/extensions/schema_dumper.rb +3 -11
- data/lib/sequel/model/associations.rb +3 -2
- data/lib/sequel/model/base.rb +57 -13
- data/lib/sequel/model/exceptions.rb +20 -2
- data/lib/sequel/plugins/constraint_validations.rb +198 -0
- data/lib/sequel/plugins/defaults_setter.rb +15 -1
- data/lib/sequel/plugins/dirty.rb +2 -2
- data/lib/sequel/plugins/identity_map.rb +12 -8
- data/lib/sequel/plugins/subclasses.rb +19 -1
- data/lib/sequel/plugins/tree.rb +3 -3
- data/lib/sequel/plugins/validation_helpers.rb +24 -4
- data/lib/sequel/sql.rb +64 -24
- data/lib/sequel/timezones.rb +10 -2
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/mssql_spec.rb +26 -25
- data/spec/adapters/mysql_spec.rb +57 -23
- data/spec/adapters/oracle_spec.rb +34 -49
- data/spec/adapters/postgres_spec.rb +226 -128
- data/spec/adapters/sqlite_spec.rb +50 -49
- data/spec/core/connection_pool_spec.rb +22 -0
- data/spec/core/database_spec.rb +53 -47
- data/spec/core/dataset_spec.rb +36 -32
- data/spec/core/expression_filters_spec.rb +14 -2
- data/spec/core/mock_adapter_spec.rb +4 -0
- data/spec/core/object_graph_spec.rb +0 -13
- data/spec/core/schema_spec.rb +64 -5
- data/spec/core_extensions_spec.rb +1 -0
- data/spec/extensions/constraint_validations_plugin_spec.rb +196 -0
- data/spec/extensions/constraint_validations_spec.rb +316 -0
- data/spec/extensions/defaults_setter_spec.rb +24 -0
- data/spec/extensions/eval_inspect_spec.rb +9 -0
- data/spec/extensions/identity_map_spec.rb +11 -2
- data/spec/extensions/pg_array_ops_spec.rb +9 -0
- data/spec/extensions/pg_row_ops_spec.rb +11 -1
- data/spec/extensions/pg_row_plugin_spec.rb +4 -0
- data/spec/extensions/schema_dumper_spec.rb +8 -5
- data/spec/extensions/subclasses_spec.rb +14 -0
- data/spec/extensions/validation_helpers_spec.rb +15 -2
- data/spec/integration/dataset_test.rb +75 -1
- data/spec/integration/plugin_test.rb +146 -0
- data/spec/integration/schema_test.rb +34 -0
- data/spec/model/dataset_methods_spec.rb +38 -0
- data/spec/model/hooks_spec.rb +6 -0
- data/spec/model/validations_spec.rb +27 -2
- metadata +8 -2
|
@@ -108,6 +108,16 @@ describe "Database schema parser" do
|
|
|
108
108
|
INTEGRATION_DB.schema(:items).first.last[:ruby_default].should == 'blah'
|
|
109
109
|
end
|
|
110
110
|
|
|
111
|
+
specify "should parse current timestamp defaults from the schema properly" do
|
|
112
|
+
INTEGRATION_DB.create_table!(:items){Time :a, :default=>Sequel::CURRENT_TIMESTAMP}
|
|
113
|
+
INTEGRATION_DB.schema(:items).first.last[:ruby_default].should == Sequel::CURRENT_TIMESTAMP
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
cspecify "should parse current date defaults from the schema properly", :mysql, :oracle do
|
|
117
|
+
INTEGRATION_DB.create_table!(:items){Date :a, :default=>Sequel::CURRENT_DATE}
|
|
118
|
+
INTEGRATION_DB.schema(:items).first.last[:ruby_default].should == Sequel::CURRENT_DATE
|
|
119
|
+
end
|
|
120
|
+
|
|
111
121
|
cspecify "should parse types from the schema properly", [:jdbc, :db2], :oracle do
|
|
112
122
|
INTEGRATION_DB.create_table!(:items){Integer :number}
|
|
113
123
|
INTEGRATION_DB.schema(:items).first.last[:type].should == :integer
|
|
@@ -575,6 +585,30 @@ describe "Database schema modifiers" do
|
|
|
575
585
|
end
|
|
576
586
|
@db.schema(:items, :reload=>true).map{|x| x.first}.should == [:id]
|
|
577
587
|
end
|
|
588
|
+
|
|
589
|
+
cspecify "should work correctly with many operations in a single alter_table call", [:jdbc, :db2], [:db2] do
|
|
590
|
+
@db.create_table!(:items) do
|
|
591
|
+
primary_key :id
|
|
592
|
+
String :name2
|
|
593
|
+
String :number2
|
|
594
|
+
constraint :bar, Sequel.~(:id=>nil)
|
|
595
|
+
end
|
|
596
|
+
@ds.insert(:name2=>'A12')
|
|
597
|
+
@db.alter_table(:items) do
|
|
598
|
+
add_column :number, Integer
|
|
599
|
+
drop_column :number2
|
|
600
|
+
rename_column :name2, :name
|
|
601
|
+
drop_constraint :bar
|
|
602
|
+
set_column_not_null :name
|
|
603
|
+
set_column_default :name, 'A13'
|
|
604
|
+
add_constraint :foo, Sequel.like(:name, 'A%')
|
|
605
|
+
end
|
|
606
|
+
@db[:items].first.should == {:id=>1, :name=>'A12', :number=>nil}
|
|
607
|
+
@db[:items].delete
|
|
608
|
+
proc{@db[:items].insert(:name=>nil)}.should raise_error(Sequel::DatabaseError)
|
|
609
|
+
@db[:items].insert(:number=>1)
|
|
610
|
+
@db[:items].get(:name).should == 'A13'
|
|
611
|
+
end
|
|
578
612
|
end
|
|
579
613
|
|
|
580
614
|
test_tables = begin
|
|
@@ -69,3 +69,41 @@ describe Sequel::Model::DatasetMethods, "#to_hash" do
|
|
|
69
69
|
proc{@d.to_hash}.should raise_error(Sequel::Error)
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
|
+
|
|
73
|
+
describe Sequel::Model::DatasetMethods, "#join_table" do
|
|
74
|
+
before do
|
|
75
|
+
@c = Class.new(Sequel::Model(:items))
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
specify "should allow use to use a model class when joining" do
|
|
79
|
+
@c.join(Class.new(Sequel::Model(:categories)), :item_id => :id).sql.should == 'SELECT * FROM items INNER JOIN categories ON (categories.item_id = items.id)'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
specify "should handle model classes that aren't simple selects using a subselect" do
|
|
83
|
+
@c.join(Class.new(Sequel::Model(MODEL_DB[:categories].where(:foo=>1))), :item_id => :id).sql.should == 'SELECT * FROM items INNER JOIN (SELECT * FROM categories WHERE (foo = 1)) AS t1 ON (t1.item_id = items.id)'
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
describe Sequel::Model::DatasetMethods, "#graph" do
|
|
88
|
+
before do
|
|
89
|
+
@c = Class.new(Sequel::Model(:items))
|
|
90
|
+
@c.columns :id
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
specify "should allow use to use a model class when joining" do
|
|
94
|
+
c = Class.new(Sequel::Model(:categories))
|
|
95
|
+
c.columns :id
|
|
96
|
+
@c.graph(c, :item_id => :id).sql.should == 'SELECT items.id, categories.id AS categories_id FROM items LEFT OUTER JOIN categories ON (categories.item_id = items.id)'
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
describe Sequel::Model::DatasetMethods, "#insert_sql" do
|
|
101
|
+
before do
|
|
102
|
+
@c = Class.new(Sequel::Model(:items))
|
|
103
|
+
@c.columns :id
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
specify "should handle a single model instance as an argument" do
|
|
107
|
+
@c.insert_sql(@c.load(:id=>1)).should == 'INSERT INTO items (id) VALUES (1)'
|
|
108
|
+
end
|
|
109
|
+
end
|
data/spec/model/hooks_spec.rb
CHANGED
|
@@ -140,6 +140,12 @@ describe "Model#before_save && Model#after_save" do
|
|
|
140
140
|
@c.load(:id => 2233).save.should == nil
|
|
141
141
|
MODEL_DB.sqls.should == []
|
|
142
142
|
end
|
|
143
|
+
|
|
144
|
+
specify "#save should have a raised exception reference the model instance" do
|
|
145
|
+
@c.send(:define_method, :before_save){false}
|
|
146
|
+
proc{@c.create(:x => 2233)}.should raise_error(Sequel::HookFailed){|e| e.model.should == @c.load(:x=>2233)}
|
|
147
|
+
MODEL_DB.sqls.should == []
|
|
148
|
+
end
|
|
143
149
|
end
|
|
144
150
|
|
|
145
151
|
describe "Model#before_destroy && Model#after_destroy" do
|
|
@@ -128,6 +128,28 @@ describe Sequel::Model do
|
|
|
128
128
|
@o.errors[:blah].should be_empty
|
|
129
129
|
end
|
|
130
130
|
|
|
131
|
+
specify "should allow raising of ValidationFailed with a Model instance with errors" do
|
|
132
|
+
@o.errors.add(:score, 'is too low')
|
|
133
|
+
begin
|
|
134
|
+
raise Sequel::ValidationFailed, @o
|
|
135
|
+
rescue Sequel::ValidationFailed => e
|
|
136
|
+
end
|
|
137
|
+
e.model.should equal(@o)
|
|
138
|
+
e.errors.should equal(@o.errors)
|
|
139
|
+
e.message.should == 'score is too low'
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
specify "should allow raising of ValidationFailed with an Errors instance" do
|
|
143
|
+
@o.errors.add(:score, 'is too low')
|
|
144
|
+
begin
|
|
145
|
+
raise Sequel::ValidationFailed, @o.errors
|
|
146
|
+
rescue Sequel::ValidationFailed => e
|
|
147
|
+
end
|
|
148
|
+
e.model.should be_nil
|
|
149
|
+
e.errors.should equal(@o.errors)
|
|
150
|
+
e.message.should == 'score is too low'
|
|
151
|
+
end
|
|
152
|
+
|
|
131
153
|
specify "should allow raising of ValidationFailed with a string" do
|
|
132
154
|
proc{raise Sequel::ValidationFailed, "no reason"}.should raise_error(Sequel::ValidationFailed, "no reason")
|
|
133
155
|
end
|
|
@@ -165,8 +187,11 @@ describe "Model#save" do
|
|
|
165
187
|
MODEL_DB.sqls.should == ['UPDATE people SET x = 6 WHERE (id = 4)']
|
|
166
188
|
end
|
|
167
189
|
|
|
168
|
-
specify "should raise error if validations fail and
|
|
169
|
-
proc{@m.save}.should
|
|
190
|
+
specify "should raise error if validations fail and raise_on_save_failure is true" do
|
|
191
|
+
proc{@m.save}.should(raise_error(Sequel::ValidationFailed) do |e|
|
|
192
|
+
e.model.should equal(@m)
|
|
193
|
+
e.errors.should equal(@m.errors)
|
|
194
|
+
end)
|
|
170
195
|
end
|
|
171
196
|
|
|
172
197
|
specify "should raise error if validations fail and :raise_on_failure option is true" do
|
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.39.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-09-01 00:00:00.000000000 Z
|
|
13
13
|
dependencies: []
|
|
14
14
|
description: The Database Toolkit for Ruby
|
|
15
15
|
email: code@jeremyevans.net
|
|
@@ -100,6 +100,7 @@ extra_rdoc_files:
|
|
|
100
100
|
- doc/release_notes/3.36.0.txt
|
|
101
101
|
- doc/release_notes/3.37.0.txt
|
|
102
102
|
- doc/release_notes/3.38.0.txt
|
|
103
|
+
- doc/release_notes/3.39.0.txt
|
|
103
104
|
files:
|
|
104
105
|
- MIT-LICENSE
|
|
105
106
|
- CHANGELOG
|
|
@@ -175,6 +176,7 @@ files:
|
|
|
175
176
|
- doc/release_notes/3.36.0.txt
|
|
176
177
|
- doc/release_notes/3.37.0.txt
|
|
177
178
|
- doc/release_notes/3.38.0.txt
|
|
179
|
+
- doc/release_notes/3.39.0.txt
|
|
178
180
|
- doc/sharding.rdoc
|
|
179
181
|
- doc/sql.rdoc
|
|
180
182
|
- doc/validations.rdoc
|
|
@@ -291,6 +293,8 @@ files:
|
|
|
291
293
|
- spec/extensions/pg_row_plugin_spec.rb
|
|
292
294
|
- spec/extensions/pg_row_spec.rb
|
|
293
295
|
- spec/extensions/pg_typecast_on_load_spec.rb
|
|
296
|
+
- spec/extensions/constraint_validations_plugin_spec.rb
|
|
297
|
+
- spec/extensions/constraint_validations_spec.rb
|
|
294
298
|
- spec/integration/associations_test.rb
|
|
295
299
|
- spec/integration/database_test.rb
|
|
296
300
|
- spec/integration/dataset_test.rb
|
|
@@ -485,6 +489,7 @@ files:
|
|
|
485
489
|
- lib/sequel/extensions/pg_interval.rb
|
|
486
490
|
- lib/sequel/extensions/pg_row.rb
|
|
487
491
|
- lib/sequel/extensions/pg_row_ops.rb
|
|
492
|
+
- lib/sequel/extensions/constraint_validations.rb
|
|
488
493
|
- lib/sequel/metaprogramming.rb
|
|
489
494
|
- lib/sequel/model.rb
|
|
490
495
|
- lib/sequel/model/associations.rb
|
|
@@ -544,6 +549,7 @@ files:
|
|
|
544
549
|
- lib/sequel/plugins/eager_each.rb
|
|
545
550
|
- lib/sequel/plugins/pg_row.rb
|
|
546
551
|
- lib/sequel/plugins/pg_typecast_on_load.rb
|
|
552
|
+
- lib/sequel/plugins/constraint_validations.rb
|
|
547
553
|
- lib/sequel/timezones.rb
|
|
548
554
|
- lib/sequel/version.rb
|
|
549
555
|
- lib/sequel/ast_transformer.rb
|