sequel 3.20.0 → 3.21.0

Sign up to get free protection for your applications and to get access to all the features.
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