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
@@ -33,7 +33,7 @@ POSTGRES_DB.create_table! :test4 do
33
33
  bytea :value
34
34
  end
35
35
 
36
- context "A PostgreSQL database" do
36
+ describe "A PostgreSQL database" do
37
37
  before do
38
38
  @db = POSTGRES_DB
39
39
  end
@@ -54,7 +54,7 @@ context "A PostgreSQL database" do
54
54
  end
55
55
  end
56
56
 
57
- context "A PostgreSQL dataset" do
57
+ describe "A PostgreSQL dataset" do
58
58
  before do
59
59
  @d = POSTGRES_DB[:test]
60
60
  @d.delete # remove all records
@@ -234,7 +234,7 @@ if POSTGRES_DB.pool.respond_to?(:max_size) and POSTGRES_DB.pool.max_size > 1
234
234
  end
235
235
  end
236
236
 
237
- context "A PostgreSQL dataset with a timestamp field" do
237
+ describe "A PostgreSQL dataset with a timestamp field" do
238
238
  before do
239
239
  @d = POSTGRES_DB[:test3]
240
240
  @d.delete
@@ -259,7 +259,7 @@ context "A PostgreSQL dataset with a timestamp field" do
259
259
  end
260
260
  end
261
261
 
262
- context "PostgreSQL's EXPLAIN and ANALYZE" do
262
+ describe "PostgreSQL's EXPLAIN and ANALYZE" do
263
263
  specify "should not raise errors" do
264
264
  @d = POSTGRES_DB[:test3]
265
265
  proc{@d.explain}.should_not raise_error
@@ -267,7 +267,7 @@ context "PostgreSQL's EXPLAIN and ANALYZE" do
267
267
  end
268
268
  end
269
269
 
270
- context "A PostgreSQL database" do
270
+ describe "A PostgreSQL database" do
271
271
  before do
272
272
  @db = POSTGRES_DB
273
273
  end
@@ -310,7 +310,7 @@ context "A PostgreSQL database" do
310
310
  end
311
311
  end
312
312
 
313
- context "A PostgreSQL database" do
313
+ describe "A PostgreSQL database" do
314
314
  before do
315
315
  @db = POSTGRES_DB
316
316
  @db.drop_table(:posts) rescue nil
@@ -424,7 +424,7 @@ context "A PostgreSQL database" do
424
424
  end
425
425
  end
426
426
 
427
- context "Postgres::Dataset#import" do
427
+ describe "Postgres::Dataset#import" do
428
428
  before do
429
429
  @db = POSTGRES_DB
430
430
  @db.create_table!(:test){Integer :x; Integer :y}
@@ -463,7 +463,7 @@ context "Postgres::Dataset#import" do
463
463
  end
464
464
  end
465
465
 
466
- context "Postgres::Dataset#insert" do
466
+ describe "Postgres::Dataset#insert" do
467
467
  before do
468
468
  @db = POSTGRES_DB
469
469
  @db.create_table!(:test5){primary_key :xid; Integer :value}
@@ -551,7 +551,7 @@ context "Postgres::Dataset#insert" do
551
551
  end
552
552
  end
553
553
 
554
- context "Postgres::Database schema qualified tables" do
554
+ describe "Postgres::Database schema qualified tables" do
555
555
  before do
556
556
  POSTGRES_DB << "CREATE SCHEMA schema_test"
557
557
  POSTGRES_DB.instance_variable_set(:@primary_keys, {})
@@ -656,7 +656,7 @@ context "Postgres::Database schema qualified tables" do
656
656
  end
657
657
  end
658
658
 
659
- context "Postgres::Database schema qualified tables and eager graphing" do
659
+ describe "Postgres::Database schema qualified tables and eager graphing" do
660
660
  before(:all) do
661
661
  @db = POSTGRES_DB
662
662
  @db.run "DROP SCHEMA s CASCADE" rescue nil
@@ -844,7 +844,7 @@ if POSTGRES_DB.server_version >= 80300
844
844
  full_text_index [:title, :body]
845
845
  end
846
846
 
847
- context "PostgreSQL tsearch2" do
847
+ describe "PostgreSQL tsearch2" do
848
848
  before do
849
849
  @ds = POSTGRES_DB[:test6]
850
850
  end
@@ -873,7 +873,7 @@ if POSTGRES_DB.server_version >= 80300
873
873
  end
874
874
 
875
875
  if POSTGRES_DB.dataset.supports_window_functions?
876
- context "Postgres::Dataset named windows" do
876
+ describe "Postgres::Dataset named windows" do
877
877
  before do
878
878
  @db = POSTGRES_DB
879
879
  @db.create_table!(:i1){Integer :id; Integer :group_id; Integer :amount}
@@ -902,7 +902,7 @@ if POSTGRES_DB.dataset.supports_window_functions?
902
902
  end
903
903
  end
904
904
 
905
- context "Postgres::Database functions, languages, and triggers" do
905
+ describe "Postgres::Database functions, languages, and triggers" do
906
906
  before do
907
907
  @d = POSTGRES_DB
908
908
  end
@@ -973,7 +973,7 @@ context "Postgres::Database functions, languages, and triggers" do
973
973
  end
974
974
 
975
975
  if POSTGRES_DB.adapter_scheme == :postgres
976
- context "Postgres::Dataset #use_cursor" do
976
+ describe "Postgres::Dataset #use_cursor" do
977
977
  before(:all) do
978
978
  @db = POSTGRES_DB
979
979
  @db.create_table!(:test_cursor){Integer :x}
@@ -16,7 +16,7 @@ class Sequel::Database
16
16
  end
17
17
  end
18
18
 
19
- class Spec::Example::ExampleGroup
19
+ (defined?(RSpec) ? RSpec::Core::ExampleGroup : Spec::Example::ExampleGroup).class_eval do
20
20
  def log
21
21
  begin
22
22
  INTEGRATION_DB.loggers << Logger.new(STDOUT)
@@ -6,7 +6,7 @@ unless defined?(SQLITE_DB)
6
6
  end
7
7
  INTEGRATION_DB = SQLITE_DB unless defined?(INTEGRATION_DB)
8
8
 
9
- context "An SQLite database" do
9
+ describe "An SQLite database" do
10
10
  before do
11
11
  @db = SQLITE_DB
12
12
  @fk = @db.foreign_keys
@@ -128,7 +128,7 @@ context "An SQLite database" do
128
128
  end
129
129
  end
130
130
 
131
- context "An SQLite dataset" do
131
+ describe "An SQLite dataset" do
132
132
  before do
133
133
  @d = SQLITE_DB[:items]
134
134
  end
@@ -148,7 +148,7 @@ context "An SQLite dataset" do
148
148
  end
149
149
  end
150
150
 
151
- context "An SQLite numeric column" do
151
+ describe "An SQLite numeric column" do
152
152
  specify "should handle and return BigDecimal values" do
153
153
  SQLITE_DB.create_table!(:d){numeric :d}
154
154
  d = SQLITE_DB[:d]
@@ -162,7 +162,7 @@ context "An SQLite numeric column" do
162
162
  end
163
163
  end
164
164
 
165
- context "An SQLite dataset AS clause" do
165
+ describe "An SQLite dataset AS clause" do
166
166
  specify "should use a string literal for :col___alias" do
167
167
  SQLITE_DB.literal(:c___a).should == "c AS 'a'"
168
168
  end
@@ -188,7 +188,7 @@ context "An SQLite dataset AS clause" do
188
188
  end
189
189
  end
190
190
 
191
- context "SQLite::Dataset#delete" do
191
+ describe "SQLite::Dataset#delete" do
192
192
  before do
193
193
  SQLITE_DB.create_table! :items do
194
194
  primary_key :id
@@ -220,7 +220,7 @@ context "SQLite::Dataset#delete" do
220
220
  end
221
221
  end
222
222
 
223
- context "SQLite::Dataset#update" do
223
+ describe "SQLite::Dataset#update" do
224
224
  before do
225
225
  SQLITE_DB.create_table! :items do
226
226
  primary_key :id
@@ -243,7 +243,7 @@ context "SQLite::Dataset#update" do
243
243
  end
244
244
  end
245
245
 
246
- context "SQLite dataset" do
246
+ describe "SQLite dataset" do
247
247
  before do
248
248
  SQLITE_DB.create_table! :test do
249
249
  primary_key :id
@@ -282,7 +282,7 @@ context "SQLite dataset" do
282
282
  end
283
283
  end
284
284
 
285
- context "A SQLite database" do
285
+ describe "A SQLite database" do
286
286
  before do
287
287
  @db = SQLITE_DB
288
288
  @db.create_table! :test2 do
@@ -1,7 +1,7 @@
1
1
  require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
2
2
  CONNECTION_POOL_DEFAULTS = {:pool_timeout=>5, :pool_sleep_time=>0.001, :max_connections=>4}
3
3
 
4
- context "An empty ConnectionPool" do
4
+ describe "An empty ConnectionPool" do
5
5
  before do
6
6
  @cpool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS){}
7
7
  end
@@ -19,7 +19,7 @@ context "An empty ConnectionPool" do
19
19
  end
20
20
  end
21
21
 
22
- context "ConnectionPool options" do
22
+ describe "ConnectionPool options" do
23
23
  specify "should support string option values" do
24
24
  cpool = Sequel::ConnectionPool.get_pool({:max_connections=>'5', :pool_timeout=>'3', :pool_sleep_time=>'0.01'}){}
25
25
  cpool.max_size.should == 5
@@ -35,7 +35,7 @@ context "ConnectionPool options" do
35
35
  end
36
36
  end
37
37
 
38
- context "A connection pool handling connections" do
38
+ describe "A connection pool handling connections" do
39
39
  before do
40
40
  @max_size = 2
41
41
  @cpool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS.merge(:disconnection_proc=>proc{|c| @max_size=3}, :max_connections=>@max_size)) {:got_connection}
@@ -107,7 +107,7 @@ context "A connection pool handling connections" do
107
107
  end
108
108
  end
109
109
 
110
- context "A connection pool handling connection errors" do
110
+ describe "A connection pool handling connection errors" do
111
111
  specify "#hold should raise a Sequel::DatabaseConnectionError if an exception is raised by the connection_proc" do
112
112
  cpool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS){raise Interrupt}
113
113
  proc{cpool.hold{:block_return}}.should raise_error(Sequel::DatabaseConnectionError)
@@ -132,7 +132,7 @@ class DummyConnection
132
132
  end
133
133
  end
134
134
 
135
- context "ConnectionPool#hold" do
135
+ describe "ConnectionPool#hold" do
136
136
  before do
137
137
  @pool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS) {DummyConnection.new}
138
138
  end
@@ -158,7 +158,7 @@ context "ConnectionPool#hold" do
158
158
  end
159
159
  end
160
160
 
161
- context "A connection pool with a max size of 1" do
161
+ describe "A connection pool with a max size of 1" do
162
162
  before do
163
163
  @invoked_count = 0
164
164
  @pool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS.merge(:max_connections=>1)) {@invoked_count += 1; 'herro'}
@@ -166,14 +166,15 @@ context "A connection pool with a max size of 1" do
166
166
 
167
167
  specify "should let only one thread access the connection at any time" do
168
168
  cc,c1, c2 = nil
169
+ m = (defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx') ? 30 : 1
169
170
 
170
171
  t1 = Thread.new {@pool.hold {|c| cc = c; c1 = c.dup; while c == 'herro';sleep 0.01;end}}
171
- sleep 0.03
172
+ sleep 0.02 * m
172
173
  cc.should == 'herro'
173
174
  c1.should == 'herro'
174
175
 
175
176
  t2 = Thread.new {@pool.hold {|c| c2 = c.dup; while c == 'hello';sleep 0.01;end}}
176
- sleep 0.02
177
+ sleep 0.02 * m
177
178
 
178
179
  # connection held by t1
179
180
  t1.should be_alive
@@ -187,7 +188,7 @@ context "A connection pool with a max size of 1" do
187
188
  @pool.allocated.should == {t1=>cc}
188
189
 
189
190
  cc.gsub!('rr', 'll')
190
- sleep 0.05
191
+ sleep 0.05 * m
191
192
 
192
193
  # connection held by t2
193
194
  t1.should_not be_alive
@@ -199,7 +200,7 @@ context "A connection pool with a max size of 1" do
199
200
  @pool.allocated.should == {t2=>cc}
200
201
 
201
202
  cc.gsub!('ll', 'rr')
202
- sleep 0.05
203
+ sleep 0.05 * m
203
204
 
204
205
  #connection released
205
206
  t2.should_not be_alive
@@ -290,7 +291,7 @@ shared_examples_for "A threaded connection pool" do
290
291
  cc[7].should be_nil
291
292
 
292
293
  stop = true
293
- sleep 0.05
294
+ sleep 0.1
294
295
 
295
296
  threads.each {|t| t.should_not be_alive}
296
297
 
@@ -301,7 +302,7 @@ shared_examples_for "A threaded connection pool" do
301
302
  end
302
303
  end
303
304
 
304
- context "Threaded Unsharded Connection Pool" do
305
+ describe "Threaded Unsharded Connection Pool" do
305
306
  before do
306
307
  @invoked_count = 0
307
308
  @pool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS.merge(:max_connections=>5)) {@invoked_count += 1}
@@ -310,7 +311,7 @@ context "Threaded Unsharded Connection Pool" do
310
311
  it_should_behave_like "A threaded connection pool"
311
312
  end
312
313
 
313
- context "Threaded Sharded Connection Pool" do
314
+ describe "Threaded Sharded Connection Pool" do
314
315
  before do
315
316
  @invoked_count = 0
316
317
  @pool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS.merge(:max_connections=>5, :servers=>{})) {@invoked_count += 1}
@@ -319,7 +320,7 @@ context "Threaded Sharded Connection Pool" do
319
320
  it_should_behave_like "A threaded connection pool"
320
321
  end
321
322
 
322
- context "ConnectionPool#disconnect" do
323
+ describe "ConnectionPool#disconnect" do
323
324
  before do
324
325
  @count = 0
325
326
  @pool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS.merge(:max_connections=>5, :servers=>{})) {{:id => @count += 1}}
@@ -385,7 +386,7 @@ context "ConnectionPool#disconnect" do
385
386
  end
386
387
  end
387
388
 
388
- context "A connection pool with multiple servers" do
389
+ describe "A connection pool with multiple servers" do
389
390
  before do
390
391
  @invoked_counts = Hash.new(0)
391
392
  @pool = Sequel::ConnectionPool.get_pool(CONNECTION_POOL_DEFAULTS.merge(:servers=>{:read_only=>{}})){|server| "#{server}#{@invoked_counts[server] += 1}"}
@@ -616,7 +617,7 @@ end
616
617
 
617
618
  ST_CONNECTION_POOL_DEFAULTS = CONNECTION_POOL_DEFAULTS.merge(:single_threaded=>true)
618
619
 
619
- context "SingleConnectionPool" do
620
+ describe "SingleConnectionPool" do
620
621
  before do
621
622
  @pool = Sequel::ConnectionPool.get_pool(ST_CONNECTION_POOL_DEFAULTS){1234}
622
623
  end
@@ -638,7 +639,7 @@ context "SingleConnectionPool" do
638
639
  end
639
640
  end
640
641
 
641
- context "A single threaded pool with multiple servers" do
642
+ describe "A single threaded pool with multiple servers" do
642
643
  before do
643
644
  @max_size=2
644
645
  @pool = Sequel::ConnectionPool.get_pool(ST_CONNECTION_POOL_DEFAULTS.merge(:disconnection_proc=>proc{|c| @max_size=3}, :servers=>{:read_only=>{}})){|server| server}
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
2
2
 
3
- context "Array#all_two_pairs?" do
3
+ describe "Array#all_two_pairs?" do
4
4
  specify "should return false if empty" do
5
5
  [].all_two_pairs?.should == false
6
6
  end
@@ -23,7 +23,7 @@ context "Array#all_two_pairs?" do
23
23
  end
24
24
  end
25
25
 
26
- context "Array#case and Hash#case" do
26
+ describe "Array#case and Hash#case" do
27
27
  before do
28
28
  @d = Sequel::Dataset.new(nil)
29
29
  end
@@ -55,7 +55,7 @@ context "Array#case and Hash#case" do
55
55
  end
56
56
  end
57
57
 
58
- context "Array#sql_value_list and #sql_array" do
58
+ describe "Array#sql_value_list and #sql_array" do
59
59
  before do
60
60
  @d = Sequel::Dataset.new(nil)
61
61
  end
@@ -73,7 +73,7 @@ context "Array#sql_value_list and #sql_array" do
73
73
  end
74
74
  end
75
75
 
76
- context "String#lit" do
76
+ describe "String#lit" do
77
77
  before do
78
78
  @ds = ds = MockDatabase.new.dataset
79
79
  end
@@ -111,7 +111,7 @@ context "String#lit" do
111
111
  end
112
112
  end
113
113
 
114
- context "String#to_sequel_blob" do
114
+ describe "String#to_sequel_blob" do
115
115
  specify "should return a Blob object" do
116
116
  'xyz'.to_sequel_blob.should be_a_kind_of(::Sequel::SQL::Blob)
117
117
  'xyz'.to_sequel_blob.should == 'xyz'
@@ -122,7 +122,7 @@ context "String#to_sequel_blob" do
122
122
  end
123
123
  end
124
124
 
125
- context "#desc" do
125
+ describe "#desc" do
126
126
  before do
127
127
  @ds = Sequel::Dataset.new(nil)
128
128
  end
@@ -138,7 +138,7 @@ context "#desc" do
138
138
  end
139
139
  end
140
140
 
141
- context "#asc" do
141
+ describe "#asc" do
142
142
  before do
143
143
  @ds = Sequel::Dataset.new(nil)
144
144
  end
@@ -154,7 +154,7 @@ context "#asc" do
154
154
  end
155
155
  end
156
156
 
157
- context "#as" do
157
+ describe "#as" do
158
158
  before do
159
159
  @ds = Sequel::Dataset.new(nil)
160
160
  end
@@ -174,7 +174,7 @@ context "#as" do
174
174
  end
175
175
  end
176
176
 
177
- context "Column references" do
177
+ describe "Column references" do
178
178
  before do
179
179
  @c = Class.new(Sequel::Dataset) do
180
180
  def quoted_identifier(c); "`#{c}`"; end
@@ -211,7 +211,7 @@ context "Column references" do
211
211
  end
212
212
  end
213
213
 
214
- context "Blob" do
214
+ describe "Blob" do
215
215
  specify "#to_sequel_blob should return self" do
216
216
  blob = "x".to_sequel_blob
217
217
  blob.to_sequel_blob.object_id.should == blob.object_id
@@ -219,7 +219,7 @@ context "Blob" do
219
219
  end
220
220
 
221
221
  if RUBY_VERSION < '1.9.0'
222
- context "Symbol#[]" do
222
+ describe "Symbol#[]" do
223
223
  specify "should format an SQL Function" do
224
224
  ds = Sequel::Dataset.new(nil)
225
225
  ds.literal(:xyz[]).should == 'xyz()'
@@ -229,7 +229,7 @@ if RUBY_VERSION < '1.9.0'
229
229
  end
230
230
  end
231
231
 
232
- context "Symbol#*" do
232
+ describe "Symbol#*" do
233
233
  before do
234
234
  @ds = Sequel::Dataset.new(nil)
235
235
  end
@@ -249,7 +249,7 @@ context "Symbol#*" do
249
249
  end
250
250
  end
251
251
 
252
- context "Symbol" do
252
+ describe "Symbol" do
253
253
  before do
254
254
  @ds = Sequel::Dataset.new(nil)
255
255
  @ds.quote_identifiers = true
@@ -287,7 +287,7 @@ context "Symbol" do
287
287
  end
288
288
  end
289
289
 
290
- context "Dataset#literal" do
290
+ describe "Dataset#literal" do
291
291
  before do
292
292
  @ds = MockDataset.new(nil)
293
293
  end
@@ -323,7 +323,7 @@ context "Dataset#literal" do
323
323
  end
324
324
  end
325
325
 
326
- context "Symbol" do
326
+ describe "Symbol" do
327
327
  before do
328
328
  @ds = Sequel::Dataset.new(MockDatabase.new)
329
329
  end
@@ -390,7 +390,7 @@ context "Symbol" do
390
390
  end
391
391
  end
392
392
 
393
- context "Sequel::SQL::Function#==" do
393
+ describe "Sequel::SQL::Function#==" do
394
394
  specify "should be true for functions with the same name and arguments, false otherwise" do
395
395
  a = :date.sql_function(:t)
396
396
  b = :date.sql_function(:t)
@@ -407,7 +407,7 @@ context "Sequel::SQL::Function#==" do
407
407
  end
408
408
  end
409
409
 
410
- context "Sequel::SQL::OrderedExpression" do
410
+ describe "Sequel::SQL::OrderedExpression" do
411
411
  specify "should #desc" do
412
412
  @oe = :column.asc
413
413
  @oe.descending.should == false
@@ -427,7 +427,7 @@ context "Sequel::SQL::OrderedExpression" do
427
427
  end
428
428
  end
429
429
 
430
- context "Expression" do
430
+ describe "Expression" do
431
431
  specify "should consider objects == only if they have the same attributes" do
432
432
  :column.qualify(:table).cast(:type).*(:numeric_column).asc.should == :column.qualify(:table).cast(:type).*(:numeric_column).asc
433
433
  :other_column.qualify(:table).cast(:type).*(:numeric_column).asc.should_not == :column.qualify(:table).cast(:type).*(:numeric_column).asc