sequel 4.1.1 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +32 -0
- data/doc/opening_databases.rdoc +4 -0
- data/doc/release_notes/4.2.0.txt +129 -0
- data/lib/sequel/adapters/jdbc/hsqldb.rb +5 -0
- data/lib/sequel/adapters/mysql2.rb +2 -1
- data/lib/sequel/adapters/postgres.rb +8 -4
- data/lib/sequel/adapters/shared/db2.rb +5 -0
- data/lib/sequel/adapters/shared/mssql.rb +15 -4
- data/lib/sequel/adapters/shared/mysql.rb +1 -0
- data/lib/sequel/adapters/shared/oracle.rb +1 -1
- data/lib/sequel/adapters/shared/postgres.rb +10 -0
- data/lib/sequel/adapters/shared/sqlite.rb +5 -0
- data/lib/sequel/database/features.rb +6 -1
- data/lib/sequel/database/schema_methods.rb +3 -7
- data/lib/sequel/dataset/actions.rb +3 -4
- data/lib/sequel/dataset/features.rb +5 -0
- data/lib/sequel/dataset/misc.rb +28 -3
- data/lib/sequel/dataset/mutation.rb +37 -11
- data/lib/sequel/dataset/prepared_statements.rb +1 -3
- data/lib/sequel/dataset/query.rb +12 -3
- data/lib/sequel/dataset/sql.rb +12 -6
- data/lib/sequel/deprecated.rb +1 -1
- data/lib/sequel/extensions/columns_introspection.rb +1 -1
- data/lib/sequel/extensions/core_extensions.rb +0 -2
- data/lib/sequel/extensions/empty_array_ignore_nulls.rb +1 -1
- data/lib/sequel/extensions/filter_having.rb +1 -1
- data/lib/sequel/extensions/from_block.rb +31 -0
- data/lib/sequel/extensions/graph_each.rb +1 -1
- data/lib/sequel/extensions/hash_aliases.rb +1 -1
- data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +78 -0
- data/lib/sequel/extensions/pagination.rb +1 -1
- data/lib/sequel/extensions/pg_loose_count.rb +32 -0
- data/lib/sequel/extensions/pg_static_cache_updater.rb +133 -0
- data/lib/sequel/extensions/pretty_table.rb +1 -1
- data/lib/sequel/extensions/query.rb +3 -1
- data/lib/sequel/extensions/query_literals.rb +1 -1
- data/lib/sequel/extensions/select_remove.rb +1 -1
- data/lib/sequel/extensions/sequel_3_dataset_methods.rb +1 -1
- data/lib/sequel/extensions/set_overrides.rb +1 -1
- data/lib/sequel/model.rb +1 -1
- data/lib/sequel/model/base.rb +20 -6
- data/lib/sequel/model/exceptions.rb +1 -1
- data/lib/sequel/plugins/composition.rb +9 -0
- data/lib/sequel/plugins/dirty.rb +19 -8
- data/lib/sequel/plugins/instance_filters.rb +9 -0
- data/lib/sequel/plugins/serialization.rb +9 -0
- data/lib/sequel/plugins/serialization_modification_detection.rb +9 -0
- data/lib/sequel/plugins/static_cache.rb +96 -28
- data/lib/sequel/version.rb +2 -2
- data/spec/adapters/mssql_spec.rb +1 -1
- data/spec/adapters/postgres_spec.rb +70 -0
- data/spec/core/dataset_spec.rb +58 -1
- data/spec/core/deprecated_spec.rb +1 -1
- data/spec/core/schema_spec.rb +18 -0
- data/spec/extensions/composition_spec.rb +7 -0
- data/spec/extensions/dirty_spec.rb +9 -0
- data/spec/extensions/from_block_spec.rb +21 -0
- data/spec/extensions/instance_filters_spec.rb +6 -0
- data/spec/extensions/pg_loose_count_spec.rb +17 -0
- data/spec/extensions/pg_static_cache_updater_spec.rb +80 -0
- data/spec/extensions/query_spec.rb +8 -0
- data/spec/extensions/serialization_modification_detection_spec.rb +9 -0
- data/spec/extensions/serialization_spec.rb +7 -0
- data/spec/extensions/set_overrides_spec.rb +12 -0
- data/spec/extensions/static_cache_spec.rb +314 -154
- data/spec/integration/dataset_test.rb +12 -2
- data/spec/integration/schema_test.rb +13 -0
- data/spec/model/record_spec.rb +74 -0
- metadata +13 -3
@@ -59,6 +59,16 @@ describe "Simple Dataset operations" do
|
|
59
59
|
@ds.join(:items___b, :id=>:id).select_all(:items).all.should == [{:id=>1, :number=>10}]
|
60
60
|
end
|
61
61
|
|
62
|
+
specify "should handle LATERAL subqueries correctly" do
|
63
|
+
@ds << {:number=>20}
|
64
|
+
@ds.from(:items___i, @ds.where(:items__number=>:i__number).lateral).select_order_map([:i__number___n, :t1__number]).should == [[10, 10], [20, 20]]
|
65
|
+
@ds.from(:items___i).cross_join(@ds.where(:items__number=>:i__number).lateral).select_order_map([:i__number___n, :t1__number]).should == [[10, 10], [20, 20]]
|
66
|
+
@ds.from(:items___i).join(@ds.where(:items__number=>:i__number).lateral, 1=>1).select_order_map([:i__number___n, :t1__number]).should == [[10, 10], [20, 20]]
|
67
|
+
@ds.from(:items___i).join(@ds.where(:items__number=>:i__number).lateral, 1=>0).select_order_map([:i__number___n, :t1__number]).should == []
|
68
|
+
@ds.from(:items___i).left_join(@ds.from(:items___i2).where(:i2__number=>:i__number).lateral, 1=>1).select_order_map([:i__number___n, :t1__number]).should == [[10, 10], [20, 20]]
|
69
|
+
@ds.from(:items___i).left_join(@ds.from(:items___i2).where(:i2__number=>:i__number).lateral, 1=>0).select_order_map([:i__number___n, :t1__number]).should == [[10, nil], [20, nil]]
|
70
|
+
end if DB.dataset.supports_lateral_subqueries?
|
71
|
+
|
62
72
|
specify "should correctly deal with qualified columns and subselects" do
|
63
73
|
@ds.from_self(:alias=>:a).select(:a__id, Sequel.qualify(:a, :number)).all.should == [{:id=>1, :number=>10}]
|
64
74
|
@ds.join(@ds.as(:a), :id=>:id).select(:a__id, Sequel.qualify(:a, :number)).all.should == [{:id=>1, :number=>10}]
|
@@ -568,9 +578,9 @@ if DB.dataset.supports_cte?
|
|
568
578
|
end
|
569
579
|
|
570
580
|
cspecify "should give correct results for recursive WITH", :db2 do
|
571
|
-
ds = @db[:t].select(:i___id, :pi___parent_id).with_recursive(:t, @ds.filter(:parent_id=>nil), @ds.join(:t, :i=>:parent_id).select(:i1__id, :i1__parent_id), :args=>[:i, :pi])
|
581
|
+
ds = @db[:t].select(:i___id, :pi___parent_id).with_recursive(:t, @ds.filter(:parent_id=>nil), @ds.join(:t, :i=>:parent_id).select(:i1__id, :i1__parent_id), :args=>[:i, :pi]).order(:id)
|
572
582
|
ds.all.should == [{:parent_id=>nil, :id=>1}, {:parent_id=>nil, :id=>2}, {:parent_id=>1, :id=>3}, {:parent_id=>1, :id=>4}, {:parent_id=>3, :id=>5}, {:parent_id=>5, :id=>6}]
|
573
|
-
ps = @db[:t].select(:i___id, :pi___parent_id).with_recursive(:t, @ds.filter(:parent_id=>:$n), @ds.join(:t, :i=>:parent_id).filter(:t__i=>:parent_id).select(:i1__id, :i1__parent_id), :args=>[:i, :pi]).prepare(:select, :cte_sel)
|
583
|
+
ps = @db[:t].select(:i___id, :pi___parent_id).with_recursive(:t, @ds.filter(:parent_id=>:$n), @ds.join(:t, :i=>:parent_id).filter(:t__i=>:parent_id).select(:i1__id, :i1__parent_id), :args=>[:i, :pi]).order(:id).prepare(:select, :cte_sel)
|
574
584
|
ps.call(:n=>1).should == [{:id=>3, :parent_id=>1}, {:id=>4, :parent_id=>1}, {:id=>5, :parent_id=>3}, {:id=>6, :parent_id=>5}]
|
575
585
|
ps.call(:n=>3).should == [{:id=>5, :parent_id=>3}, {:id=>6, :parent_id=>5}]
|
576
586
|
ps.call(:n=>5).should == [{:id=>6, :parent_id=>5}]
|
@@ -175,6 +175,11 @@ describe "Database index parsing" do
|
|
175
175
|
DB.create_table!(:items){Integer :n; Integer :a; primary_key [:n, :a]}
|
176
176
|
DB.indexes(:items).should == {}
|
177
177
|
end
|
178
|
+
|
179
|
+
cspecify "should not include partial indexes", :sqlite do
|
180
|
+
DB.create_table!(:items){Integer :n; Integer :a; index :n, :where=>proc{n > 10}}
|
181
|
+
DB.indexes(:items).should == {}
|
182
|
+
end if DB.supports_partial_indexes?
|
178
183
|
end if DB.supports_index_parsing?
|
179
184
|
|
180
185
|
describe "Database foreign key parsing" do
|
@@ -352,6 +357,14 @@ describe "Database schema modifiers" do
|
|
352
357
|
@ds.columns!.should == [:number]
|
353
358
|
end
|
354
359
|
|
360
|
+
specify "should allow creating partial indexes with tables" do
|
361
|
+
@db.create_table!(:items){Integer :number; index :number, :where=>proc{number > 10}}
|
362
|
+
@db.table_exists?(:items).should == true
|
363
|
+
@db.schema(:items, :reload=>true).map{|x| x.first}.should == [:number]
|
364
|
+
@ds.insert([10])
|
365
|
+
@ds.columns!.should == [:number]
|
366
|
+
end if DB.supports_partial_indexes?
|
367
|
+
|
355
368
|
specify "should handle combination of default, unique, and not null" do
|
356
369
|
@db.create_table!(:items){Integer :number, :default=>0, :null=>false, :unique=>true}
|
357
370
|
@db.table_exists?(:items).should == true
|
data/spec/model/record_spec.rb
CHANGED
@@ -406,6 +406,80 @@ describe "Model#freeze" do
|
|
406
406
|
end
|
407
407
|
end
|
408
408
|
|
409
|
+
describe "Model#dup" do
|
410
|
+
before do
|
411
|
+
@Album = Class.new(Sequel::Model(:albums))
|
412
|
+
@o = @Album.load(:id=>1)
|
413
|
+
DB.sqls
|
414
|
+
end
|
415
|
+
|
416
|
+
it "should be equal to existing object" do
|
417
|
+
@o.dup.should == @o
|
418
|
+
@o.dup.values.should == @o.values
|
419
|
+
@o.dup.changed_columns.should == @o.changed_columns
|
420
|
+
@o.dup.errors.should == @o.errors
|
421
|
+
@o.dup.this.should == @o.this
|
422
|
+
end
|
423
|
+
|
424
|
+
it "should not use identical structures" do
|
425
|
+
@o.dup.should_not equal(@o)
|
426
|
+
@o.dup.values.should_not equal(@o.values)
|
427
|
+
@o.dup.changed_columns.should_not equal(@o.changed_columns)
|
428
|
+
@o.dup.errors.should_not equal(@o.errors)
|
429
|
+
@o.dup.this.should_not equal(@o.this)
|
430
|
+
end
|
431
|
+
|
432
|
+
it "should keep new status" do
|
433
|
+
@o.dup.new?.should be_false
|
434
|
+
@Album.new.dup.new?.should be_true
|
435
|
+
end
|
436
|
+
|
437
|
+
it "should not copy frozen status" do
|
438
|
+
@o.freeze.dup.should_not be_frozen
|
439
|
+
@o.freeze.dup.values.should_not be_frozen
|
440
|
+
@o.freeze.dup.changed_columns.should_not be_frozen
|
441
|
+
@o.freeze.dup.errors.should_not be_frozen
|
442
|
+
@o.freeze.dup.this.should_not be_frozen
|
443
|
+
end
|
444
|
+
end
|
445
|
+
|
446
|
+
describe "Model#clone" do
|
447
|
+
before do
|
448
|
+
@Album = Class.new(Sequel::Model(:albums))
|
449
|
+
@o = @Album.load(:id=>1)
|
450
|
+
DB.sqls
|
451
|
+
end
|
452
|
+
|
453
|
+
it "should be equal to existing object" do
|
454
|
+
@o.clone.should == @o
|
455
|
+
@o.clone.values.should == @o.values
|
456
|
+
@o.clone.changed_columns.should == @o.changed_columns
|
457
|
+
@o.clone.errors.should == @o.errors
|
458
|
+
@o.clone.this.should == @o.this
|
459
|
+
end
|
460
|
+
|
461
|
+
it "should not use identical structures" do
|
462
|
+
@o.clone.should_not equal(@o)
|
463
|
+
@o.clone.values.should_not equal(@o.values)
|
464
|
+
@o.clone.changed_columns.should_not equal(@o.changed_columns)
|
465
|
+
@o.clone.errors.should_not equal(@o.errors)
|
466
|
+
@o.clone.this.should_not equal(@o.this)
|
467
|
+
end
|
468
|
+
|
469
|
+
it "should keep new status" do
|
470
|
+
@o.clone.new?.should be_false
|
471
|
+
@Album.new.clone.new?.should be_true
|
472
|
+
end
|
473
|
+
|
474
|
+
it "should copy frozen status" do
|
475
|
+
@o.freeze.clone.should be_frozen
|
476
|
+
@o.freeze.clone.values.should be_frozen
|
477
|
+
@o.freeze.clone.changed_columns.should be_frozen
|
478
|
+
@o.freeze.clone.errors.should be_frozen
|
479
|
+
@o.freeze.clone.this.should be_frozen
|
480
|
+
end
|
481
|
+
end
|
482
|
+
|
409
483
|
describe "Model#marshallable" do
|
410
484
|
before do
|
411
485
|
class ::Album < Sequel::Model
|
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.2.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: 2013-
|
11
|
+
date: 2013-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: The Database Toolkit for Ruby
|
14
14
|
email: code@jeremyevans.net
|
@@ -115,6 +115,7 @@ extra_rdoc_files:
|
|
115
115
|
- doc/release_notes/3.48.0.txt
|
116
116
|
- doc/release_notes/4.0.0.txt
|
117
117
|
- doc/release_notes/4.1.0.txt
|
118
|
+
- doc/release_notes/4.2.0.txt
|
118
119
|
files:
|
119
120
|
- MIT-LICENSE
|
120
121
|
- CHANGELOG
|
@@ -217,6 +218,7 @@ files:
|
|
217
218
|
- doc/release_notes/3.48.0.txt
|
218
219
|
- doc/release_notes/4.0.0.txt
|
219
220
|
- doc/release_notes/4.1.0.txt
|
221
|
+
- doc/release_notes/4.2.0.txt
|
220
222
|
- spec/adapters/firebird_spec.rb
|
221
223
|
- spec/adapters/informix_spec.rb
|
222
224
|
- spec/adapters/mssql_spec.rb
|
@@ -307,8 +309,11 @@ files:
|
|
307
309
|
- spec/extensions/pg_array_associations_spec.rb
|
308
310
|
- spec/extensions/schema_caching_spec.rb
|
309
311
|
- spec/extensions/pg_json_ops_spec.rb
|
312
|
+
- spec/extensions/from_block_spec.rb
|
310
313
|
- spec/extensions/select_remove_spec.rb
|
314
|
+
- spec/extensions/pg_loose_count_spec.rb
|
311
315
|
- spec/extensions/query_literals_spec.rb
|
316
|
+
- spec/extensions/pg_static_cache_updater_spec.rb
|
312
317
|
- spec/extensions/pg_inet_spec.rb
|
313
318
|
- spec/extensions/eval_inspect_spec.rb
|
314
319
|
- spec/extensions/pg_range_spec.rb
|
@@ -555,6 +560,10 @@ files:
|
|
555
560
|
- lib/sequel/extensions/sequel_3_dataset_methods.rb
|
556
561
|
- lib/sequel/extensions/pg_json_ops.rb
|
557
562
|
- lib/sequel/extensions/empty_array_ignore_nulls.rb
|
563
|
+
- lib/sequel/extensions/from_block.rb
|
564
|
+
- lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb
|
565
|
+
- lib/sequel/extensions/pg_loose_count.rb
|
566
|
+
- lib/sequel/extensions/pg_static_cache_updater.rb
|
558
567
|
- lib/sequel/version.rb
|
559
568
|
- lib/sequel/model.rb
|
560
569
|
- lib/sequel/model/associations.rb
|
@@ -628,7 +637,8 @@ files:
|
|
628
637
|
- lib/sequel/ast_transformer.rb
|
629
638
|
- lib/sequel/no_core_ext.rb
|
630
639
|
homepage: http://sequel.rubyforge.org
|
631
|
-
licenses:
|
640
|
+
licenses:
|
641
|
+
- MIT
|
632
642
|
metadata: {}
|
633
643
|
post_install_message:
|
634
644
|
rdoc_options:
|