sequel 4.9.0 → 4.10.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.
- checksums.yaml +4 -4
- data/CHANGELOG +79 -1
- data/MIT-LICENSE +1 -1
- data/README.rdoc +1 -1
- data/Rakefile +2 -12
- data/bin/sequel +1 -0
- data/doc/advanced_associations.rdoc +82 -25
- data/doc/association_basics.rdoc +21 -22
- data/doc/core_extensions.rdoc +1 -1
- data/doc/opening_databases.rdoc +7 -0
- data/doc/release_notes/4.10.0.txt +226 -0
- data/doc/security.rdoc +1 -0
- data/doc/testing.rdoc +7 -7
- data/doc/transactions.rdoc +8 -0
- data/lib/sequel/adapters/jdbc.rb +160 -168
- data/lib/sequel/adapters/jdbc/db2.rb +17 -18
- data/lib/sequel/adapters/jdbc/derby.rb +5 -28
- data/lib/sequel/adapters/jdbc/h2.rb +11 -22
- data/lib/sequel/adapters/jdbc/hsqldb.rb +31 -18
- data/lib/sequel/adapters/jdbc/jtds.rb +0 -15
- data/lib/sequel/adapters/jdbc/oracle.rb +36 -35
- data/lib/sequel/adapters/jdbc/postgresql.rb +72 -90
- data/lib/sequel/adapters/jdbc/sqlanywhere.rb +18 -16
- data/lib/sequel/adapters/jdbc/sqlite.rb +7 -0
- data/lib/sequel/adapters/jdbc/sqlserver.rb +10 -30
- data/lib/sequel/adapters/jdbc/transactions.rb +5 -6
- data/lib/sequel/adapters/openbase.rb +1 -7
- data/lib/sequel/adapters/postgres.rb +1 -1
- data/lib/sequel/adapters/shared/access.rb +3 -6
- data/lib/sequel/adapters/shared/cubrid.rb +24 -9
- data/lib/sequel/adapters/shared/db2.rb +13 -5
- data/lib/sequel/adapters/shared/firebird.rb +16 -16
- data/lib/sequel/adapters/shared/informix.rb +2 -5
- data/lib/sequel/adapters/shared/mssql.rb +72 -63
- data/lib/sequel/adapters/shared/mysql.rb +72 -40
- data/lib/sequel/adapters/shared/oracle.rb +27 -15
- data/lib/sequel/adapters/shared/postgres.rb +24 -44
- data/lib/sequel/adapters/shared/progress.rb +1 -5
- data/lib/sequel/adapters/shared/sqlanywhere.rb +26 -18
- data/lib/sequel/adapters/shared/sqlite.rb +21 -6
- data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -1
- data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +8 -2
- data/lib/sequel/adapters/utils/split_alter_table.rb +8 -0
- data/lib/sequel/core.rb +14 -9
- data/lib/sequel/database/dataset_defaults.rb +1 -0
- data/lib/sequel/database/misc.rb +12 -0
- data/lib/sequel/database/query.rb +4 -1
- data/lib/sequel/database/schema_methods.rb +3 -2
- data/lib/sequel/database/transactions.rb +47 -17
- data/lib/sequel/dataset/features.rb +12 -2
- data/lib/sequel/dataset/mutation.rb +2 -0
- data/lib/sequel/dataset/placeholder_literalizer.rb +12 -4
- data/lib/sequel/dataset/prepared_statements.rb +6 -0
- data/lib/sequel/dataset/query.rb +1 -1
- data/lib/sequel/dataset/sql.rb +132 -70
- data/lib/sequel/extensions/columns_introspection.rb +1 -1
- data/lib/sequel/extensions/null_dataset.rb +8 -4
- data/lib/sequel/extensions/pg_array.rb +4 -4
- data/lib/sequel/extensions/pg_row.rb +1 -0
- data/lib/sequel/model/associations.rb +468 -188
- data/lib/sequel/model/base.rb +88 -13
- data/lib/sequel/plugins/association_pks.rb +23 -64
- data/lib/sequel/plugins/auto_validations.rb +3 -2
- data/lib/sequel/plugins/dataset_associations.rb +1 -3
- data/lib/sequel/plugins/many_through_many.rb +18 -65
- data/lib/sequel/plugins/pg_array_associations.rb +97 -86
- data/lib/sequel/plugins/prepared_statements.rb +2 -1
- data/lib/sequel/plugins/prepared_statements_associations.rb +36 -27
- data/lib/sequel/plugins/rcte_tree.rb +12 -16
- data/lib/sequel/plugins/sharding.rb +21 -3
- data/lib/sequel/plugins/single_table_inheritance.rb +2 -1
- data/lib/sequel/plugins/subclasses.rb +1 -9
- data/lib/sequel/plugins/tactical_eager_loading.rb +9 -0
- data/lib/sequel/plugins/tree.rb +2 -2
- data/lib/sequel/plugins/validation_class_methods.rb +1 -1
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/mssql_spec.rb +57 -15
- data/spec/adapters/mysql_spec.rb +11 -0
- data/spec/bin_spec.rb +2 -2
- data/spec/core/database_spec.rb +38 -4
- data/spec/core/dataset_spec.rb +45 -7
- data/spec/core/placeholder_literalizer_spec.rb +17 -0
- data/spec/core/schema_spec.rb +6 -1
- data/spec/extensions/active_model_spec.rb +18 -9
- data/spec/extensions/association_pks_spec.rb +20 -18
- data/spec/extensions/association_proxies_spec.rb +9 -9
- data/spec/extensions/auto_validations_spec.rb +6 -0
- data/spec/extensions/columns_introspection_spec.rb +1 -0
- data/spec/extensions/constraint_validations_spec.rb +3 -1
- data/spec/extensions/many_through_many_spec.rb +191 -111
- data/spec/extensions/pg_array_associations_spec.rb +133 -103
- data/spec/extensions/prepared_statements_associations_spec.rb +23 -4
- data/spec/extensions/rcte_tree_spec.rb +35 -27
- data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -1
- data/spec/extensions/sharding_spec.rb +2 -2
- data/spec/extensions/tactical_eager_loading_spec.rb +4 -0
- data/spec/extensions/to_dot_spec.rb +1 -0
- data/spec/extensions/touch_spec.rb +2 -2
- data/spec/integration/associations_test.rb +130 -37
- data/spec/integration/dataset_test.rb +17 -0
- data/spec/integration/model_test.rb +17 -0
- data/spec/integration/schema_test.rb +14 -0
- data/spec/integration/transaction_test.rb +25 -1
- data/spec/model/association_reflection_spec.rb +63 -24
- data/spec/model/associations_spec.rb +104 -57
- data/spec/model/base_spec.rb +14 -1
- data/spec/model/class_dataset_methods_spec.rb +1 -0
- data/spec/model/eager_loading_spec.rb +221 -74
- data/spec/model/model_spec.rb +119 -1
- metadata +4 -2
data/spec/model/model_spec.rb
CHANGED
@@ -521,7 +521,125 @@ describe Sequel::Model, ".finder" do
|
|
521
521
|
@db.sqls.should == ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1"]
|
522
522
|
end
|
523
523
|
|
524
|
-
specify "should raise error when
|
524
|
+
specify "should raise error when calling with the wrong arity" do
|
525
|
+
@c.finder :foo
|
526
|
+
proc{@c.first_foo(1)}.should raise_error
|
527
|
+
proc{@c.first_foo(1,2,3)}.should raise_error
|
528
|
+
end
|
529
|
+
end
|
530
|
+
|
531
|
+
describe Sequel::Model, ".prepared_finder" do
|
532
|
+
before do
|
533
|
+
@h = {:id=>1}
|
534
|
+
@db = Sequel.mock(:fetch=>@h)
|
535
|
+
@db.extend_datasets do
|
536
|
+
def select_sql
|
537
|
+
sql = super
|
538
|
+
sql << ' -- prepared' if is_a?(Sequel::Dataset::PreparedStatementMethods)
|
539
|
+
sql
|
540
|
+
end
|
541
|
+
end
|
542
|
+
@c = Class.new(Sequel::Model(@db[:items]))
|
543
|
+
@c.instance_eval do
|
544
|
+
def foo(a, b)
|
545
|
+
where(:bar=>a).order(b)
|
546
|
+
end
|
547
|
+
end
|
548
|
+
@o = @c.load(@h)
|
549
|
+
@db.sqls
|
550
|
+
end
|
551
|
+
|
552
|
+
specify "should create a method that calls the method given and returns the first instance" do
|
553
|
+
@c.prepared_finder :foo
|
554
|
+
@c.first_foo(1, 2).should == @o
|
555
|
+
@c.first_foo(3, 4).should == @o
|
556
|
+
@db.sqls.should == ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
557
|
+
end
|
558
|
+
|
559
|
+
specify "should work correctly when subclassing" do
|
560
|
+
@c.prepared_finder(:foo)
|
561
|
+
@sc = Class.new(@c)
|
562
|
+
@sc.set_dataset :foos
|
563
|
+
@db.sqls
|
564
|
+
@sc.first_foo(1, 2).should == @sc.load(@h)
|
565
|
+
@sc.first_foo(3, 4).should == @sc.load(@h)
|
566
|
+
@db.sqls.should == ["SELECT * FROM foos WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
567
|
+
end
|
568
|
+
|
569
|
+
specify "should work correctly when dataset is modified" do
|
570
|
+
@c.prepared_finder(:foo)
|
571
|
+
@c.first_foo(1, 2).should == @o
|
572
|
+
@c.set_dataset :foos
|
573
|
+
@c.first_foo(3, 4).should == @o
|
574
|
+
@db.sqls.should == ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM foos LIMIT 1", "SELECT * FROM foos WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
575
|
+
end
|
576
|
+
|
577
|
+
specify "should create a method based on the given block if no method symbol provided" do
|
578
|
+
@c.prepared_finder(:name=>:first_foo){|a1| where(:id=>a1).limit(1)}
|
579
|
+
@c.first_foo(1).should == @o
|
580
|
+
@db.sqls.should == ["SELECT * FROM items WHERE (id = 1) LIMIT 1 -- prepared"]
|
581
|
+
end
|
582
|
+
|
583
|
+
specify "should raise an error if both a block and method symbol given" do
|
584
|
+
proc{@c.prepared_finder(:foo, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.should raise_error(Sequel::Error)
|
585
|
+
end
|
586
|
+
|
587
|
+
specify "should raise an error if two option hashes are provided" do
|
588
|
+
proc{@c.prepared_finder({:name2=>:foo}, :name=>:first_foo){|pl, ds| ds.where(pl.arg)}}.should raise_error(Sequel::Error)
|
589
|
+
end
|
590
|
+
|
591
|
+
specify "should support :type option" do
|
592
|
+
@c.prepared_finder :foo, :type=>:all
|
593
|
+
@c.prepared_finder :foo, :type=>:each
|
594
|
+
|
595
|
+
a = []
|
596
|
+
@c.all_foo(1, 2){|r| a << r}.should == [@o]
|
597
|
+
a.should == [@o]
|
598
|
+
|
599
|
+
a = []
|
600
|
+
@c.each_foo(3, 4){|r| a << r}
|
601
|
+
a.should == [@o]
|
602
|
+
|
603
|
+
@db.sqls.should == ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 -- prepared"]
|
604
|
+
end
|
605
|
+
|
606
|
+
specify "should support :name option" do
|
607
|
+
@c.prepared_finder :foo, :name=>:find_foo
|
608
|
+
@c.find_foo(1, 2).should == @o
|
609
|
+
@c.find_foo(3, 4).should == @o
|
610
|
+
@db.sqls.should == ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
611
|
+
end
|
612
|
+
|
613
|
+
specify "should support :arity option" do
|
614
|
+
def @c.foobar(*b)
|
615
|
+
ds = dataset
|
616
|
+
b.each_with_index do |a, i|
|
617
|
+
ds = ds.where(i=>a)
|
618
|
+
end
|
619
|
+
ds
|
620
|
+
end
|
621
|
+
@c.prepared_finder :foobar, :arity=>1, :name=>:find_foobar_1
|
622
|
+
@c.prepared_finder :foobar, :arity=>2, :name=>:find_foobar_2
|
623
|
+
@c.find_foobar_1(:a)
|
624
|
+
@c.find_foobar_2(:a, :b)
|
625
|
+
@db.sqls.should == ["SELECT * FROM items WHERE (0 = a) LIMIT 1 -- prepared", "SELECT * FROM items WHERE ((0 = a) AND (1 = b)) LIMIT 1 -- prepared"]
|
626
|
+
end
|
627
|
+
|
628
|
+
specify "should support :mod option" do
|
629
|
+
m = Module.new
|
630
|
+
@c.prepared_finder :foo, :mod=>m
|
631
|
+
proc{@c.first_foo}.should raise_error
|
632
|
+
@c.extend m
|
633
|
+
@c.first_foo(1, 2).should == @o
|
634
|
+
@c.first_foo(3, 4).should == @o
|
635
|
+
@db.sqls.should == ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared", "SELECT * FROM items WHERE (bar = 3) ORDER BY 4 LIMIT 1 -- prepared"]
|
636
|
+
end
|
637
|
+
|
638
|
+
specify "should handle models with names" do
|
639
|
+
def @c.name; 'foobar' end
|
640
|
+
@c.prepared_finder :foo
|
641
|
+
@c.first_foo(1, 2).should == @o
|
642
|
+
@db.sqls.should == ["SELECT * FROM items WHERE (bar = 1) ORDER BY 2 LIMIT 1 -- prepared"]
|
525
643
|
end
|
526
644
|
end
|
527
645
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: The Database Toolkit for Ruby
|
14
14
|
email: code@jeremyevans.net
|
@@ -126,6 +126,7 @@ extra_rdoc_files:
|
|
126
126
|
- doc/release_notes/4.7.0.txt
|
127
127
|
- doc/release_notes/4.8.0.txt
|
128
128
|
- doc/release_notes/4.9.0.txt
|
129
|
+
- doc/release_notes/4.10.0.txt
|
129
130
|
files:
|
130
131
|
- CHANGELOG
|
131
132
|
- MIT-LICENSE
|
@@ -222,6 +223,7 @@ files:
|
|
222
223
|
- doc/release_notes/3.9.0.txt
|
223
224
|
- doc/release_notes/4.0.0.txt
|
224
225
|
- doc/release_notes/4.1.0.txt
|
226
|
+
- doc/release_notes/4.10.0.txt
|
225
227
|
- doc/release_notes/4.2.0.txt
|
226
228
|
- doc/release_notes/4.3.0.txt
|
227
229
|
- doc/release_notes/4.4.0.txt
|