sequel 3.20.0 → 3.21.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.
Files changed (65) hide show
  1. data/CHANGELOG +32 -0
  2. data/MIT-LICENSE +1 -1
  3. data/README.rdoc +1 -1
  4. data/Rakefile +13 -3
  5. data/bin/sequel +18 -5
  6. data/doc/active_record.rdoc +4 -4
  7. data/doc/opening_databases.rdoc +38 -1
  8. data/doc/release_notes/3.21.0.txt +87 -0
  9. data/doc/validations.rdoc +2 -2
  10. data/lib/sequel/adapters/informix.rb +1 -1
  11. data/lib/sequel/adapters/jdbc/h2.rb +2 -5
  12. data/lib/sequel/adapters/jdbc/mssql.rb +1 -4
  13. data/lib/sequel/adapters/jdbc/mysql.rb +1 -4
  14. data/lib/sequel/adapters/jdbc/postgresql.rb +1 -6
  15. data/lib/sequel/adapters/jdbc/sqlite.rb +2 -8
  16. data/lib/sequel/adapters/shared/mssql.rb +8 -0
  17. data/lib/sequel/adapters/shared/mysql.rb +23 -3
  18. data/lib/sequel/adapters/shared/oracle.rb +2 -2
  19. data/lib/sequel/adapters/tinytds.rb +125 -0
  20. data/lib/sequel/database/connecting.rb +1 -1
  21. data/lib/sequel/database/schema_methods.rb +37 -5
  22. data/lib/sequel/dataset/sql.rb +6 -6
  23. data/lib/sequel/extensions/schema_dumper.rb +1 -1
  24. data/lib/sequel/model/base.rb +50 -0
  25. data/lib/sequel/model/plugins.rb +0 -55
  26. data/lib/sequel/plugins/association_autoreloading.rb +48 -0
  27. data/lib/sequel/plugins/validation_class_methods.rb +6 -5
  28. data/lib/sequel/plugins/validation_helpers.rb +2 -2
  29. data/lib/sequel/version.rb +1 -1
  30. data/spec/adapters/firebird_spec.rb +6 -6
  31. data/spec/adapters/informix_spec.rb +2 -2
  32. data/spec/adapters/mssql_spec.rb +18 -13
  33. data/spec/adapters/mysql_spec.rb +47 -20
  34. data/spec/adapters/oracle_spec.rb +40 -4
  35. data/spec/adapters/postgres_spec.rb +14 -14
  36. data/spec/adapters/spec_helper.rb +1 -1
  37. data/spec/adapters/sqlite_spec.rb +8 -8
  38. data/spec/core/connection_pool_spec.rb +18 -17
  39. data/spec/core/core_sql_spec.rb +18 -18
  40. data/spec/core/database_spec.rb +62 -62
  41. data/spec/core/dataset_spec.rb +105 -92
  42. data/spec/core/expression_filters_spec.rb +2 -2
  43. data/spec/core/schema_spec.rb +6 -6
  44. data/spec/core/version_spec.rb +1 -1
  45. data/spec/extensions/association_autoreloading_spec.rb +94 -0
  46. data/spec/extensions/blank_spec.rb +6 -6
  47. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  48. data/spec/extensions/migration_spec.rb +6 -6
  49. data/spec/extensions/pagination_spec.rb +2 -2
  50. data/spec/extensions/pretty_table_spec.rb +2 -2
  51. data/spec/extensions/query_spec.rb +2 -2
  52. data/spec/extensions/schema_dumper_spec.rb +2 -1
  53. data/spec/extensions/single_table_inheritance_spec.rb +1 -1
  54. data/spec/extensions/sql_expr_spec.rb +1 -1
  55. data/spec/extensions/string_date_time_spec.rb +4 -4
  56. data/spec/extensions/validation_class_methods_spec.rb +2 -2
  57. data/spec/integration/dataset_test.rb +8 -3
  58. data/spec/integration/plugin_test.rb +5 -5
  59. data/spec/integration/prepared_statement_test.rb +1 -1
  60. data/spec/integration/schema_test.rb +7 -0
  61. data/spec/integration/spec_helper.rb +14 -1
  62. data/spec/integration/timezone_test.rb +4 -4
  63. data/spec/integration/type_test.rb +1 -1
  64. data/spec/model/model_spec.rb +3 -3
  65. metadata +9 -4
@@ -414,7 +414,7 @@ describe "Touch plugin" do
414
414
  specify "should update the timestamp column when touching the record" do
415
415
  @album.updated_at.should == nil
416
416
  @album.touch
417
- @album.updated_at.to_i.should be_close(Time.now.to_i, 2)
417
+ @album.updated_at.to_i.should be_within(2).of(Time.now.to_i)
418
418
  end
419
419
 
420
420
  cspecify "should update the timestamp column for associated records when the record is updated or destroyed", [:do, :sqlite], [:jdbc, :sqlite] do
@@ -422,16 +422,16 @@ describe "Touch plugin" do
422
422
  @album.update(:name=>'B')
423
423
  ua = @artist.reload.updated_at
424
424
  if ua.is_a?(Time)
425
- ua.to_i.should be_close(Time.now.to_i, 2)
425
+ ua.to_i.should be_within(2).of(Time.now.to_i)
426
426
  else
427
- (DateTime.now - ua).should be_close(0, 2.0/86400)
427
+ (DateTime.now - ua).should be_within(2.0/86400).of(0)
428
428
  end
429
429
  @artist.update(:updated_at=>nil)
430
430
  @album.destroy
431
431
  if ua.is_a?(Time)
432
- ua.to_i.should be_close(Time.now.to_i, 2)
432
+ ua.to_i.should be_within(2).of(Time.now.to_i)
433
433
  else
434
- (DateTime.now - ua).should be_close(0, 2.0/86400)
434
+ (DateTime.now - ua).should be_within(2.0/86400).of(0)
435
435
  end
436
436
  end
437
437
  end
@@ -242,7 +242,7 @@ describe "Bound Argument Types" do
242
242
  @ds.filter(:d=>@ds.ba(:$x, :date)).prepare(:first, :ps_date).call(:x=>@vs[:d])[:d].should == @vs[:d]
243
243
  end
244
244
 
245
- cspecify "should handle datetime type", [:do], [:mysql2], [:swift], [:jdbc, :sqlite] do
245
+ cspecify "should handle datetime type", [:do], [:mysql2], [:swift], [:jdbc, :sqlite], [:tinytds] do
246
246
  Sequel.datetime_class = DateTime
247
247
  @ds.filter(:dt=>@ds.ba(:$x, :timestamp)).prepare(:first, :ps_datetime).call(:x=>@vs[:dt])[:dt].should == @vs[:dt]
248
248
  end
@@ -193,6 +193,13 @@ describe "Database schema modifiers" do
193
193
  @ds.columns!.should == [:number]
194
194
  end
195
195
 
196
+ specify "should handle combination of default, unique, and not null" do
197
+ @db.create_table!(:items){Integer :number, :default=>0, :null=>false, :unique=>true}
198
+ @db.table_exists?(:items).should == true
199
+ @db.schema(:items, :reload=>true).map{|x| x.last}.first.values_at(:ruby_default, :allow_null).should == [0, false]
200
+ @ds.insert([10])
201
+ end
202
+
196
203
  specify "should handle foreign keys correctly when creating tables" do
197
204
  @db.create_table!(:items) do
198
205
  primary_key :id
@@ -16,7 +16,20 @@ def clear_sqls
16
16
  $sqls.clear
17
17
  end
18
18
 
19
- class Spec::Example::ExampleGroup
19
+ unless defined?(RSpec)
20
+ module Spec::Matchers
21
+ class BeWithin
22
+ include Spec::Matchers
23
+ def initialize(delta); @delta = delta; end
24
+ def of(expected); be_close(expected, @delta); end
25
+ end
26
+ def be_within(delta)
27
+ BeWithin.new(delta)
28
+ end
29
+ end
30
+ end
31
+
32
+ (defined?(RSpec) ? RSpec::Core::ExampleGroup : Spec::Example::ExampleGroup).class_eval do
20
33
  def log
21
34
  begin
22
35
  INTEGRATION_DB.loggers << Logger.new(STDOUT)
@@ -7,7 +7,7 @@ describe "Sequel timezone support" do
7
7
  @db[:t].insert(t)
8
8
  t2 = @db[:t].single_value
9
9
  t2 = Sequel.database_to_application_timestamp(t2.to_s) unless t2.is_a?(Time)
10
- (t2 - t).should be_close(0, 2)
10
+ (t2 - t).should be_within(2).of(0)
11
11
  t2.utc_offset.should == 0 if Sequel.application_timezone == :utc
12
12
  t2.utc_offset.should == t.getlocal.utc_offset if Sequel.application_timezone == :local
13
13
  @db[:t].delete
@@ -20,7 +20,7 @@ describe "Sequel timezone support" do
20
20
  @db[:t].insert(dt)
21
21
  dt2 = @db[:t].single_value
22
22
  dt2 = Sequel.database_to_application_timestamp(dt2.to_s) unless dt2.is_a?(DateTime)
23
- (dt2 - dt).should be_close(0, 0.00002)
23
+ (dt2 - dt).should be_within(0.00002).of(0)
24
24
  dt2.offset.should == 0 if Sequel.application_timezone == :utc
25
25
  dt2.offset.should == dt.offset if Sequel.application_timezone == :local
26
26
  @db[:t].delete
@@ -37,13 +37,13 @@ describe "Sequel timezone support" do
37
37
  Sequel.datetime_class = Time
38
38
  end
39
39
 
40
- cspecify "should support using UTC for database storage and local time for the application", [:swift], [:do, proc{|db| db.database_type != :sqlite}] do
40
+ cspecify "should support using UTC for database storage and local time for the application", [:swift], [:tinytds], [:do, proc{|db| db.database_type != :sqlite}] do
41
41
  Sequel.database_timezone = :utc
42
42
  Sequel.application_timezone = :local
43
43
  test_timezone
44
44
  end
45
45
 
46
- cspecify "should support using local time for database storage and UTC for the application", [:swift], [:do, proc{|db| db.database_type != :sqlite}] do
46
+ cspecify "should support using local time for database storage and UTC for the application", [:swift], [:tinytds], [:do, proc{|db| db.database_type != :sqlite}] do
47
47
  Sequel.database_timezone = :local
48
48
  Sequel.application_timezone = :utc
49
49
  test_timezone
@@ -79,7 +79,7 @@ describe "Supported types" do
79
79
  ds.first[:tim].strftime('%Y%m%d%H%M%S').should == t.strftime('%Y%m%d%H%M%S')
80
80
  end
81
81
 
82
- cspecify "should support generic file type", [:do], [:odbc, :mssql], [:mysql2], [:swift] do
82
+ cspecify "should support generic file type", [:do], [:odbc, :mssql], [:mysql2], [:swift], [:tinytds] do
83
83
  ds = create_items_table_with_column(:name, File)
84
84
  ds.insert(:name => ("a\0"*300).to_sequel_blob)
85
85
  ds.all.should == [{:name=>("a\0"*300).to_sequel_blob}]
@@ -511,7 +511,7 @@ describe Sequel::Model, ".[]" do
511
511
  end
512
512
  end
513
513
 
514
- context "Model#inspect" do
514
+ describe "Model#inspect" do
515
515
  before do
516
516
  @o = Sequel::Model.load(:x => 333)
517
517
  end
@@ -521,7 +521,7 @@ context "Model#inspect" do
521
521
  end
522
522
  end
523
523
 
524
- context "Model.db_schema" do
524
+ describe "Model.db_schema" do
525
525
  before do
526
526
  @c = Class.new(Sequel::Model(:items)) do
527
527
  def self.columns; orig_columns; end
@@ -618,7 +618,7 @@ context "Model.db_schema" do
618
618
  end
619
619
  end
620
620
 
621
- context "Model#use_transactions" do
621
+ describe "Model#use_transactions" do
622
622
  before do
623
623
  @c = Class.new(Sequel::Model(:items))
624
624
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- hash: 87
4
+ hash: 83
5
5
  prerelease: false
6
6
  segments:
7
7
  - 3
8
- - 20
8
+ - 21
9
9
  - 0
10
- version: 3.20.0
10
+ version: 3.21.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jeremy Evans
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-01 00:00:00 -08:00
18
+ date: 2011-03-01 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -84,6 +84,7 @@ extra_rdoc_files:
84
84
  - doc/release_notes/3.18.0.txt
85
85
  - doc/release_notes/3.19.0.txt
86
86
  - doc/release_notes/3.20.0.txt
87
+ - doc/release_notes/3.21.0.txt
87
88
  files:
88
89
  - MIT-LICENSE
89
90
  - CHANGELOG
@@ -135,6 +136,7 @@ files:
135
136
  - doc/release_notes/3.18.0.txt
136
137
  - doc/release_notes/3.19.0.txt
137
138
  - doc/release_notes/3.20.0.txt
139
+ - doc/release_notes/3.21.0.txt
138
140
  - doc/sharding.rdoc
139
141
  - doc/sql.rdoc
140
142
  - doc/virtual_rows.rdoc
@@ -213,6 +215,7 @@ files:
213
215
  - spec/extensions/tree_spec.rb
214
216
  - spec/extensions/xml_serializer_spec.rb
215
217
  - spec/extensions/to_dot_spec.rb
218
+ - spec/extensions/association_autoreloading_spec.rb
216
219
  - spec/integration/associations_test.rb
217
220
  - spec/integration/database_test.rb
218
221
  - spec/integration/dataset_test.rb
@@ -321,6 +324,7 @@ files:
321
324
  - lib/sequel/adapters/swift/mysql.rb
322
325
  - lib/sequel/adapters/swift/postgres.rb
323
326
  - lib/sequel/adapters/swift/sqlite.rb
327
+ - lib/sequel/adapters/tinytds.rb
324
328
  - lib/sequel/connection_pool.rb
325
329
  - lib/sequel/connection_pool/sharded_single.rb
326
330
  - lib/sequel/connection_pool/sharded_threaded.rb
@@ -405,6 +409,7 @@ files:
405
409
  - lib/sequel/plugins/list.rb
406
410
  - lib/sequel/plugins/tree.rb
407
411
  - lib/sequel/plugins/xml_serializer.rb
412
+ - lib/sequel/plugins/association_autoreloading.rb
408
413
  - lib/sequel/sql.rb
409
414
  - lib/sequel/timezones.rb
410
415
  - lib/sequel/version.rb