sequel 4.1.1 → 4.2.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 +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:
|