sequel 3.42.0 → 3.43.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/CHANGELOG +40 -0
  2. data/MIT-LICENSE +1 -1
  3. data/Rakefile +1 -1
  4. data/doc/opening_databases.rdoc +2 -2
  5. data/doc/prepared_statements.rdoc +7 -0
  6. data/doc/release_notes/3.43.0.txt +105 -0
  7. data/doc/schema_modification.rdoc +19 -0
  8. data/lib/sequel/adapters/do/mysql.rb +1 -1
  9. data/lib/sequel/adapters/jdbc.rb +13 -8
  10. data/lib/sequel/adapters/jdbc/hsqldb.rb +5 -0
  11. data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
  12. data/lib/sequel/adapters/jdbc/oracle.rb +6 -0
  13. data/lib/sequel/adapters/jdbc/postgresql.rb +9 -3
  14. data/lib/sequel/adapters/mysql.rb +1 -1
  15. data/lib/sequel/adapters/mysql2.rb +1 -1
  16. data/lib/sequel/adapters/oracle.rb +1 -1
  17. data/lib/sequel/adapters/postgres.rb +4 -2
  18. data/lib/sequel/adapters/shared/db2.rb +12 -0
  19. data/lib/sequel/adapters/shared/mssql.rb +9 -5
  20. data/lib/sequel/adapters/shared/postgres.rb +2 -0
  21. data/lib/sequel/adapters/swift/mysql.rb +1 -1
  22. data/lib/sequel/core.rb +2 -2
  23. data/lib/sequel/database.rb +0 -2
  24. data/lib/sequel/database/query.rb +20 -5
  25. data/lib/sequel/database/schema_generator.rb +5 -0
  26. data/lib/sequel/database/schema_methods.rb +5 -0
  27. data/lib/sequel/dataset.rb +0 -2
  28. data/lib/sequel/dataset/actions.rb +25 -2
  29. data/lib/sequel/dataset/misc.rb +1 -1
  30. data/lib/sequel/dataset/sql.rb +28 -6
  31. data/lib/sequel/extensions/core_refinements.rb +221 -0
  32. data/lib/sequel/extensions/date_arithmetic.rb +194 -0
  33. data/lib/sequel/extensions/meta_def.rb +30 -0
  34. data/lib/sequel/extensions/migration.rb +5 -0
  35. data/lib/sequel/extensions/null_dataset.rb +2 -0
  36. data/lib/sequel/extensions/pagination.rb +2 -0
  37. data/lib/sequel/extensions/pg_array.rb +12 -1
  38. data/lib/sequel/extensions/pg_array_ops.rb +10 -1
  39. data/lib/sequel/extensions/pg_hstore.rb +12 -1
  40. data/lib/sequel/extensions/pg_hstore_ops.rb +10 -1
  41. data/lib/sequel/extensions/pg_json.rb +18 -1
  42. data/lib/sequel/extensions/pg_range.rb +12 -1
  43. data/lib/sequel/extensions/pg_range_ops.rb +10 -1
  44. data/lib/sequel/extensions/pg_row.rb +18 -2
  45. data/lib/sequel/extensions/pg_row_ops.rb +10 -1
  46. data/lib/sequel/extensions/query.rb +2 -0
  47. data/lib/sequel/model/associations.rb +5 -13
  48. data/lib/sequel/model/base.rb +4 -6
  49. data/lib/sequel/plugins/boolean_readers.rb +4 -2
  50. data/lib/sequel/plugins/many_through_many.rb +23 -0
  51. data/lib/sequel/plugins/string_stripper.rb +53 -3
  52. data/lib/sequel/plugins/validation_class_methods.rb +5 -0
  53. data/lib/sequel/sql.rb +3 -3
  54. data/lib/sequel/version.rb +1 -1
  55. data/spec/adapters/db2_spec.rb +19 -8
  56. data/spec/adapters/mssql_spec.rb +1 -2
  57. data/spec/adapters/mysql_spec.rb +2 -2
  58. data/spec/adapters/postgres_spec.rb +29 -3
  59. data/spec/core/dataset_spec.rb +107 -0
  60. data/spec/core/expression_filters_spec.rb +5 -0
  61. data/spec/core/schema_spec.rb +14 -3
  62. data/spec/core/spec_helper.rb +2 -0
  63. data/spec/extensions/core_refinements_spec.rb +551 -0
  64. data/spec/extensions/date_arithmetic_spec.rb +150 -0
  65. data/spec/extensions/force_encoding_spec.rb +1 -1
  66. data/spec/extensions/meta_def_spec.rb +21 -0
  67. data/spec/extensions/spec_helper.rb +5 -0
  68. data/spec/extensions/string_stripper_spec.rb +44 -2
  69. data/spec/integration/associations_test.rb +2 -2
  70. data/spec/integration/plugin_test.rb +90 -0
  71. data/spec/integration/schema_test.rb +1 -1
  72. data/spec/model/association_reflection_spec.rb +4 -4
  73. data/spec/model/associations_spec.rb +2 -2
  74. data/spec/model/base_spec.rb +2 -2
  75. data/spec/model/eager_loading_spec.rb +5 -5
  76. data/spec/model/hooks_spec.rb +4 -4
  77. data/spec/model/model_spec.rb +9 -9
  78. data/spec/model/record_spec.rb +15 -18
  79. metadata +12 -5
  80. data/lib/sequel/metaprogramming.rb +0 -13
@@ -385,19 +385,19 @@ describe "Model around filters" do
385
385
  @c.raise_on_save_failure = false
386
386
 
387
387
  o = @c.load(:id => 1)
388
- o.meta_def(:around_save){}
388
+ def o.around_save() end
389
389
  o.save.should == nil
390
390
 
391
391
  o = @c.load(:id => 1)
392
- o.meta_def(:around_update){}
392
+ def o.around_update() end
393
393
  o.save.should == nil
394
394
 
395
395
  o = @c.new
396
- o.meta_def(:around_create){}
396
+ def o.around_create() end
397
397
  o.save.should == nil
398
398
 
399
399
  o = @c.new
400
- o.meta_def(:around_validation){}
400
+ def o.around_validation() end
401
401
  o.save.should == nil
402
402
  end
403
403
  end
@@ -248,22 +248,22 @@ describe Sequel::Model, "dataset & schema" do
248
248
  end
249
249
 
250
250
  it "should raise an error on set_dataset if there is an error connecting to the database" do
251
- @model.meta_def(:columns){raise Sequel::DatabaseConnectionError}
251
+ def @model.columns() raise Sequel::DatabaseConnectionError end
252
252
  proc{@model.set_dataset(Sequel::Database.new[:foo].join(:blah))}.should raise_error
253
253
  end
254
254
 
255
255
  it "should not raise an error if there is a problem getting the columns for a dataset" do
256
- @model.meta_def(:columns){raise Sequel::Error}
256
+ def @model.columns() raise Sequel::Error end
257
257
  proc{@model.set_dataset(MODEL_DB[:foo].join(:blah))}.should_not raise_error
258
258
  end
259
259
 
260
260
  it "doesn't raise an error on set_dataset if there is an error raised getting the schema" do
261
- @model.meta_def(:get_db_schema){raise Sequel::Error}
261
+ def @model.get_db_schema(*) raise Sequel::Error end
262
262
  proc{@model.set_dataset(MODEL_DB[:foo])}.should_not raise_error
263
263
  end
264
264
 
265
265
  it "doesn't raise an error on inherited if there is an error setting the dataset" do
266
- @model.meta_def(:set_dataset){raise Sequel::Error}
266
+ def @model.set_dataset(*) raise Sequel::Error end
267
267
  proc{Class.new(@model)}.should_not raise_error
268
268
  end
269
269
  end
@@ -376,7 +376,7 @@ describe Sequel::Model, ".subset" do
376
376
  end
377
377
 
378
378
  specify "should not override existing model methods" do
379
- @c.meta_def(:active){true}
379
+ def @c.active() true end
380
380
  @c.subset(:active, :active)
381
381
  @c.active.should == true
382
382
  end
@@ -652,7 +652,7 @@ describe "Model.db_schema" do
652
652
  specify "should automatically set a singular primary key based on the schema" do
653
653
  ds = @dataset
654
654
  d = ds.db
655
- d.meta_def(:schema){|table, *opts| [[:x, {:primary_key=>true}]]}
655
+ def d.schema(table, *opts) [[:x, {:primary_key=>true}]] end
656
656
  @c.primary_key.should == :id
657
657
  @c.dataset = ds
658
658
  @c.db_schema.should == {:x=>{:primary_key=>true}}
@@ -662,7 +662,7 @@ describe "Model.db_schema" do
662
662
  specify "should automatically set the composite primary key based on the schema" do
663
663
  ds = @dataset
664
664
  d = ds.db
665
- d.meta_def(:schema){|table, *opts| [[:x, {:primary_key=>true}], [:y, {:primary_key=>true}]]}
665
+ def d.schema(table, *opts) [[:x, {:primary_key=>true}], [:y, {:primary_key=>true}]] end
666
666
  @c.primary_key.should == :id
667
667
  @c.dataset = ds
668
668
  @c.db_schema.should == {:x=>{:primary_key=>true}, :y=>{:primary_key=>true}}
@@ -672,7 +672,7 @@ describe "Model.db_schema" do
672
672
  specify "should automatically set no primary key based on the schema" do
673
673
  ds = @dataset
674
674
  d = ds.db
675
- d.meta_def(:schema){|table, *opts| [[:x, {:primary_key=>false}], [:y, {:primary_key=>false}]]}
675
+ def d.schema(table, *opts) [[:x, {:primary_key=>false}], [:y, {:primary_key=>false}]] end
676
676
  @c.primary_key.should == :id
677
677
  @c.dataset = ds
678
678
  @c.db_schema.should == {:x=>{:primary_key=>false}, :y=>{:primary_key=>false}}
@@ -682,7 +682,7 @@ describe "Model.db_schema" do
682
682
  specify "should not modify the primary key unless all column schema hashes have a :primary_key entry" do
683
683
  ds = @dataset
684
684
  d = ds.db
685
- d.meta_def(:schema){|table, *opts| [[:x, {:primary_key=>false}], [:y, {}]]}
685
+ def d.schema(table, *opts) [[:x, {:primary_key=>false}], [:y, {}]] end
686
686
  @c.primary_key.should == :id
687
687
  @c.dataset = ds
688
688
  @c.db_schema.should == {:x=>{:primary_key=>false}, :y=>{}}
@@ -96,7 +96,7 @@ describe "Model#save" do
96
96
  @c.unrestrict_primary_key
97
97
  @c.set_primary_key [:x, :y]
98
98
  o = @c.new(:x => 11)
99
- o.meta_def(:autoincrementing_primary_key){:y}
99
+ def o.autoincrementing_primary_key() :y end
100
100
  o.save
101
101
  sqls = MODEL_DB.sqls
102
102
  sqls.length.should == 2
@@ -152,7 +152,7 @@ describe "Model#save" do
152
152
  end
153
153
 
154
154
  it "should mark all columns as not changed if this is a new record and insert_select was used" do
155
- @c.dataset.meta_def(:insert_select){|h| h.merge(:id=>1)}
155
+ def (@c.dataset).insert_select(h) h.merge(:id=>1) end
156
156
  o = @c.new(:x => 1, :y => nil)
157
157
  o.x = 4
158
158
  o.changed_columns.should == [:x]
@@ -1088,17 +1088,17 @@ describe Sequel::Model, "#destroy with filtered dataset" do
1088
1088
  end
1089
1089
 
1090
1090
  it "should raise a NoExistingObject exception if the dataset delete call doesn't return 1" do
1091
- @instance.this.meta_def(:execute_dui){|*a| 0}
1091
+ def (@instance.this).execute_dui(*a) 0 end
1092
1092
  proc{@instance.delete}.should raise_error(Sequel::NoExistingObject)
1093
- @instance.this.meta_def(:execute_dui){|*a| 2}
1093
+ def (@instance.this).execute_dui(*a) 2 end
1094
1094
  proc{@instance.delete}.should raise_error(Sequel::NoExistingObject)
1095
- @instance.this.meta_def(:execute_dui){|*a| 1}
1095
+ def (@instance.this).execute_dui(*a) 1 end
1096
1096
  proc{@instance.delete}.should_not raise_error
1097
1097
 
1098
1098
  @instance.require_modification = false
1099
- @instance.this.meta_def(:execute_dui){|*a| 0}
1099
+ def (@instance.this).execute_dui(*a) 0 end
1100
1100
  proc{@instance.delete}.should_not raise_error
1101
- @instance.this.meta_def(:execute_dui){|*a| 2}
1101
+ def (@instance.this).execute_dui(*a) 2 end
1102
1102
  proc{@instance.delete}.should_not raise_error
1103
1103
  end
1104
1104
 
@@ -1122,17 +1122,17 @@ describe Sequel::Model, "#destroy" do
1122
1122
  end
1123
1123
 
1124
1124
  it "should raise a NoExistingObject exception if the dataset delete call doesn't return 1" do
1125
- @model.dataset.meta_def(:execute_dui){|*a| 0}
1125
+ def (@model.dataset).execute_dui(*a) 0 end
1126
1126
  proc{@instance.delete}.should raise_error(Sequel::NoExistingObject)
1127
- @model.dataset.meta_def(:execute_dui){|*a| 2}
1127
+ def (@model.dataset).execute_dui(*a) 2 end
1128
1128
  proc{@instance.delete}.should raise_error(Sequel::NoExistingObject)
1129
- @model.dataset.meta_def(:execute_dui){|*a| 1}
1129
+ def (@model.dataset).execute_dui(*a) 1 end
1130
1130
  proc{@instance.delete}.should_not raise_error
1131
1131
 
1132
1132
  @instance.require_modification = false
1133
- @model.dataset.meta_def(:execute_dui){|*a| 0}
1133
+ def (@model.dataset).execute_dui(*a) 0 end
1134
1134
  proc{@instance.delete}.should_not raise_error
1135
- @model.dataset.meta_def(:execute_dui){|*a| 2}
1135
+ def (@model.dataset).execute_dui(*a) 2 end
1136
1136
  proc{@instance.delete}.should_not raise_error
1137
1137
  end
1138
1138
 
@@ -1868,21 +1868,18 @@ describe "Model#lock!" do
1868
1868
 
1869
1869
  it "should do nothing if the record is a new record" do
1870
1870
  o = @c.new
1871
- called = false
1872
- o.meta_def(:_refresh){|x| called = true; super(x)}
1871
+ def o._refresh(x) raise Sequel::Error; super(x) end
1873
1872
  x = o.lock!
1874
1873
  x.should == o
1875
- called.should == false
1876
1874
  MODEL_DB.sqls.should == []
1877
1875
  end
1878
1876
 
1879
1877
  it "should refresh the record using for_update if it is not a new record" do
1880
1878
  o = @c.load(:id => 1)
1881
- called = false
1882
- o.meta_def(:_refresh){|x| called = true; super(x)}
1879
+ def o._refresh(x) instance_variable_set(:@a, 1); super(x) end
1883
1880
  x = o.lock!
1884
1881
  x.should == o
1885
- called.should == true
1882
+ o.instance_variable_get(:@a).should == 1
1886
1883
  MODEL_DB.sqls.should == ["SELECT * FROM items WHERE (id = 1) LIMIT 1 FOR UPDATE"]
1887
1884
  end
1888
1885
  end
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.42.0
4
+ version: 3.43.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-03 00:00:00.000000000 Z
12
+ date: 2013-01-08 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: The Database Toolkit for Ruby
15
15
  email: code@jeremyevans.net
@@ -105,6 +105,7 @@ extra_rdoc_files:
105
105
  - doc/release_notes/3.40.0.txt
106
106
  - doc/release_notes/3.41.0.txt
107
107
  - doc/release_notes/3.42.0.txt
108
+ - doc/release_notes/3.43.0.txt
108
109
  files:
109
110
  - MIT-LICENSE
110
111
  - CHANGELOG
@@ -184,6 +185,7 @@ files:
184
185
  - doc/release_notes/3.40.0.txt
185
186
  - doc/release_notes/3.41.0.txt
186
187
  - doc/release_notes/3.42.0.txt
188
+ - doc/release_notes/3.43.0.txt
187
189
  - doc/sharding.rdoc
188
190
  - doc/sql.rdoc
189
191
  - doc/validations.rdoc
@@ -250,12 +252,13 @@ files:
250
252
  - spec/extensions/timestamps_spec.rb
251
253
  - spec/extensions/typecast_on_load_spec.rb
252
254
  - spec/extensions/validation_helpers_spec.rb
255
+ - spec/extensions/string_stripper_spec.rb
253
256
  - spec/extensions/composition_spec.rb
254
257
  - spec/extensions/rcte_tree_spec.rb
255
258
  - spec/extensions/instance_filters_spec.rb
256
259
  - spec/extensions/sharding_spec.rb
257
260
  - spec/extensions/skip_create_refresh_spec.rb
258
- - spec/extensions/string_stripper_spec.rb
261
+ - spec/extensions/date_arithmetic_spec.rb
259
262
  - spec/extensions/update_primary_key_spec.rb
260
263
  - spec/extensions/association_pks_spec.rb
261
264
  - spec/extensions/json_serializer_spec.rb
@@ -304,6 +307,8 @@ files:
304
307
  - spec/extensions/constraint_validations_spec.rb
305
308
  - spec/extensions/connection_validator_spec.rb
306
309
  - spec/extensions/validation_class_methods_spec.rb
310
+ - spec/extensions/meta_def_spec.rb
311
+ - spec/extensions/core_refinements_spec.rb
307
312
  - spec/integration/associations_test.rb
308
313
  - spec/integration/database_test.rb
309
314
  - spec/integration/dataset_test.rb
@@ -505,7 +510,10 @@ files:
505
510
  - lib/sequel/extensions/pg_row_ops.rb
506
511
  - lib/sequel/extensions/constraint_validations.rb
507
512
  - lib/sequel/extensions/connection_validator.rb
508
- - lib/sequel/metaprogramming.rb
513
+ - lib/sequel/extensions/date_arithmetic.rb
514
+ - lib/sequel/extensions/core_refinements.rb
515
+ - lib/sequel/extensions/meta_def.rb
516
+ - lib/sequel/version.rb
509
517
  - lib/sequel/model.rb
510
518
  - lib/sequel/model/associations.rb
511
519
  - lib/sequel/model/base.rb
@@ -567,7 +575,6 @@ files:
567
575
  - lib/sequel/plugins/pg_typecast_on_load.rb
568
576
  - lib/sequel/plugins/constraint_validations.rb
569
577
  - lib/sequel/timezones.rb
570
- - lib/sequel/version.rb
571
578
  - lib/sequel/ast_transformer.rb
572
579
  - lib/sequel/no_core_ext.rb
573
580
  - lib/sequel_core.rb
@@ -1,13 +0,0 @@
1
- module Sequel
2
- # Contains meta_def method for adding methods to objects via blocks, used by some of Sequel's classes and objects.
3
- module Metaprogramming
4
- # Define a method with the given name and block body on the receiver.
5
- #
6
- # ds = DB[:items]
7
- # ds.meta_def(:x){42}
8
- # ds.x # => 42
9
- def meta_def(name, &block)
10
- (class << self; self end).send(:define_method, name, &block)
11
- end
12
- end
13
- end