sequel 3.38.0 → 3.39.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|