sequel 3.11.0 → 3.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +70 -0
- data/Rakefile +1 -1
- data/doc/active_record.rdoc +896 -0
- data/doc/advanced_associations.rdoc +46 -31
- data/doc/association_basics.rdoc +14 -9
- data/doc/dataset_basics.rdoc +3 -3
- data/doc/migration.rdoc +1011 -0
- data/doc/model_hooks.rdoc +198 -0
- data/doc/querying.rdoc +811 -86
- data/doc/release_notes/3.12.0.txt +304 -0
- data/doc/sharding.rdoc +17 -0
- data/doc/sql.rdoc +537 -0
- data/doc/validations.rdoc +501 -0
- data/lib/sequel/adapters/jdbc.rb +19 -27
- data/lib/sequel/adapters/jdbc/postgresql.rb +0 -7
- data/lib/sequel/adapters/mysql.rb +5 -4
- data/lib/sequel/adapters/odbc.rb +3 -2
- data/lib/sequel/adapters/shared/mssql.rb +7 -6
- data/lib/sequel/adapters/shared/mysql.rb +2 -7
- data/lib/sequel/adapters/shared/postgres.rb +2 -8
- data/lib/sequel/adapters/shared/sqlite.rb +2 -5
- data/lib/sequel/adapters/sqlite.rb +4 -4
- data/lib/sequel/core.rb +0 -1
- data/lib/sequel/database.rb +2 -1060
- data/lib/sequel/database/connecting.rb +227 -0
- data/lib/sequel/database/dataset.rb +58 -0
- data/lib/sequel/database/dataset_defaults.rb +127 -0
- data/lib/sequel/database/logging.rb +62 -0
- data/lib/sequel/database/misc.rb +246 -0
- data/lib/sequel/database/query.rb +390 -0
- data/lib/sequel/database/schema_generator.rb +7 -3
- data/lib/sequel/database/schema_methods.rb +351 -7
- data/lib/sequel/dataset/actions.rb +9 -2
- data/lib/sequel/dataset/misc.rb +6 -2
- data/lib/sequel/dataset/mutation.rb +3 -11
- data/lib/sequel/dataset/query.rb +49 -6
- data/lib/sequel/exceptions.rb +3 -0
- data/lib/sequel/extensions/migration.rb +395 -113
- data/lib/sequel/extensions/schema_dumper.rb +21 -13
- data/lib/sequel/model.rb +27 -25
- data/lib/sequel/model/associations.rb +72 -34
- data/lib/sequel/model/base.rb +74 -18
- data/lib/sequel/model/errors.rb +8 -1
- data/lib/sequel/plugins/active_model.rb +8 -0
- data/lib/sequel/plugins/association_pks.rb +87 -0
- data/lib/sequel/plugins/association_proxies.rb +8 -0
- data/lib/sequel/plugins/boolean_readers.rb +12 -6
- data/lib/sequel/plugins/caching.rb +14 -7
- data/lib/sequel/plugins/class_table_inheritance.rb +15 -9
- data/lib/sequel/plugins/composition.rb +2 -1
- data/lib/sequel/plugins/force_encoding.rb +10 -7
- data/lib/sequel/plugins/hook_class_methods.rb +12 -11
- data/lib/sequel/plugins/identity_map.rb +9 -0
- data/lib/sequel/plugins/instance_hooks.rb +23 -13
- data/lib/sequel/plugins/lazy_attributes.rb +4 -1
- data/lib/sequel/plugins/many_through_many.rb +18 -4
- data/lib/sequel/plugins/nested_attributes.rb +1 -0
- data/lib/sequel/plugins/optimistic_locking.rb +1 -1
- data/lib/sequel/plugins/rcte_tree.rb +9 -8
- data/lib/sequel/plugins/schema.rb +8 -0
- data/lib/sequel/plugins/serialization.rb +1 -3
- data/lib/sequel/plugins/sharding.rb +135 -0
- data/lib/sequel/plugins/single_table_inheritance.rb +117 -25
- data/lib/sequel/plugins/skip_create_refresh.rb +35 -0
- data/lib/sequel/plugins/string_stripper.rb +26 -0
- data/lib/sequel/plugins/tactical_eager_loading.rb +8 -0
- data/lib/sequel/plugins/timestamps.rb +15 -2
- data/lib/sequel/plugins/touch.rb +13 -0
- data/lib/sequel/plugins/update_primary_key.rb +48 -0
- data/lib/sequel/plugins/validation_class_methods.rb +8 -0
- data/lib/sequel/plugins/validation_helpers.rb +1 -1
- data/lib/sequel/sql.rb +17 -20
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/postgres_spec.rb +5 -5
- data/spec/core/core_sql_spec.rb +17 -1
- data/spec/core/database_spec.rb +17 -5
- data/spec/core/dataset_spec.rb +31 -8
- data/spec/core/schema_generator_spec.rb +8 -1
- data/spec/core/schema_spec.rb +13 -0
- data/spec/extensions/association_pks_spec.rb +85 -0
- data/spec/extensions/hook_class_methods_spec.rb +9 -9
- data/spec/extensions/migration_spec.rb +339 -219
- data/spec/extensions/schema_dumper_spec.rb +28 -17
- data/spec/extensions/sharding_spec.rb +272 -0
- data/spec/extensions/single_table_inheritance_spec.rb +92 -4
- data/spec/extensions/skip_create_refresh_spec.rb +17 -0
- data/spec/extensions/string_stripper_spec.rb +23 -0
- data/spec/extensions/update_primary_key_spec.rb +65 -0
- data/spec/extensions/validation_class_methods_spec.rb +5 -5
- data/spec/files/bad_down_migration/001_create_alt_basic.rb +4 -0
- data/spec/files/bad_down_migration/002_create_alt_advanced.rb +4 -0
- data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +9 -0
- data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +9 -0
- data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +3 -0
- data/spec/files/bad_up_migration/001_create_alt_basic.rb +4 -0
- data/spec/files/bad_up_migration/002_create_alt_advanced.rb +3 -0
- data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +9 -0
- data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +9 -0
- data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +4 -0
- data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +9 -0
- data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +9 -0
- data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +4 -0
- data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +4 -0
- data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +9 -0
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +9 -0
- data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +4 -0
- data/spec/files/integer_migrations/001_create_sessions.rb +9 -0
- data/spec/files/integer_migrations/002_create_nodes.rb +9 -0
- data/spec/files/integer_migrations/003_3_create_users.rb +4 -0
- data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +9 -0
- data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +9 -0
- data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +9 -0
- data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +9 -0
- data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +4 -0
- data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +4 -0
- data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +4 -0
- data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +9 -0
- data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +4 -0
- data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +9 -0
- data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +9 -0
- data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +4 -0
- data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +9 -0
- data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +9 -0
- data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +4 -0
- data/spec/integration/eager_loader_test.rb +20 -20
- data/spec/integration/migrator_test.rb +187 -0
- data/spec/integration/plugin_test.rb +150 -0
- data/spec/integration/schema_test.rb +13 -2
- data/spec/model/associations_spec.rb +41 -14
- data/spec/model/base_spec.rb +69 -0
- data/spec/model/eager_loading_spec.rb +7 -3
- data/spec/model/record_spec.rb +79 -4
- data/spec/model/validations_spec.rb +21 -9
- metadata +66 -5
- data/doc/schema.rdoc +0 -36
- data/lib/sequel/database/schema_sql.rb +0 -320
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe "Sequel::Plugins::SkipCreateRefresh" do
|
4
|
+
it "should skip the refresh after saving a new object" do
|
5
|
+
c = Class.new(Sequel::Model(:a))
|
6
|
+
c.columns :id, :x
|
7
|
+
c.db.reset
|
8
|
+
c.dataset.meta_def(:insert){|*a| super(*a); 2}
|
9
|
+
c.create(:x=>1)
|
10
|
+
c.db.sqls.should == ['INSERT INTO a (x) VALUES (1)', 'SELECT * FROM a WHERE (id = 2) LIMIT 1']
|
11
|
+
|
12
|
+
c.plugin :skip_create_refresh
|
13
|
+
c.db.reset
|
14
|
+
c.create(:x=>3).values.should == {:id=>2, :x=>3}
|
15
|
+
c.db.sqls.should == ['INSERT INTO a (x) VALUES (3)']
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe "Sequel::Plugins::StringStripper" do
|
4
|
+
before do
|
5
|
+
@db = Sequel::Database.new
|
6
|
+
@c = Class.new(Sequel::Model(@db))
|
7
|
+
@c.plugin :string_stripper
|
8
|
+
@c.columns :name
|
9
|
+
@o = @c.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should strip all input strings" do
|
13
|
+
@o.name = ' name '
|
14
|
+
@o.name.should == 'name'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should not affect other types" do
|
18
|
+
@o.name = 1
|
19
|
+
@o.name.should == 1
|
20
|
+
@o.name = Date.today
|
21
|
+
@o.name.should == Date.today
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "spec_helper")
|
2
|
+
|
3
|
+
describe "Sequel::Plugins::UpdatePrimaryKey" do
|
4
|
+
before do
|
5
|
+
@c = Class.new(Sequel::Model(:a))
|
6
|
+
@c.plugin :update_primary_key
|
7
|
+
@c.columns :a, :b
|
8
|
+
@c.set_primary_key :a
|
9
|
+
@c.unrestrict_primary_key
|
10
|
+
@o = @c.new
|
11
|
+
@ds = @c.dataset
|
12
|
+
@ds.extend(Module.new do
|
13
|
+
attr_accessor :a
|
14
|
+
def fetch_rows(sql)
|
15
|
+
yield(a.dup)
|
16
|
+
end
|
17
|
+
|
18
|
+
def update(h)
|
19
|
+
if literal(opts[:where]) =~ /a = (\d)/ and $1.to_i == a[:a]
|
20
|
+
a.update(h)
|
21
|
+
end
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end)
|
25
|
+
@ds.a = {:a=>1, :b=>3}
|
26
|
+
@ds2 = @ds.naked
|
27
|
+
MODEL_DB.reset
|
28
|
+
end
|
29
|
+
|
30
|
+
specify "should handle regular updates" do
|
31
|
+
@c.first.update(:b=>4)
|
32
|
+
@ds2.all.should == [{:a=>1, :b=>4}]
|
33
|
+
@c.first.set(:b=>5).save
|
34
|
+
@ds2.all.should == [{:a=>1, :b=>5}]
|
35
|
+
@c.first.set(:b=>6).save(:b)
|
36
|
+
@ds2.all.should == [{:a=>1, :b=>6}]
|
37
|
+
end
|
38
|
+
|
39
|
+
specify "should handle updating the primary key field with another field" do
|
40
|
+
@c.first.update(:a=>2, :b=>4)
|
41
|
+
@ds2.all.should == [{:a=>2, :b=>4}]
|
42
|
+
end
|
43
|
+
|
44
|
+
specify "should handle updating just the primary key field when saving changes" do
|
45
|
+
@c.first.update(:a=>2)
|
46
|
+
@ds2.all.should == [{:a=>2, :b=>3}]
|
47
|
+
@c.first.set(:a=>3).save(:a)
|
48
|
+
@ds2.all.should == [{:a=>3, :b=>3}]
|
49
|
+
end
|
50
|
+
|
51
|
+
specify "should handle saving after modifying the primary key field with another field" do
|
52
|
+
@c.first.set(:a=>2, :b=>4).save
|
53
|
+
@ds2.all.should == [{:a=>2, :b=>4}]
|
54
|
+
end
|
55
|
+
|
56
|
+
specify "should handle saving after modifying just the primary key field" do
|
57
|
+
@c.first.set(:a=>2).save
|
58
|
+
@ds2.all.should == [{:a=>2, :b=>3}]
|
59
|
+
end
|
60
|
+
|
61
|
+
specify "should handle saving after updating the primary key" do
|
62
|
+
@c.first.update(:a=>2).update(:b=>4).set(:b=>5).save
|
63
|
+
@ds2.all.should == [{:a=>2, :b=>5}]
|
64
|
+
end
|
65
|
+
end
|
@@ -944,10 +944,10 @@ describe "Model#save" do
|
|
944
944
|
before do
|
945
945
|
@c = Class.new(Sequel::Model(:people))
|
946
946
|
@c.class_eval do
|
947
|
-
columns :id
|
947
|
+
columns :id, :x
|
948
948
|
|
949
|
-
validates_each :
|
950
|
-
o.errors[a] << 'blah' unless v ==
|
949
|
+
validates_each :x do |o, a, v|
|
950
|
+
o.errors[a] << 'blah' unless v == 7
|
951
951
|
end
|
952
952
|
end
|
953
953
|
@m = @c.load(:id => 4, :x=>6)
|
@@ -960,10 +960,10 @@ describe "Model#save" do
|
|
960
960
|
@m.save
|
961
961
|
MODEL_DB.sqls.should be_empty
|
962
962
|
|
963
|
-
@m.
|
963
|
+
@m.x = 7
|
964
964
|
@m.should be_valid
|
965
965
|
@m.save.should_not be_false
|
966
|
-
MODEL_DB.sqls.should == ['UPDATE people SET x =
|
966
|
+
MODEL_DB.sqls.should == ['UPDATE people SET x = 7 WHERE (id = 4)']
|
967
967
|
end
|
968
968
|
|
969
969
|
specify "should skip validations if the :validate=>false option is used" do
|