sequel 4.22.0 → 4.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +22 -0
  3. data/README.rdoc +6 -0
  4. data/Rakefile +59 -81
  5. data/doc/migration.rdoc +2 -0
  6. data/doc/release_notes/4.23.0.txt +65 -0
  7. data/doc/sharding.rdoc +16 -14
  8. data/doc/testing.rdoc +61 -77
  9. data/lib/sequel/adapters/jdbc.rb +1 -0
  10. data/lib/sequel/adapters/mock.rb +0 -1
  11. data/lib/sequel/adapters/postgres.rb +1 -0
  12. data/lib/sequel/adapters/postgresql.rb +1 -0
  13. data/lib/sequel/adapters/shared/postgres.rb +3 -3
  14. data/lib/sequel/connection_pool/sharded_threaded.rb +5 -0
  15. data/lib/sequel/connection_pool/threaded.rb +9 -1
  16. data/lib/sequel/database/connecting.rb +1 -1
  17. data/lib/sequel/database/transactions.rb +2 -1
  18. data/lib/sequel/dataset/prepared_statements.rb +1 -1
  19. data/lib/sequel/extensions/constraint_validations.rb +12 -12
  20. data/lib/sequel/extensions/date_arithmetic.rb +0 -4
  21. data/lib/sequel/extensions/pagination.rb +14 -2
  22. data/lib/sequel/extensions/pg_enum.rb +2 -2
  23. data/lib/sequel/extensions/pg_hstore.rb +1 -1
  24. data/lib/sequel/extensions/pg_json_ops.rb +2 -2
  25. data/lib/sequel/plugins/csv_serializer.rb +2 -0
  26. data/lib/sequel/plugins/delay_add_association.rb +50 -0
  27. data/lib/sequel/plugins/list.rb +2 -2
  28. data/lib/sequel/plugins/nested_attributes.rb +8 -28
  29. data/lib/sequel/plugins/update_refresh.rb +50 -0
  30. data/lib/sequel/plugins/validate_associated.rb +55 -0
  31. data/lib/sequel/version.rb +1 -1
  32. data/spec/adapters/db2_spec.rb +29 -29
  33. data/spec/adapters/firebird_spec.rb +97 -103
  34. data/spec/adapters/informix_spec.rb +25 -25
  35. data/spec/adapters/mssql_spec.rb +156 -172
  36. data/spec/adapters/mysql_spec.rb +334 -359
  37. data/spec/adapters/oracle_spec.rb +67 -69
  38. data/spec/adapters/postgres_spec.rb +1298 -1249
  39. data/spec/adapters/spec_helper.rb +2 -35
  40. data/spec/adapters/sqlanywhere_spec.rb +39 -39
  41. data/spec/adapters/sqlite_spec.rb +203 -200
  42. data/spec/bin_spec.rb +57 -59
  43. data/spec/core/connection_pool_spec.rb +402 -401
  44. data/spec/core/database_spec.rb +953 -944
  45. data/spec/core/dataset_spec.rb +2178 -2168
  46. data/spec/core/deprecated_spec.rb +19 -19
  47. data/spec/core/expression_filters_spec.rb +415 -415
  48. data/spec/core/mock_adapter_spec.rb +212 -212
  49. data/spec/core/object_graph_spec.rb +73 -73
  50. data/spec/core/placeholder_literalizer_spec.rb +71 -71
  51. data/spec/core/schema_generator_spec.rb +44 -44
  52. data/spec/core/schema_spec.rb +470 -472
  53. data/spec/core/spec_helper.rb +5 -20
  54. data/spec/core/version_spec.rb +2 -2
  55. data/spec/core_extensions_spec.rb +320 -320
  56. data/spec/extensions/accessed_columns_spec.rb +12 -12
  57. data/spec/extensions/active_model_spec.rb +3 -3
  58. data/spec/extensions/after_initialize_spec.rb +2 -2
  59. data/spec/extensions/arbitrary_servers_spec.rb +23 -23
  60. data/spec/extensions/association_dependencies_spec.rb +34 -34
  61. data/spec/extensions/association_pks_spec.rb +98 -98
  62. data/spec/extensions/association_proxies_spec.rb +33 -33
  63. data/spec/extensions/auto_validations_spec.rb +46 -46
  64. data/spec/extensions/blacklist_security_spec.rb +19 -18
  65. data/spec/extensions/blank_spec.rb +36 -36
  66. data/spec/extensions/boolean_readers_spec.rb +36 -36
  67. data/spec/extensions/caching_spec.rb +82 -82
  68. data/spec/extensions/class_table_inheritance_spec.rb +72 -72
  69. data/spec/extensions/column_conflicts_spec.rb +19 -14
  70. data/spec/extensions/column_select_spec.rb +19 -19
  71. data/spec/extensions/columns_introspection_spec.rb +43 -43
  72. data/spec/extensions/composition_spec.rb +64 -64
  73. data/spec/extensions/connection_validator_spec.rb +92 -90
  74. data/spec/extensions/constraint_validations_plugin_spec.rb +92 -92
  75. data/spec/extensions/constraint_validations_spec.rb +80 -80
  76. data/spec/extensions/core_refinements_spec.rb +220 -220
  77. data/spec/extensions/csv_serializer_spec.rb +44 -44
  78. data/spec/extensions/current_datetime_timestamp_spec.rb +8 -8
  79. data/spec/extensions/dataset_associations_spec.rb +65 -65
  80. data/spec/extensions/dataset_source_alias_spec.rb +16 -16
  81. data/spec/extensions/date_arithmetic_spec.rb +51 -58
  82. data/spec/extensions/defaults_setter_spec.rb +19 -19
  83. data/spec/extensions/delay_add_association_spec.rb +52 -0
  84. data/spec/extensions/dirty_spec.rb +51 -51
  85. data/spec/extensions/eager_each_spec.rb +8 -8
  86. data/spec/extensions/empty_array_ignore_nulls_spec.rb +10 -10
  87. data/spec/extensions/error_splitter_spec.rb +2 -2
  88. data/spec/extensions/error_sql_spec.rb +4 -4
  89. data/spec/extensions/eval_inspect_spec.rb +3 -3
  90. data/spec/extensions/filter_having_spec.rb +8 -8
  91. data/spec/extensions/force_encoding_spec.rb +30 -30
  92. data/spec/extensions/from_block_spec.rb +7 -7
  93. data/spec/extensions/graph_each_spec.rb +19 -19
  94. data/spec/extensions/hash_aliases_spec.rb +5 -5
  95. data/spec/extensions/hook_class_methods_spec.rb +100 -100
  96. data/spec/extensions/inflector_spec.rb +54 -54
  97. data/spec/extensions/input_transformer_spec.rb +10 -10
  98. data/spec/extensions/insert_returning_select_spec.rb +8 -8
  99. data/spec/extensions/instance_filters_spec.rb +26 -26
  100. data/spec/extensions/instance_hooks_spec.rb +85 -85
  101. data/spec/extensions/json_serializer_spec.rb +68 -68
  102. data/spec/extensions/lazy_attributes_spec.rb +49 -49
  103. data/spec/extensions/list_spec.rb +77 -75
  104. data/spec/extensions/looser_typecasting_spec.rb +16 -16
  105. data/spec/extensions/many_through_many_spec.rb +627 -627
  106. data/spec/extensions/meta_def_spec.rb +7 -7
  107. data/spec/extensions/migration_spec.rb +217 -217
  108. data/spec/extensions/modification_detection_spec.rb +20 -20
  109. data/spec/extensions/mssql_optimistic_locking_spec.rb +21 -21
  110. data/spec/extensions/named_timezones_spec.rb +18 -18
  111. data/spec/extensions/nested_attributes_spec.rb +107 -107
  112. data/spec/extensions/null_dataset_spec.rb +24 -24
  113. data/spec/extensions/optimistic_locking_spec.rb +21 -21
  114. data/spec/extensions/pagination_spec.rb +52 -52
  115. data/spec/extensions/pg_array_associations_spec.rb +273 -273
  116. data/spec/extensions/pg_array_ops_spec.rb +52 -52
  117. data/spec/extensions/pg_array_spec.rb +152 -152
  118. data/spec/extensions/pg_enum_spec.rb +13 -13
  119. data/spec/extensions/pg_hstore_ops_spec.rb +63 -63
  120. data/spec/extensions/pg_hstore_spec.rb +84 -84
  121. data/spec/extensions/pg_inet_spec.rb +15 -15
  122. data/spec/extensions/pg_interval_spec.rb +29 -29
  123. data/spec/extensions/pg_json_ops_spec.rb +86 -84
  124. data/spec/extensions/pg_json_spec.rb +104 -104
  125. data/spec/extensions/pg_loose_count_spec.rb +6 -6
  126. data/spec/extensions/pg_range_ops_spec.rb +24 -24
  127. data/spec/extensions/pg_range_spec.rb +143 -143
  128. data/spec/extensions/pg_row_ops_spec.rb +14 -14
  129. data/spec/extensions/pg_row_plugin_spec.rb +12 -12
  130. data/spec/extensions/pg_row_spec.rb +118 -118
  131. data/spec/extensions/pg_static_cache_updater_spec.rb +28 -28
  132. data/spec/extensions/pg_typecast_on_load_spec.rb +21 -21
  133. data/spec/extensions/prepared_statements_associations_spec.rb +42 -42
  134. data/spec/extensions/prepared_statements_safe_spec.rb +18 -18
  135. data/spec/extensions/prepared_statements_spec.rb +28 -28
  136. data/spec/extensions/prepared_statements_with_pk_spec.rb +11 -11
  137. data/spec/extensions/pretty_table_spec.rb +16 -16
  138. data/spec/extensions/query_literals_spec.rb +37 -37
  139. data/spec/extensions/query_spec.rb +32 -32
  140. data/spec/extensions/rcte_tree_spec.rb +141 -141
  141. data/spec/extensions/round_timestamps_spec.rb +21 -21
  142. data/spec/extensions/schema_caching_spec.rb +8 -8
  143. data/spec/extensions/schema_dumper_spec.rb +78 -78
  144. data/spec/extensions/schema_spec.rb +31 -27
  145. data/spec/extensions/scissors_spec.rb +3 -3
  146. data/spec/extensions/select_remove_spec.rb +14 -14
  147. data/spec/extensions/sequel_3_dataset_methods_spec.rb +28 -28
  148. data/spec/extensions/serialization_modification_detection_spec.rb +33 -33
  149. data/spec/extensions/serialization_spec.rb +79 -78
  150. data/spec/extensions/server_block_spec.rb +17 -17
  151. data/spec/extensions/set_overrides_spec.rb +30 -30
  152. data/spec/extensions/sharding_spec.rb +65 -65
  153. data/spec/extensions/shared_caching_spec.rb +29 -29
  154. data/spec/extensions/single_table_inheritance_spec.rb +79 -79
  155. data/spec/extensions/skip_create_refresh_spec.rb +3 -3
  156. data/spec/extensions/spec_helper.rb +4 -29
  157. data/spec/extensions/split_array_nil_spec.rb +9 -9
  158. data/spec/extensions/split_values_spec.rb +7 -7
  159. data/spec/extensions/sql_expr_spec.rb +32 -32
  160. data/spec/extensions/static_cache_spec.rb +123 -123
  161. data/spec/extensions/string_date_time_spec.rb +34 -34
  162. data/spec/extensions/string_stripper_spec.rb +15 -15
  163. data/spec/extensions/subclasses_spec.rb +31 -31
  164. data/spec/extensions/table_select_spec.rb +15 -15
  165. data/spec/extensions/tactical_eager_loading_spec.rb +23 -23
  166. data/spec/extensions/thread_local_timezones_spec.rb +13 -13
  167. data/spec/extensions/timestamps_spec.rb +40 -40
  168. data/spec/extensions/to_dot_spec.rb +34 -34
  169. data/spec/extensions/touch_spec.rb +52 -52
  170. data/spec/extensions/tree_spec.rb +72 -72
  171. data/spec/extensions/typecast_on_load_spec.rb +25 -25
  172. data/spec/extensions/unlimited_update_spec.rb +2 -2
  173. data/spec/extensions/update_or_create_spec.rb +36 -36
  174. data/spec/extensions/update_primary_key_spec.rb +35 -35
  175. data/spec/extensions/update_refresh_spec.rb +41 -0
  176. data/spec/extensions/validate_associated_spec.rb +52 -0
  177. data/spec/extensions/validation_class_methods_spec.rb +314 -317
  178. data/spec/extensions/validation_helpers_spec.rb +195 -195
  179. data/spec/extensions/xml_serializer_spec.rb +48 -48
  180. data/spec/guards_helper.rb +55 -0
  181. data/spec/integration/associations_test.rb +1089 -1088
  182. data/spec/integration/database_test.rb +29 -29
  183. data/spec/integration/dataset_test.rb +661 -661
  184. data/spec/integration/eager_loader_test.rb +147 -147
  185. data/spec/integration/migrator_test.rb +122 -122
  186. data/spec/integration/model_test.rb +70 -70
  187. data/spec/integration/plugin_test.rb +682 -640
  188. data/spec/integration/prepared_statement_test.rb +172 -172
  189. data/spec/integration/schema_test.rb +245 -245
  190. data/spec/integration/spec_helper.rb +1 -64
  191. data/spec/integration/timezone_test.rb +17 -17
  192. data/spec/integration/transaction_test.rb +87 -87
  193. data/spec/integration/type_test.rb +33 -33
  194. data/spec/model/association_reflection_spec.rb +130 -121
  195. data/spec/model/associations_spec.rb +1112 -1113
  196. data/spec/model/base_spec.rb +197 -196
  197. data/spec/model/class_dataset_methods_spec.rb +118 -118
  198. data/spec/model/dataset_methods_spec.rb +49 -49
  199. data/spec/model/eager_loading_spec.rb +705 -702
  200. data/spec/model/hooks_spec.rb +169 -168
  201. data/spec/model/inflector_spec.rb +5 -5
  202. data/spec/model/model_spec.rb +287 -297
  203. data/spec/model/plugins_spec.rb +47 -47
  204. data/spec/model/record_spec.rb +534 -535
  205. data/spec/model/spec_helper.rb +3 -21
  206. data/spec/model/validations_spec.rb +72 -70
  207. data/spec/spec_config.rb +8 -0
  208. metadata +41 -9
  209. data/lib/sequel/adapters/fdbsql.rb +0 -286
  210. data/lib/sequel/adapters/jdbc/fdbsql.rb +0 -66
  211. data/lib/sequel/adapters/openbase.rb +0 -54
  212. data/lib/sequel/adapters/shared/fdbsql.rb +0 -550
  213. data/spec/adapters/fdbsql_spec.rb +0 -429
  214. data/spec/rspec_helper.rb +0 -22
@@ -30,35 +30,35 @@ describe "MySQL", '#create_table' do
30
30
  @db.drop_table?(:dolls)
31
31
  end
32
32
 
33
- specify "should allow to specify options for MySQL" do
33
+ it "should allow to specify options for MySQL" do
34
34
  @db.create_table(:dolls, :engine => 'MyISAM', :charset => 'latin2'){text :name}
35
35
  check_sqls do
36
- @db.sqls.should == ["CREATE TABLE `dolls` (`name` text) ENGINE=MyISAM DEFAULT CHARSET=latin2"]
36
+ @db.sqls.must_equal ["CREATE TABLE `dolls` (`name` text) ENGINE=MyISAM DEFAULT CHARSET=latin2"]
37
37
  end
38
38
  end
39
39
 
40
- specify "should create a temporary table" do
40
+ it "should create a temporary table" do
41
41
  @db.create_table(:tmp_dolls, :temp => true, :engine => 'MyISAM', :charset => 'latin2'){text :name}
42
42
  check_sqls do
43
- @db.sqls.should == ["CREATE TEMPORARY TABLE `tmp_dolls` (`name` text) ENGINE=MyISAM DEFAULT CHARSET=latin2"]
43
+ @db.sqls.must_equal ["CREATE TEMPORARY TABLE `tmp_dolls` (`name` text) ENGINE=MyISAM DEFAULT CHARSET=latin2"]
44
44
  end
45
45
  end
46
46
 
47
- specify "should not use a default for a String :text=>true type" do
47
+ it "should not use a default for a String :text=>true type" do
48
48
  @db.create_table(:dolls){String :name, :text=>true, :default=>'blah'}
49
49
  check_sqls do
50
- @db.sqls.should == ["CREATE TABLE `dolls` (`name` text)"]
50
+ @db.sqls.must_equal ["CREATE TABLE `dolls` (`name` text)"]
51
51
  end
52
52
  end
53
53
 
54
- specify "should not use a default for a File type" do
54
+ it "should not use a default for a File type" do
55
55
  @db.create_table(:dolls){File :name, :default=>'blah'}
56
56
  check_sqls do
57
- @db.sqls.should == ["CREATE TABLE `dolls` (`name` blob)"]
57
+ @db.sqls.must_equal ["CREATE TABLE `dolls` (`name` blob)"]
58
58
  end
59
59
  end
60
60
 
61
- specify "should respect the size option for File type" do
61
+ it "should respect the size option for File type" do
62
62
  @db.create_table(:dolls) do
63
63
  File :n1
64
64
  File :n2, :size=>:tiny
@@ -66,36 +66,36 @@ describe "MySQL", '#create_table' do
66
66
  File :n4, :size=>:long
67
67
  File :n5, :size=>255
68
68
  end
69
- @db.schema(:dolls).map{|k, v| v[:db_type]}.should == %w"blob tinyblob mediumblob longblob blob"
69
+ @db.schema(:dolls).map{|k, v| v[:db_type]}.must_equal %w"blob tinyblob mediumblob longblob blob"
70
70
  end
71
71
 
72
- specify "should include an :auto_increment schema attribute if auto incrementing" do
72
+ it "should include an :auto_increment schema attribute if auto incrementing" do
73
73
  @db.create_table(:dolls) do
74
74
  primary_key :n4
75
75
  Integer :n2
76
76
  String :n3
77
77
  end
78
- @db.schema(:dolls).map{|k, v| v[:auto_increment]}.should == [true, nil, nil]
78
+ @db.schema(:dolls).map{|k, v| v[:auto_increment]}.must_equal [true, nil, nil]
79
79
  end
80
80
 
81
- specify "should support collate with various other column options" do
81
+ it "should support collate with various other column options" do
82
82
  @db.create_table!(:dolls){ String :name, :size=>128, :collate=>:utf8_bin, :default=>'foo', :null=>false, :unique=>true}
83
83
  @db[:dolls].insert
84
- @db[:dolls].select_map(:name).should == ["foo"]
84
+ @db[:dolls].select_map(:name).must_equal ["foo"]
85
85
  end
86
86
 
87
- specify "should be able to parse the default value for set and enum types" do
87
+ it "should be able to parse the default value for set and enum types" do
88
88
  @db.create_table!(:dolls){column :t, "set('a', 'b', 'c', 'd')", :default=>'a,b'}
89
- @db.schema(:dolls).first.last[:ruby_default].should == 'a,b'
89
+ @db.schema(:dolls).first.last[:ruby_default].must_equal 'a,b'
90
90
  @db.create_table!(:dolls){column :t, "enum('a', 'b', 'c', 'd')", :default=>'b'}
91
- @db.schema(:dolls).first.last[:ruby_default].should == 'b'
91
+ @db.schema(:dolls).first.last[:ruby_default].must_equal 'b'
92
92
  end
93
93
 
94
- specify "should allow setting auto_increment for existing column" do
94
+ it "should allow setting auto_increment for existing column" do
95
95
  @db.create_table(:dolls){Integer :a, :primary_key=>true}
96
- @db.schema(:dolls).first.last[:auto_increment].should == false
96
+ @db.schema(:dolls).first.last[:auto_increment].must_equal false
97
97
  @db.set_column_type :dolls, :a, Integer, :auto_increment=>true
98
- @db.schema(:dolls).first.last[:auto_increment].should == true
98
+ @db.schema(:dolls).first.last[:auto_increment].must_equal true
99
99
  end
100
100
  end
101
101
 
@@ -111,51 +111,51 @@ if [:mysql, :mysql2].include?(DB.adapter_scheme)
111
111
  @db.drop_table?(:booltest)
112
112
  end
113
113
 
114
- specify "should consider tinyint(1) datatypes as boolean if set, but not larger tinyints" do
115
- @db.schema(:booltest, :reload=>true).map{|_, s| s[:type]}.should == [:boolean, :integer]
114
+ it "should consider tinyint(1) datatypes as boolean if set, but not larger tinyints" do
115
+ @db.schema(:booltest, :reload=>true).map{|_, s| s[:type]}.must_equal [:boolean, :integer]
116
116
  @db.convert_tinyint_to_bool = false
117
- @db.schema(:booltest, :reload=>true).map{|_, s| s[:type]}.should == [:integer, :integer]
117
+ @db.schema(:booltest, :reload=>true).map{|_, s| s[:type]}.must_equal [:integer, :integer]
118
118
  end
119
119
 
120
- specify "should return tinyint(1)s as bools and tinyint(4)s as integers when set" do
120
+ it "should return tinyint(1)s as bools and tinyint(4)s as integers when set" do
121
121
  @db.convert_tinyint_to_bool = true
122
122
  @ds.delete
123
123
  @ds << {:b=>true, :i=>10}
124
- @ds.all.should == [{:b=>true, :i=>10}]
124
+ @ds.all.must_equal [{:b=>true, :i=>10}]
125
125
  @ds.delete
126
126
  @ds << {:b=>false, :i=>0}
127
- @ds.all.should == [{:b=>false, :i=>0}]
127
+ @ds.all.must_equal [{:b=>false, :i=>0}]
128
128
  @ds.delete
129
129
  @ds << {:b=>true, :i=>1}
130
- @ds.all.should == [{:b=>true, :i=>1}]
130
+ @ds.all.must_equal [{:b=>true, :i=>1}]
131
131
  end
132
132
 
133
- specify "should return all tinyints as integers when unset" do
133
+ it "should return all tinyints as integers when unset" do
134
134
  @db.convert_tinyint_to_bool = false
135
135
  @ds.delete
136
136
  @ds << {:b=>true, :i=>10}
137
- @ds.all.should == [{:b=>1, :i=>10}]
137
+ @ds.all.must_equal [{:b=>1, :i=>10}]
138
138
  @ds.delete
139
139
  @ds << {:b=>false, :i=>0}
140
- @ds.all.should == [{:b=>0, :i=>0}]
140
+ @ds.all.must_equal [{:b=>0, :i=>0}]
141
141
 
142
142
  @ds.delete
143
143
  @ds << {:b=>1, :i=>10}
144
- @ds.all.should == [{:b=>1, :i=>10}]
144
+ @ds.all.must_equal [{:b=>1, :i=>10}]
145
145
  @ds.delete
146
146
  @ds << {:b=>0, :i=>0}
147
- @ds.all.should == [{:b=>0, :i=>0}]
147
+ @ds.all.must_equal [{:b=>0, :i=>0}]
148
148
  end
149
149
 
150
- specify "should allow disabling the conversion on a per-dataset basis" do
150
+ it "should allow disabling the conversion on a per-dataset basis" do
151
151
  @db.convert_tinyint_to_bool = true
152
152
  ds = @ds.clone
153
153
  def ds.cast_tinyint_integer?(f) true end #mysql
154
154
  def ds.convert_tinyint_to_bool?() false end #mysql2
155
155
  ds.delete
156
156
  ds << {:b=>true, :i=>10}
157
- ds.all.should == [{:b=>1, :i=>10}]
158
- @ds.all.should == [{:b=>true, :i=>10}]
157
+ ds.all.must_equal [{:b=>1, :i=>10}]
158
+ @ds.all.must_equal [{:b=>true, :i=>10}]
159
159
  end
160
160
  end
161
161
  end
@@ -170,68 +170,68 @@ describe "A MySQL dataset" do
170
170
  DB.drop_table?(:items)
171
171
  end
172
172
 
173
- specify "should quote columns and tables using back-ticks if quoting identifiers" do
173
+ it "should quote columns and tables using back-ticks if quoting identifiers" do
174
174
  @d.quote_identifiers = true
175
- @d.select(:name).sql.should == 'SELECT `name` FROM `items`'
176
- @d.select(Sequel.lit('COUNT(*)')).sql.should == 'SELECT COUNT(*) FROM `items`'
177
- @d.select(Sequel.function(:max, :value)).sql.should == 'SELECT max(`value`) FROM `items`'
178
- @d.select(Sequel.function(:NOW)).sql.should == 'SELECT NOW() FROM `items`'
179
- @d.select(Sequel.function(:max, :items__value)).sql.should == 'SELECT max(`items`.`value`) FROM `items`'
180
- @d.order(Sequel.expr(:name).desc).sql.should == 'SELECT * FROM `items` ORDER BY `name` DESC'
181
- @d.select(Sequel.lit('items.name AS item_name')).sql.should == 'SELECT items.name AS item_name FROM `items`'
182
- @d.select(Sequel.lit('`name`')).sql.should == 'SELECT `name` FROM `items`'
183
- @d.select(Sequel.lit('max(items.`name`) AS `max_name`')).sql.should == 'SELECT max(items.`name`) AS `max_name` FROM `items`'
184
- @d.select(Sequel.function(:test, :abc, 'hello')).sql.should == "SELECT test(`abc`, 'hello') FROM `items`"
185
- @d.select(Sequel.function(:test, :abc__def, 'hello')).sql.should == "SELECT test(`abc`.`def`, 'hello') FROM `items`"
186
- @d.select(Sequel.function(:test, :abc__def, 'hello').as(:x2)).sql.should == "SELECT test(`abc`.`def`, 'hello') AS `x2` FROM `items`"
187
- @d.insert_sql(:value => 333).should == 'INSERT INTO `items` (`value`) VALUES (333)'
188
- @d.insert_sql(:x => :y).should == 'INSERT INTO `items` (`x`) VALUES (`y`)'
189
- end
190
-
191
- specify "should quote fields correctly when reversing the order" do
175
+ @d.select(:name).sql.must_equal 'SELECT `name` FROM `items`'
176
+ @d.select(Sequel.lit('COUNT(*)')).sql.must_equal 'SELECT COUNT(*) FROM `items`'
177
+ @d.select(Sequel.function(:max, :value)).sql.must_equal 'SELECT max(`value`) FROM `items`'
178
+ @d.select(Sequel.function(:NOW)).sql.must_equal 'SELECT NOW() FROM `items`'
179
+ @d.select(Sequel.function(:max, :items__value)).sql.must_equal 'SELECT max(`items`.`value`) FROM `items`'
180
+ @d.order(Sequel.expr(:name).desc).sql.must_equal 'SELECT * FROM `items` ORDER BY `name` DESC'
181
+ @d.select(Sequel.lit('items.name AS item_name')).sql.must_equal 'SELECT items.name AS item_name FROM `items`'
182
+ @d.select(Sequel.lit('`name`')).sql.must_equal 'SELECT `name` FROM `items`'
183
+ @d.select(Sequel.lit('max(items.`name`) AS `max_name`')).sql.must_equal 'SELECT max(items.`name`) AS `max_name` FROM `items`'
184
+ @d.select(Sequel.function(:test, :abc, 'hello')).sql.must_equal "SELECT test(`abc`, 'hello') FROM `items`"
185
+ @d.select(Sequel.function(:test, :abc__def, 'hello')).sql.must_equal "SELECT test(`abc`.`def`, 'hello') FROM `items`"
186
+ @d.select(Sequel.function(:test, :abc__def, 'hello').as(:x2)).sql.must_equal "SELECT test(`abc`.`def`, 'hello') AS `x2` FROM `items`"
187
+ @d.insert_sql(:value => 333).must_equal 'INSERT INTO `items` (`value`) VALUES (333)'
188
+ @d.insert_sql(:x => :y).must_equal 'INSERT INTO `items` (`x`) VALUES (`y`)'
189
+ end
190
+
191
+ it "should quote fields correctly when reversing the order" do
192
192
  @d.quote_identifiers = true
193
- @d.reverse_order(:name).sql.should == 'SELECT * FROM `items` ORDER BY `name` DESC'
194
- @d.reverse_order(Sequel.desc(:name)).sql.should == 'SELECT * FROM `items` ORDER BY `name` ASC'
195
- @d.reverse_order(:name, Sequel.desc(:test)).sql.should == 'SELECT * FROM `items` ORDER BY `name` DESC, `test` ASC'
196
- @d.reverse_order(Sequel.desc(:name), :test).sql.should == 'SELECT * FROM `items` ORDER BY `name` ASC, `test` DESC'
193
+ @d.reverse_order(:name).sql.must_equal 'SELECT * FROM `items` ORDER BY `name` DESC'
194
+ @d.reverse_order(Sequel.desc(:name)).sql.must_equal 'SELECT * FROM `items` ORDER BY `name` ASC'
195
+ @d.reverse_order(:name, Sequel.desc(:test)).sql.must_equal 'SELECT * FROM `items` ORDER BY `name` DESC, `test` ASC'
196
+ @d.reverse_order(Sequel.desc(:name), :test).sql.must_equal 'SELECT * FROM `items` ORDER BY `name` ASC, `test` DESC'
197
197
  end
198
198
 
199
- specify "should support ORDER clause in UPDATE statements" do
200
- @d.order(:name).update_sql(:value => 1).should == 'UPDATE `items` SET `value` = 1 ORDER BY `name`'
199
+ it "should support ORDER clause in UPDATE statements" do
200
+ @d.order(:name).update_sql(:value => 1).must_equal 'UPDATE `items` SET `value` = 1 ORDER BY `name`'
201
201
  end
202
202
 
203
- specify "should support LIMIT clause in UPDATE statements" do
204
- @d.limit(10).update_sql(:value => 1).should == 'UPDATE `items` SET `value` = 1 LIMIT 10'
203
+ it "should support LIMIT clause in UPDATE statements" do
204
+ @d.limit(10).update_sql(:value => 1).must_equal 'UPDATE `items` SET `value` = 1 LIMIT 10'
205
205
  end
206
206
 
207
- specify "should support regexps" do
207
+ it "should support regexps" do
208
208
  @d << {:name => 'abc', :value => 1}
209
209
  @d << {:name => 'bcd', :value => 2}
210
- @d.filter(:name => /bc/).count.should == 2
211
- @d.filter(:name => /^bc/).count.should == 1
210
+ @d.filter(:name => /bc/).count.must_equal 2
211
+ @d.filter(:name => /^bc/).count.must_equal 1
212
212
  end
213
213
 
214
- specify "should have explain output" do
215
- @d.explain.should be_a_kind_of(String)
216
- @d.explain(:extended=>true).should be_a_kind_of(String)
217
- @d.explain.should_not == @d.explain(:extended=>true)
214
+ it "should have explain output" do
215
+ @d.explain.must_be_kind_of(String)
216
+ @d.explain(:extended=>true).must_be_kind_of(String)
217
+ @d.explain.wont_equal @d.explain(:extended=>true)
218
218
  end
219
219
 
220
- specify "should correctly literalize strings with comment backslashes in them" do
220
+ it "should correctly literalize strings with comment backslashes in them" do
221
221
  @d.delete
222
- proc {@d << {:name => ':\\'}}.should_not raise_error
222
+ @d << {:name => ':\\'}
223
223
 
224
- @d.first[:name].should == ':\\'
224
+ @d.first[:name].must_equal ':\\'
225
225
  end
226
226
 
227
- specify "should handle prepared statements with on_duplicate_key_update" do
227
+ it "should handle prepared statements with on_duplicate_key_update" do
228
228
  @d.db.add_index :items, :value, :unique=>true
229
229
  ds = @d.on_duplicate_key_update
230
230
  ps = ds.prepare(:insert, :insert_user_id_feature_name, :value => :$v, :name => :$n)
231
231
  ps.call(:v => 1, :n => 'a')
232
- ds.all.should == [{:value=>1, :name=>'a'}]
232
+ ds.all.must_equal [{:value=>1, :name=>'a'}]
233
233
  ps.call(:v => 1, :n => 'b')
234
- ds.all.should == [{:value=>1, :name=>'b'}]
234
+ ds.all.must_equal [{:value=>1, :name=>'b'}]
235
235
  end
236
236
  end
237
237
 
@@ -240,13 +240,13 @@ describe "MySQL datasets" do
240
240
  @d = DB[:orders]
241
241
  end
242
242
 
243
- specify "should correctly quote column references" do
243
+ it "should correctly quote column references" do
244
244
  @d.quote_identifiers = true
245
245
  market = 'ICE'
246
246
  ack_stamp = Time.now - 15 * 60 # 15 minutes ago
247
247
  @d.select(:market, Sequel.function(:minute, Sequel.function(:from_unixtime, :ack)).as(:minute)).
248
248
  where{(ack > ack_stamp) & {:market => market}}.
249
- group_by(Sequel.function(:minute, Sequel.function(:from_unixtime, :ack))).sql.should == \
249
+ group_by(Sequel.function(:minute, Sequel.function(:from_unixtime, :ack))).sql.must_equal \
250
250
  "SELECT `market`, minute(from_unixtime(`ack`)) AS `minute` FROM `orders` WHERE ((`ack` > #{@d.literal(ack_stamp)}) AND (`market` = 'ICE')) GROUP BY minute(from_unixtime(`ack`))"
251
251
  end
252
252
  end
@@ -267,10 +267,10 @@ describe "Dataset#distinct" do
267
267
  it "#distinct with arguments should return results distinct on those arguments" do
268
268
  @ds.insert(20, 10)
269
269
  @ds.insert(30, 10)
270
- @ds.order(:b, :a).distinct.map(:a).should == [20, 30]
271
- @ds.order(:b, Sequel.desc(:a)).distinct.map(:a).should == [30, 20]
270
+ @ds.order(:b, :a).distinct.map(:a).must_equal [20, 30]
271
+ @ds.order(:b, Sequel.desc(:a)).distinct.map(:a).must_equal [30, 20]
272
272
  # MySQL doesn't respect orders when using the nonstandard GROUP BY
273
- [[20], [30]].should include(@ds.order(:b, :a).distinct(:b).map(:a))
273
+ [[20], [30]].must_include(@ds.order(:b, :a).distinct(:b).map(:a))
274
274
  end
275
275
  end
276
276
 
@@ -279,48 +279,38 @@ describe "MySQL join expressions" do
279
279
  @ds = DB[:nodes]
280
280
  end
281
281
 
282
- specify "should raise error for :full_outer join requests." do
283
- lambda{@ds.join_table(:full_outer, :nodes)}.should raise_error(Sequel::Error)
282
+ it "should raise error for :full_outer join requests." do
283
+ lambda{@ds.join_table(:full_outer, :nodes)}.must_raise(Sequel::Error)
284
284
  end
285
- specify "should support natural left joins" do
286
- @ds.join_table(:natural_left, :nodes).sql.should == \
287
- 'SELECT * FROM `nodes` NATURAL LEFT JOIN `nodes`'
285
+ it "should support natural left joins" do
286
+ @ds.join_table(:natural_left, :nodes).sql.must_equal 'SELECT * FROM `nodes` NATURAL LEFT JOIN `nodes`'
288
287
  end
289
- specify "should support natural right joins" do
290
- @ds.join_table(:natural_right, :nodes).sql.should == \
291
- 'SELECT * FROM `nodes` NATURAL RIGHT JOIN `nodes`'
288
+ it "should support natural right joins" do
289
+ @ds.join_table(:natural_right, :nodes).sql.must_equal 'SELECT * FROM `nodes` NATURAL RIGHT JOIN `nodes`'
292
290
  end
293
- specify "should support natural left outer joins" do
294
- @ds.join_table(:natural_left_outer, :nodes).sql.should == \
295
- 'SELECT * FROM `nodes` NATURAL LEFT OUTER JOIN `nodes`'
291
+ it "should support natural left outer joins" do
292
+ @ds.join_table(:natural_left_outer, :nodes).sql.must_equal 'SELECT * FROM `nodes` NATURAL LEFT OUTER JOIN `nodes`'
296
293
  end
297
- specify "should support natural right outer joins" do
298
- @ds.join_table(:natural_right_outer, :nodes).sql.should == \
299
- 'SELECT * FROM `nodes` NATURAL RIGHT OUTER JOIN `nodes`'
294
+ it "should support natural right outer joins" do
295
+ @ds.join_table(:natural_right_outer, :nodes).sql.must_equal 'SELECT * FROM `nodes` NATURAL RIGHT OUTER JOIN `nodes`'
300
296
  end
301
- specify "should support natural inner joins" do
302
- @ds.join_table(:natural_inner, :nodes).sql.should == \
303
- 'SELECT * FROM `nodes` NATURAL LEFT JOIN `nodes`'
297
+ it "should support natural inner joins" do
298
+ @ds.join_table(:natural_inner, :nodes).sql.must_equal 'SELECT * FROM `nodes` NATURAL LEFT JOIN `nodes`'
304
299
  end
305
- specify "should support cross joins" do
306
- @ds.join_table(:cross, :nodes).sql.should == \
307
- 'SELECT * FROM `nodes` CROSS JOIN `nodes`'
300
+ it "should support cross joins" do
301
+ @ds.join_table(:cross, :nodes).sql.must_equal 'SELECT * FROM `nodes` CROSS JOIN `nodes`'
308
302
  end
309
- specify "should support cross joins as inner joins if conditions are used" do
310
- @ds.join_table(:cross, :nodes, :id=>:id).sql.should == \
311
- 'SELECT * FROM `nodes` INNER JOIN `nodes` ON (`nodes`.`id` = `nodes`.`id`)'
303
+ it "should support cross joins as inner joins if conditions are used" do
304
+ @ds.join_table(:cross, :nodes, :id=>:id).sql.must_equal 'SELECT * FROM `nodes` INNER JOIN `nodes` ON (`nodes`.`id` = `nodes`.`id`)'
312
305
  end
313
- specify "should support straight joins (force left table to be read before right)" do
314
- @ds.join_table(:straight, :nodes).sql.should == \
315
- 'SELECT * FROM `nodes` STRAIGHT_JOIN `nodes`'
306
+ it "should support straight joins (force left table to be read before right)" do
307
+ @ds.join_table(:straight, :nodes).sql.must_equal 'SELECT * FROM `nodes` STRAIGHT_JOIN `nodes`'
316
308
  end
317
- specify "should support natural joins on multiple tables." do
318
- @ds.join_table(:natural_left_outer, [:nodes, :branches]).sql.should == \
319
- 'SELECT * FROM `nodes` NATURAL LEFT OUTER JOIN (`nodes`, `branches`)'
309
+ it "should support natural joins on multiple tables." do
310
+ @ds.join_table(:natural_left_outer, [:nodes, :branches]).sql.must_equal 'SELECT * FROM `nodes` NATURAL LEFT OUTER JOIN (`nodes`, `branches`)'
320
311
  end
321
- specify "should support straight joins on multiple tables." do
322
- @ds.join_table(:straight, [:nodes,:branches]).sql.should == \
323
- 'SELECT * FROM `nodes` STRAIGHT_JOIN (`nodes`, `branches`)'
312
+ it "should support straight joins on multiple tables." do
313
+ @ds.join_table(:straight, [:nodes,:branches]).sql.must_equal 'SELECT * FROM `nodes` STRAIGHT_JOIN (`nodes`, `branches`)'
324
314
  end
325
315
  end
326
316
 
@@ -329,22 +319,19 @@ describe "Joined MySQL dataset" do
329
319
  @ds = DB[:nodes]
330
320
  end
331
321
 
332
- specify "should quote fields correctly" do
322
+ it "should quote fields correctly" do
333
323
  @ds.quote_identifiers = true
334
- @ds.join(:attributes, :node_id => :id).sql.should == \
335
- "SELECT * FROM `nodes` INNER JOIN `attributes` ON (`attributes`.`node_id` = `nodes`.`id`)"
324
+ @ds.join(:attributes, :node_id => :id).sql.must_equal "SELECT * FROM `nodes` INNER JOIN `attributes` ON (`attributes`.`node_id` = `nodes`.`id`)"
336
325
  end
337
326
 
338
- specify "should allow a having clause on ungrouped datasets" do
339
- proc {@ds.having('blah')}.should_not raise_error
327
+ it "should allow a having clause on ungrouped datasets" do
328
+ @ds.having('blah')
340
329
 
341
- @ds.having('blah').sql.should == \
342
- "SELECT * FROM `nodes` HAVING (blah)"
330
+ @ds.having('blah').sql.must_equal "SELECT * FROM `nodes` HAVING (blah)"
343
331
  end
344
332
 
345
- specify "should put a having clause before an order by clause" do
346
- @ds.order(:aaa).having(:bbb => :ccc).sql.should == \
347
- "SELECT * FROM `nodes` HAVING (`bbb` = `ccc`) ORDER BY `aaa`"
333
+ it "should put a having clause before an order by clause" do
334
+ @ds.order(:aaa).having(:bbb => :ccc).sql.must_equal "SELECT * FROM `nodes` HAVING (`bbb` = `ccc`) ORDER BY `aaa`"
348
335
  end
349
336
  end
350
337
 
@@ -353,8 +340,8 @@ describe "A MySQL database" do
353
340
  DB.drop_table?(:test_innodb)
354
341
  end
355
342
 
356
- specify "should handle the creation and dropping of an InnoDB table with foreign keys" do
357
- proc{DB.create_table!(:test_innodb, :engine=>:InnoDB){primary_key :id; foreign_key :fk, :test_innodb, :key=>:id}}.should_not raise_error
343
+ it "should handle the creation and dropping of an InnoDB table with foreign keys" do
344
+ DB.create_table!(:test_innodb, :engine=>:InnoDB){primary_key :id; foreign_key :fk, :test_innodb, :key=>:id}
358
345
  end
359
346
  end
360
347
 
@@ -370,82 +357,70 @@ describe "A MySQL database" do
370
357
  @db.drop_table?(:test2)
371
358
  end
372
359
 
373
- specify "should provide the server version" do
374
- @db.server_version.should >= 40000
360
+ it "should provide the server version" do
361
+ @db.server_version.must_be :>=, 40000
375
362
  end
376
363
 
377
- specify "should cache the server version" do
364
+ it "should cache the server version" do
378
365
  # warm cache:
379
366
  @db.server_version
380
367
  @db.sqls.clear
381
368
  3.times{@db.server_version}
382
- @db.sqls.should be_empty
369
+ @db.sqls.must_be :empty?
383
370
  end
384
371
 
385
- specify "should support for_share" do
386
- @db.transaction{@db[:test2].for_share.all.should == []}
372
+ it "should support for_share" do
373
+ @db[:test2].delete
374
+ @db.transaction{@db[:test2].for_share.all.must_equal []}
387
375
  end
388
376
 
389
- specify "should support add_column operations" do
377
+ it "should support column operations" do
390
378
  @db.add_column :test2, :xyz, :text
391
379
 
392
- @db[:test2].columns.should == [:name, :value, :xyz]
380
+ @db[:test2].columns.must_equal [:name, :value, :xyz]
393
381
  @db[:test2] << {:name => 'mmm', :value => 111, :xyz => '000'}
394
- @db[:test2].first[:xyz].should == '000'
395
- end
382
+ @db[:test2].first[:xyz].must_equal '000'
396
383
 
397
- specify "should support drop_column operations" do
398
- @db[:test2].columns.should == [:name, :value, :xyz]
384
+ @db[:test2].columns.must_equal [:name, :value, :xyz]
399
385
  @db.drop_column :test2, :xyz
400
386
 
401
- @db[:test2].columns.should == [:name, :value]
402
- end
387
+ @db[:test2].columns.must_equal [:name, :value]
403
388
 
404
- specify "should support rename_column operations" do
405
389
  @db[:test2].delete
406
390
  @db.add_column :test2, :xyz, :text
407
391
  @db[:test2] << {:name => 'mmm', :value => 111, :xyz => 'qqqq'}
408
392
 
409
- @db[:test2].columns.should == [:name, :value, :xyz]
393
+ @db[:test2].columns.must_equal [:name, :value, :xyz]
410
394
  @db.rename_column :test2, :xyz, :zyx, :type => :text
411
- @db[:test2].columns.should == [:name, :value, :zyx]
412
- @db[:test2].first[:zyx].should == 'qqqq'
413
- end
395
+ @db[:test2].columns.must_equal [:name, :value, :zyx]
396
+ @db[:test2].first[:zyx].must_equal 'qqqq'
414
397
 
415
- specify "should support rename_column operations with types like varchar(255)" do
416
398
  @db[:test2].delete
417
399
  @db.add_column :test2, :tre, :text
418
400
  @db[:test2] << {:name => 'mmm', :value => 111, :tre => 'qqqq'}
419
401
 
420
- @db[:test2].columns.should == [:name, :value, :zyx, :tre]
402
+ @db[:test2].columns.must_equal [:name, :value, :zyx, :tre]
421
403
  @db.rename_column :test2, :tre, :ert, :type => :varchar, :size=>255
422
- @db[:test2].columns.should == [:name, :value, :zyx, :ert]
423
- @db[:test2].first[:ert].should == 'qqqq'
424
- end
404
+ @db[:test2].columns.must_equal [:name, :value, :zyx, :ert]
405
+ @db[:test2].first[:ert].must_equal 'qqqq'
425
406
 
426
- specify "should support set_column_type operations" do
427
407
  @db.add_column :test2, :xyz, :float
428
408
  @db[:test2].delete
429
409
  @db[:test2] << {:name => 'mmm', :value => 111, :xyz => 56.78}
430
410
  @db.set_column_type :test2, :xyz, :integer
431
411
 
432
- @db[:test2].first[:xyz].should == 57
433
- end
412
+ @db[:test2].first[:xyz].must_equal 57
434
413
 
435
- specify "should support add_index" do
436
- @db.add_index :test2, :value
437
- end
438
-
439
- specify "should support drop_index" do
440
- @db.drop_index :test2, :value
441
- end
442
-
443
- specify "should support add_foreign_key" do
444
414
  @db.alter_table :test2 do
445
415
  add_index :value, :unique=>true
446
416
  add_foreign_key :value2, :test2, :key=>:value
447
417
  end
448
- @db[:test2].columns.should == [:name, :value, :zyx, :ert, :xyz, :value2]
418
+ @db[:test2].columns.must_equal [:name, :value, :zyx, :ert, :xyz, :value2]
419
+
420
+ @db.alter_table :test2 do
421
+ drop_foreign_key :value2
422
+ drop_index :value
423
+ end
449
424
  end
450
425
  end
451
426
 
@@ -470,24 +445,24 @@ describe "A MySQL database with table options" do
470
445
  Sequel::MySQL.default_collate = nil
471
446
  end
472
447
 
473
- specify "should allow to pass custom options (engine, charset, collate) for table creation" do
448
+ it "should allow to pass custom options (engine, charset, collate) for table creation" do
474
449
  @db.create_table(:items, @options){Integer :size; text :name}
475
450
  check_sqls do
476
- @db.sqls.should == ["CREATE TABLE `items` (`size` integer, `name` text) ENGINE=MyISAM DEFAULT CHARSET=latin1 DEFAULT COLLATE=latin1_swedish_ci"]
451
+ @db.sqls.must_equal ["CREATE TABLE `items` (`size` integer, `name` text) ENGINE=MyISAM DEFAULT CHARSET=latin1 DEFAULT COLLATE=latin1_swedish_ci"]
477
452
  end
478
453
  end
479
454
 
480
- specify "should use default options if specified (engine, charset, collate) for table creation" do
455
+ it "should use default options if specified (engine, charset, collate) for table creation" do
481
456
  @db.create_table(:items){Integer :size; text :name}
482
457
  check_sqls do
483
- @db.sqls.should == ["CREATE TABLE `items` (`size` integer, `name` text) ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_general_ci"]
458
+ @db.sqls.must_equal ["CREATE TABLE `items` (`size` integer, `name` text) ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE=utf8_general_ci"]
484
459
  end
485
460
  end
486
461
 
487
- specify "should not use default if option has a nil value" do
462
+ it "should not use default if option has a nil value" do
488
463
  @db.create_table(:items, :engine=>nil, :charset=>nil, :collate=>nil){Integer :size; text :name}
489
464
  check_sqls do
490
- @db.sqls.should == ["CREATE TABLE `items` (`size` integer, `name` text)"]
465
+ @db.sqls.must_equal ["CREATE TABLE `items` (`size` integer, `name` text)"]
491
466
  end
492
467
  end
493
468
  end
@@ -502,146 +477,146 @@ describe "A MySQL database" do
502
477
  @db.drop_table?(:items, :users)
503
478
  end
504
479
 
505
- specify "should support defaults for boolean columns" do
480
+ it "should support defaults for boolean columns" do
506
481
  @db.create_table(:items){TrueClass :active1, :default=>true; FalseClass :active2, :default => false}
507
482
  check_sqls do
508
- @db.sqls.should == ["CREATE TABLE `items` (`active1` tinyint(1) DEFAULT 1, `active2` tinyint(1) DEFAULT 0)"]
483
+ @db.sqls.must_equal ["CREATE TABLE `items` (`active1` tinyint(1) DEFAULT 1, `active2` tinyint(1) DEFAULT 0)"]
509
484
  end
510
485
  end
511
486
 
512
- specify "should correctly format CREATE TABLE statements with foreign keys" do
487
+ it "should correctly format CREATE TABLE statements with foreign keys" do
513
488
  @db.create_table(:items){primary_key :id; foreign_key :p_id, :items, :key => :id, :null => false, :on_delete => :cascade}
514
489
  check_sqls do
515
- @db.sqls.should == ["CREATE TABLE `items` (`id` integer PRIMARY KEY AUTO_INCREMENT, `p_id` integer NOT NULL, UNIQUE (`id`), FOREIGN KEY (`p_id`) REFERENCES `items`(`id`) ON DELETE CASCADE)"]
490
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` integer PRIMARY KEY AUTO_INCREMENT, `p_id` integer NOT NULL, UNIQUE (`id`), FOREIGN KEY (`p_id`) REFERENCES `items`(`id`) ON DELETE CASCADE)"]
516
491
  end
517
492
  end
518
493
 
519
- specify "should correctly format CREATE TABLE statements with foreign keys, when :key != the default (:id)" do
494
+ it "should correctly format CREATE TABLE statements with foreign keys, when :key != the default (:id)" do
520
495
  @db.create_table(:items){primary_key :id; Integer :other_than_id; foreign_key :p_id, :items, :key => :other_than_id, :null => false, :on_delete => :cascade}
521
496
  check_sqls do
522
- @db.sqls.should == ["CREATE TABLE `items` (`id` integer PRIMARY KEY AUTO_INCREMENT, `other_than_id` integer, `p_id` integer NOT NULL, UNIQUE (`other_than_id`), FOREIGN KEY (`p_id`) REFERENCES `items`(`other_than_id`) ON DELETE CASCADE)"]
497
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` integer PRIMARY KEY AUTO_INCREMENT, `other_than_id` integer, `p_id` integer NOT NULL, UNIQUE (`other_than_id`), FOREIGN KEY (`p_id`) REFERENCES `items`(`other_than_id`) ON DELETE CASCADE)"]
523
498
  end
524
499
  end
525
500
 
526
- specify "should correctly format ALTER TABLE statements with foreign keys" do
501
+ it "should correctly format ALTER TABLE statements with foreign keys" do
527
502
  @db.create_table(:items){Integer :id}
528
503
  @db.create_table(:users){primary_key :id}
529
504
  @db.alter_table(:items){add_foreign_key :p_id, :users, :key => :id, :null => false, :on_delete => :cascade}
530
505
  check_sqls do
531
- @db.sqls.should == ["CREATE TABLE `items` (`id` integer)",
506
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` integer)",
532
507
  "CREATE TABLE `users` (`id` integer PRIMARY KEY AUTO_INCREMENT)",
533
508
  "ALTER TABLE `items` ADD COLUMN `p_id` integer NOT NULL, ADD FOREIGN KEY (`p_id`) REFERENCES `users`(`id`) ON DELETE CASCADE"]
534
509
  end
535
510
  end
536
511
 
537
- specify "should correctly format ALTER TABLE statements with named foreign keys" do
512
+ it "should correctly format ALTER TABLE statements with named foreign keys" do
538
513
  @db.create_table(:items){Integer :id}
539
514
  @db.create_table(:users){primary_key :id}
540
515
  @db.alter_table(:items){add_foreign_key :p_id, :users, :key => :id, :null => false, :on_delete => :cascade, :foreign_key_constraint_name => :pk_items__users }
541
516
  check_sqls do
542
- @db.sqls.should == ["CREATE TABLE `items` (`id` integer)",
517
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` integer)",
543
518
  "CREATE TABLE `users` (`id` integer PRIMARY KEY AUTO_INCREMENT)",
544
519
  "ALTER TABLE `items` ADD COLUMN `p_id` integer NOT NULL, ADD CONSTRAINT `pk_items__users` FOREIGN KEY (`p_id`) REFERENCES `users`(`id`) ON DELETE CASCADE"]
545
520
  end
546
521
  end
547
522
 
548
- specify "should have rename_column support keep existing options" do
523
+ it "should have rename_column support keep existing options" do
549
524
  @db.create_table(:items){String :id, :null=>false, :default=>'blah'}
550
525
  @db.alter_table(:items){rename_column :id, :nid}
551
526
  check_sqls do
552
- @db.sqls.should == ["CREATE TABLE `items` (`id` varchar(255) NOT NULL DEFAULT 'blah')", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `nid` varchar(255) NOT NULL DEFAULT 'blah'"]
527
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` varchar(255) NOT NULL DEFAULT 'blah')", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `nid` varchar(255) NOT NULL DEFAULT 'blah'"]
553
528
  end
554
529
  @db[:items].insert
555
- @db[:items].all.should == [{:nid=>'blah'}]
556
- proc{@db[:items].insert(:nid=>nil)}.should raise_error(Sequel::DatabaseError)
530
+ @db[:items].all.must_equal [{:nid=>'blah'}]
531
+ proc{@db[:items].insert(:nid=>nil)}.must_raise(Sequel::NotNullConstraintViolation)
557
532
  end
558
533
 
559
- specify "should have set_column_type support keep existing options" do
534
+ it "should have set_column_type support keep existing options" do
560
535
  @db.create_table(:items){Integer :id, :null=>false, :default=>5}
561
536
  @db.alter_table(:items){set_column_type :id, Bignum}
562
537
  check_sqls do
563
- @db.sqls.should == ["CREATE TABLE `items` (`id` integer NOT NULL DEFAULT 5)", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `id` bigint NOT NULL DEFAULT 5"]
538
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` integer NOT NULL DEFAULT 5)", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `id` bigint NOT NULL DEFAULT 5"]
564
539
  end
565
540
  @db[:items].insert
566
- @db[:items].all.should == [{:id=>5}]
567
- proc{@db[:items].insert(:id=>nil)}.should raise_error(Sequel::DatabaseError)
541
+ @db[:items].all.must_equal [{:id=>5}]
542
+ proc{@db[:items].insert(:id=>nil)}.must_raise(Sequel::NotNullConstraintViolation)
568
543
  @db[:items].delete
569
544
  @db[:items].insert(2**40)
570
- @db[:items].all.should == [{:id=>2**40}]
545
+ @db[:items].all.must_equal [{:id=>2**40}]
571
546
  end
572
547
 
573
- specify "should have set_column_type pass through options" do
548
+ it "should have set_column_type pass through options" do
574
549
  @db.create_table(:items){integer :id; enum :list, :elements=>%w[one]}
575
550
  @db.alter_table(:items){set_column_type :id, :int, :unsigned=>true, :size=>8; set_column_type :list, :enum, :elements=>%w[two]}
576
551
  check_sqls do
577
- @db.sqls.should == ["CREATE TABLE `items` (`id` integer, `list` enum('one'))", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `id` int(8) UNSIGNED NULL, CHANGE COLUMN `list` `list` enum('two') NULL"]
552
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` integer, `list` enum('one'))", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `id` int(8) UNSIGNED NULL, CHANGE COLUMN `list` `list` enum('two') NULL"]
578
553
  end
579
554
  end
580
555
 
581
- specify "should have set_column_default support keep existing options" do
556
+ it "should have set_column_default support keep existing options" do
582
557
  @db.create_table(:items){Integer :id, :null=>false, :default=>5}
583
558
  @db.alter_table(:items){set_column_default :id, 6}
584
559
  check_sqls do
585
- @db.sqls.should == ["CREATE TABLE `items` (`id` integer NOT NULL DEFAULT 5)", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `id` int(11) NOT NULL DEFAULT 6"]
560
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` integer NOT NULL DEFAULT 5)", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `id` int(11) NOT NULL DEFAULT 6"]
586
561
  end
587
562
  @db[:items].insert
588
- @db[:items].all.should == [{:id=>6}]
589
- proc{@db[:items].insert(:id=>nil)}.should raise_error(Sequel::DatabaseError)
563
+ @db[:items].all.must_equal [{:id=>6}]
564
+ proc{@db[:items].insert(:id=>nil)}.must_raise(Sequel::NotNullConstraintViolation)
590
565
  end
591
566
 
592
- specify "should have set_column_allow_null support keep existing options" do
567
+ it "should have set_column_allow_null support keep existing options" do
593
568
  @db.create_table(:items){Integer :id, :null=>false, :default=>5}
594
569
  @db.alter_table(:items){set_column_allow_null :id, true}
595
570
  check_sqls do
596
- @db.sqls.should == ["CREATE TABLE `items` (`id` integer NOT NULL DEFAULT 5)", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `id` int(11) NULL DEFAULT 5"]
571
+ @db.sqls.must_equal ["CREATE TABLE `items` (`id` integer NOT NULL DEFAULT 5)", "DESCRIBE `items`", "ALTER TABLE `items` CHANGE COLUMN `id` `id` int(11) NULL DEFAULT 5"]
597
572
  end
598
573
  @db[:items].insert
599
- @db[:items].all.should == [{:id=>5}]
600
- proc{@db[:items].insert(:id=>nil)}.should_not
574
+ @db[:items].all.must_equal [{:id=>5}]
575
+ @db[:items].insert(:id=>nil)
601
576
  end
602
577
 
603
- specify "should accept repeated raw sql statements using Database#<<" do
578
+ it "should accept repeated raw sql statements using Database#<<" do
604
579
  @db.create_table(:items){String :name; Integer :value}
605
580
  @db << 'DELETE FROM items'
606
- @db[:items].count.should == 0
581
+ @db[:items].count.must_equal 0
607
582
 
608
583
  @db << "INSERT INTO items (name, value) VALUES ('tutu', 1234)"
609
- @db[:items].first.should == {:name => 'tutu', :value => 1234}
584
+ @db[:items].first.must_equal(:name => 'tutu', :value => 1234)
610
585
 
611
586
  @db << 'DELETE FROM items'
612
- @db[:items].first.should == nil
587
+ @db[:items].first.must_equal nil
613
588
  end
614
589
  end
615
590
 
616
591
  # Socket tests should only be run if the MySQL server is on localhost
617
592
  if %w'localhost 127.0.0.1 ::1'.include?(MYSQL_URI.host) and DB.adapter_scheme == :mysql
618
593
  describe "A MySQL database" do
619
- specify "should accept a socket option" do
594
+ it "should accept a socket option" do
620
595
  db = Sequel.mysql(DB.opts[:database], :host => 'localhost', :user => DB.opts[:user], :password => DB.opts[:password], :socket => MYSQL_SOCKET_FILE)
621
- proc {db.test_connection}.should_not raise_error
596
+ db.test_connection
622
597
  end
623
598
 
624
- specify "should accept a socket option without host option" do
599
+ it "should accept a socket option without host option" do
625
600
  db = Sequel.mysql(DB.opts[:database], :user => DB.opts[:user], :password => DB.opts[:password], :socket => MYSQL_SOCKET_FILE)
626
- proc {db.test_connection}.should_not raise_error
601
+ db.test_connection
627
602
  end
628
603
 
629
- specify "should fail to connect with invalid socket" do
604
+ it "should fail to connect with invalid socket" do
630
605
  db = Sequel.mysql(DB.opts[:database], :user => DB.opts[:user], :password => DB.opts[:password], :socket =>'blah')
631
- proc {db.test_connection}.should raise_error
606
+ proc{db.test_connection}.must_raise Sequel::DatabaseConnectionError
632
607
  end
633
608
  end
634
609
  end
635
610
 
636
611
  describe "A MySQL database" do
637
- specify "should accept a read_timeout option when connecting" do
612
+ it "should accept a read_timeout option when connecting" do
638
613
  db = Sequel.connect(DB.opts.merge(:read_timeout=>22342))
639
- proc {db.test_connection}.should_not raise_error
614
+ db.test_connection
640
615
  end
641
616
 
642
- specify "should accept a connect_timeout option when connecting" do
617
+ it "should accept a connect_timeout option when connecting" do
643
618
  db = Sequel.connect(DB.opts.merge(:connect_timeout=>22342))
644
- proc {db.test_connection}.should_not raise_error
619
+ db.test_connection
645
620
  end
646
621
  end
647
622
 
@@ -650,42 +625,42 @@ describe "MySQL foreign key support" do
650
625
  DB.drop_table?(:testfk, :testpk)
651
626
  end
652
627
 
653
- specify "should create table without :key" do
628
+ it "should create table without :key" do
654
629
  DB.create_table!(:testpk){primary_key :id}
655
630
  DB.create_table!(:testfk){foreign_key :fk, :testpk}
656
631
  end
657
632
 
658
- specify "should create table with composite keys without :key" do
633
+ it "should create table with composite keys without :key" do
659
634
  DB.create_table!(:testpk){Integer :id; Integer :id2; primary_key([:id, :id2])}
660
635
  DB.create_table!(:testfk){Integer :fk; Integer :fk2; foreign_key([:fk, :fk2], :testpk)}
661
636
  end
662
637
 
663
- specify "should create table with self referential without :key" do
638
+ it "should create table with self referential without :key" do
664
639
  DB.create_table!(:testfk){primary_key :id; foreign_key :fk, :testfk}
665
640
  end
666
641
 
667
- specify "should create table with self referential with composite keys without :key" do
642
+ it "should create table with self referential with composite keys without :key" do
668
643
  DB.create_table!(:testfk){Integer :id; Integer :id2; Integer :fk; Integer :fk2; primary_key([:id, :id2]); foreign_key([:fk, :fk2], :testfk)}
669
644
  end
670
645
 
671
- specify "should alter table without :key" do
646
+ it "should alter table without :key" do
672
647
  DB.create_table!(:testpk){primary_key :id}
673
648
  DB.create_table!(:testfk){Integer :id}
674
649
  DB.alter_table(:testfk){add_foreign_key :fk, :testpk}
675
650
  end
676
651
 
677
- specify "should alter table with composite keys without :key" do
652
+ it "should alter table with composite keys without :key" do
678
653
  DB.create_table!(:testpk){Integer :id; Integer :id2; primary_key([:id, :id2])}
679
654
  DB.create_table!(:testfk){Integer :fk; Integer :fk2}
680
655
  DB.alter_table(:testfk){add_foreign_key([:fk, :fk2], :testpk)}
681
656
  end
682
657
 
683
- specify "should alter table with self referential without :key" do
658
+ it "should alter table with self referential without :key" do
684
659
  DB.create_table!(:testfk){primary_key :id}
685
660
  DB.alter_table(:testfk){add_foreign_key :fk, :testfk}
686
661
  end
687
662
 
688
- specify "should alter table with self referential with composite keys without :key" do
663
+ it "should alter table with self referential with composite keys without :key" do
689
664
  DB.create_table!(:testfk){Integer :id; Integer :id2; Integer :fk; Integer :fk2; primary_key([:id, :id2])}
690
665
  DB.alter_table(:testfk){add_foreign_key [:fk, :fk2], :testfk}
691
666
  end
@@ -708,14 +683,14 @@ describe "A grouped MySQL dataset" do
708
683
  DB.drop_table?(:test2)
709
684
  end
710
685
 
711
- specify "should return the correct count for raw sql query" do
686
+ it "should return the correct count for raw sql query" do
712
687
  ds = DB["select name FROM test2 WHERE name = '11' GROUP BY name"]
713
- ds.count.should == 1
688
+ ds.count.must_equal 1
714
689
  end
715
690
 
716
- specify "should return the correct count for a normal dataset" do
691
+ it "should return the correct count for a normal dataset" do
717
692
  ds = DB[:test2].select(:name).where(:name => '11').group(:name)
718
- ds.count.should == 1
693
+ ds.count.must_equal 1
719
694
  end
720
695
  end
721
696
 
@@ -729,10 +704,10 @@ describe "A MySQL database" do
729
704
  @db.drop_table?(:posts)
730
705
  end
731
706
 
732
- specify "should support fulltext indexes and full_text_search" do
707
+ it "should support fulltext indexes and full_text_search" do
733
708
  @db.create_table(:posts, :engine=>:MyISAM){text :title; text :body; full_text_index :title; full_text_index [:title, :body]}
734
709
  check_sqls do
735
- @db.sqls.should == [
710
+ @db.sqls.must_equal [
736
711
  "CREATE TABLE `posts` (`title` text, `body` text) ENGINE=MyISAM",
737
712
  "CREATE FULLTEXT INDEX `posts_title_index` ON `posts` (`title`)",
738
713
  "CREATE FULLTEXT INDEX `posts_title_body_index` ON `posts` (`title`, `body`)"
@@ -744,60 +719,60 @@ describe "A MySQL database" do
744
719
  @db[:posts].insert(:title=>'ruby scooby', :body=>'x')
745
720
  @db.sqls.clear
746
721
 
747
- @db[:posts].full_text_search(:title, 'rails').all.should == [{:title=>'ruby rails', :body=>'y'}]
748
- @db[:posts].full_text_search([:title, :body], ['sequel', 'ruby']).all.should == [{:title=>'sequel', :body=>'ruby'}]
749
- @db[:posts].full_text_search(:title, '+ruby -rails', :boolean => true).all.should == [{:title=>'ruby scooby', :body=>'x'}]
722
+ @db[:posts].full_text_search(:title, 'rails').all.must_equal [{:title=>'ruby rails', :body=>'y'}]
723
+ @db[:posts].full_text_search([:title, :body], ['sequel', 'ruby']).all.must_equal [{:title=>'sequel', :body=>'ruby'}]
724
+ @db[:posts].full_text_search(:title, '+ruby -rails', :boolean => true).all.must_equal [{:title=>'ruby scooby', :body=>'x'}]
750
725
  check_sqls do
751
- @db.sqls.should == [
726
+ @db.sqls.must_equal [
752
727
  "SELECT * FROM `posts` WHERE (MATCH (`title`) AGAINST ('rails'))",
753
728
  "SELECT * FROM `posts` WHERE (MATCH (`title`, `body`) AGAINST ('sequel ruby'))",
754
729
  "SELECT * FROM `posts` WHERE (MATCH (`title`) AGAINST ('+ruby -rails' IN BOOLEAN MODE))"]
755
730
  end
756
731
 
757
- @db[:posts].full_text_search(:title, :$n).call(:select, :n=>'rails').should == [{:title=>'ruby rails', :body=>'y'}]
758
- @db[:posts].full_text_search(:title, :$n).prepare(:select, :fts_select).call(:n=>'rails').should == [{:title=>'ruby rails', :body=>'y'}]
732
+ @db[:posts].full_text_search(:title, :$n).call(:select, :n=>'rails').must_equal [{:title=>'ruby rails', :body=>'y'}]
733
+ @db[:posts].full_text_search(:title, :$n).prepare(:select, :fts_select).call(:n=>'rails').must_equal [{:title=>'ruby rails', :body=>'y'}]
759
734
  end
760
735
 
761
- specify "should support spatial indexes" do
736
+ it "should support spatial indexes" do
762
737
  @db.create_table(:posts, :engine=>:MyISAM){point :geom, :null=>false; spatial_index [:geom]}
763
738
  check_sqls do
764
- @db.sqls.should == [
739
+ @db.sqls.must_equal [
765
740
  "CREATE TABLE `posts` (`geom` point NOT NULL) ENGINE=MyISAM",
766
741
  "CREATE SPATIAL INDEX `posts_geom_index` ON `posts` (`geom`)"
767
742
  ]
768
743
  end
769
744
  end
770
745
 
771
- specify "should support indexes with index type" do
746
+ it "should support indexes with index type" do
772
747
  @db.create_table(:posts){Integer :id; index :id, :type => :btree}
773
748
  check_sqls do
774
- @db.sqls.should == [
749
+ @db.sqls.must_equal [
775
750
  "CREATE TABLE `posts` (`id` integer)",
776
751
  "CREATE INDEX `posts_id_index` USING btree ON `posts` (`id`)"
777
752
  ]
778
753
  end
779
754
  end
780
755
 
781
- specify "should support unique indexes with index type" do
756
+ it "should support unique indexes with index type" do
782
757
  @db.create_table(:posts){Integer :id; index :id, :type => :btree, :unique => true}
783
758
  check_sqls do
784
- @db.sqls.should == [
759
+ @db.sqls.must_equal [
785
760
  "CREATE TABLE `posts` (`id` integer)",
786
761
  "CREATE UNIQUE INDEX `posts_id_index` USING btree ON `posts` (`id`)"
787
762
  ]
788
763
  end
789
764
  end
790
765
 
791
- specify "should not dump partial indexes" do
766
+ it "should not dump partial indexes" do
792
767
  @db.create_table(:posts){text :id}
793
768
  @db << "CREATE INDEX posts_id_index ON posts (id(10))"
794
- @db.indexes(:posts).should == {}
769
+ @db.indexes(:posts).must_equal({})
795
770
  end
796
771
 
797
- specify "should dump partial indexes if :partial option is set to true" do
772
+ it "should dump partial indexes if :partial option is set to true" do
798
773
  @db.create_table(:posts){text :id}
799
774
  @db << "CREATE INDEX posts_id_index ON posts (id(10))"
800
- @db.indexes(:posts, :partial => true).should == {:posts_id_index => {:columns => [:id], :unique => false}}
775
+ @db.indexes(:posts, :partial => true).must_equal(:posts_id_index => {:columns => [:id], :unique => false})
801
776
  end
802
777
  end
803
778
 
@@ -811,31 +786,31 @@ describe "MySQL::Dataset#insert and related methods" do
811
786
  DB.drop_table?(:items)
812
787
  end
813
788
 
814
- specify "#insert should insert record with default values when no arguments given" do
789
+ it "#insert should insert record with default values when no arguments given" do
815
790
  @d.insert
816
791
  check_sqls do
817
- DB.sqls.should == ["INSERT INTO `items` () VALUES ()"]
792
+ DB.sqls.must_equal ["INSERT INTO `items` () VALUES ()"]
818
793
  end
819
- @d.all.should == [{:name => nil, :value => nil}]
794
+ @d.all.must_equal [{:name => nil, :value => nil}]
820
795
  end
821
796
 
822
- specify "#insert should insert record with default values when empty hash given" do
797
+ it "#insert should insert record with default values when empty hash given" do
823
798
  @d.insert({})
824
799
  check_sqls do
825
- DB.sqls.should == ["INSERT INTO `items` () VALUES ()"]
800
+ DB.sqls.must_equal ["INSERT INTO `items` () VALUES ()"]
826
801
  end
827
- @d.all.should == [{:name => nil, :value => nil}]
802
+ @d.all.must_equal [{:name => nil, :value => nil}]
828
803
  end
829
804
 
830
- specify "#insert should insert record with default values when empty array given" do
805
+ it "#insert should insert record with default values when empty array given" do
831
806
  @d.insert []
832
807
  check_sqls do
833
- DB.sqls.should == ["INSERT INTO `items` () VALUES ()"]
808
+ DB.sqls.must_equal ["INSERT INTO `items` () VALUES ()"]
834
809
  end
835
- @d.all.should == [{:name => nil, :value => nil}]
810
+ @d.all.must_equal [{:name => nil, :value => nil}]
836
811
  end
837
812
 
838
- specify "#on_duplicate_key_update should work with regular inserts" do
813
+ it "#on_duplicate_key_update should work with regular inserts" do
839
814
  DB.add_index :items, :name, :unique=>true
840
815
  DB.sqls.clear
841
816
  @d.insert(:name => 'abc', :value => 1)
@@ -843,37 +818,37 @@ describe "MySQL::Dataset#insert and related methods" do
843
818
  @d.on_duplicate_key_update(:name, :value => 6).insert(:name => 'def', :value => 2)
844
819
 
845
820
  check_sqls do
846
- DB.sqls.length.should == 3
847
- DB.sqls[0].should =~ /\AINSERT INTO `items` \(`(name|value)`, `(name|value)`\) VALUES \(('abc'|1), (1|'abc')\)\z/
848
- DB.sqls[1].should =~ /\AINSERT INTO `items` \(`(name|value)`, `(name|value)`\) VALUES \(('abc'|1), (1|'abc')\) ON DUPLICATE KEY UPDATE `name`=VALUES\(`name`\), `value`=6\z/
849
- DB.sqls[2].should =~ /\AINSERT INTO `items` \(`(name|value)`, `(name|value)`\) VALUES \(('def'|2), (2|'def')\) ON DUPLICATE KEY UPDATE `name`=VALUES\(`name`\), `value`=6\z/
821
+ DB.sqls.length.must_equal 3
822
+ DB.sqls[0].must_match(/\AINSERT INTO `items` \(`(name|value)`, `(name|value)`\) VALUES \(('abc'|1), (1|'abc')\)\z/)
823
+ DB.sqls[1].must_match(/\AINSERT INTO `items` \(`(name|value)`, `(name|value)`\) VALUES \(('abc'|1), (1|'abc')\) ON DUPLICATE KEY UPDATE `name`=VALUES\(`name`\), `value`=6\z/)
824
+ DB.sqls[2].must_match(/\AINSERT INTO `items` \(`(name|value)`, `(name|value)`\) VALUES \(('def'|2), (2|'def')\) ON DUPLICATE KEY UPDATE `name`=VALUES\(`name`\), `value`=6\z/)
850
825
  end
851
826
 
852
- @d.all.should == [{:name => 'abc', :value => 6}, {:name => 'def', :value => 2}]
827
+ @d.all.must_equal [{:name => 'abc', :value => 6}, {:name => 'def', :value => 2}]
853
828
  end
854
829
 
855
- specify "#multi_replace should insert multiple records in a single statement" do
830
+ it "#multi_replace should insert multiple records in a single statement" do
856
831
  @d.multi_replace([{:name => 'abc'}, {:name => 'def'}])
857
832
 
858
833
  check_sqls do
859
- DB.sqls.should == [
834
+ DB.sqls.must_equal [
860
835
  SQL_BEGIN,
861
836
  "REPLACE INTO `items` (`name`) VALUES ('abc'), ('def')",
862
837
  SQL_COMMIT
863
838
  ]
864
839
  end
865
840
 
866
- @d.all.should == [
841
+ @d.all.must_equal [
867
842
  {:name => 'abc', :value => nil}, {:name => 'def', :value => nil}
868
843
  ]
869
844
  end
870
845
 
871
- specify "#multi_replace should split the list of records into batches if :commit_every option is given" do
846
+ it "#multi_replace should split the list of records into batches if :commit_every option is given" do
872
847
  @d.multi_replace([{:value => 1}, {:value => 2}, {:value => 3}, {:value => 4}],
873
848
  :commit_every => 2)
874
849
 
875
850
  check_sqls do
876
- DB.sqls.should == [
851
+ DB.sqls.must_equal [
877
852
  SQL_BEGIN,
878
853
  "REPLACE INTO `items` (`value`) VALUES (1), (2)",
879
854
  SQL_COMMIT,
@@ -883,7 +858,7 @@ describe "MySQL::Dataset#insert and related methods" do
883
858
  ]
884
859
  end
885
860
 
886
- @d.all.should == [
861
+ @d.all.must_equal [
887
862
  {:name => nil, :value => 1},
888
863
  {:name => nil, :value => 2},
889
864
  {:name => nil, :value => 3},
@@ -891,12 +866,12 @@ describe "MySQL::Dataset#insert and related methods" do
891
866
  ]
892
867
  end
893
868
 
894
- specify "#multi_replace should split the list of records into batches if :slice option is given" do
869
+ it "#multi_replace should split the list of records into batches if :slice option is given" do
895
870
  @d.multi_replace([{:value => 1}, {:value => 2}, {:value => 3}, {:value => 4}],
896
871
  :slice => 2)
897
872
 
898
873
  check_sqls do
899
- DB.sqls.should == [
874
+ DB.sqls.must_equal [
900
875
  SQL_BEGIN,
901
876
  "REPLACE INTO `items` (`value`) VALUES (1), (2)",
902
877
  SQL_COMMIT,
@@ -906,7 +881,7 @@ describe "MySQL::Dataset#insert and related methods" do
906
881
  ]
907
882
  end
908
883
 
909
- @d.all.should == [
884
+ @d.all.must_equal [
910
885
  {:name => nil, :value => 1},
911
886
  {:name => nil, :value => 2},
912
887
  {:name => nil, :value => 3},
@@ -914,28 +889,28 @@ describe "MySQL::Dataset#insert and related methods" do
914
889
  ]
915
890
  end
916
891
 
917
- specify "#multi_insert should insert multiple records in a single statement" do
892
+ it "#multi_insert should insert multiple records in a single statement" do
918
893
  @d.multi_insert([{:name => 'abc'}, {:name => 'def'}])
919
894
 
920
895
  check_sqls do
921
- DB.sqls.should == [
896
+ DB.sqls.must_equal [
922
897
  SQL_BEGIN,
923
898
  "INSERT INTO `items` (`name`) VALUES ('abc'), ('def')",
924
899
  SQL_COMMIT
925
900
  ]
926
901
  end
927
902
 
928
- @d.all.should == [
903
+ @d.all.must_equal [
929
904
  {:name => 'abc', :value => nil}, {:name => 'def', :value => nil}
930
905
  ]
931
906
  end
932
907
 
933
- specify "#multi_insert should split the list of records into batches if :commit_every option is given" do
908
+ it "#multi_insert should split the list of records into batches if :commit_every option is given" do
934
909
  @d.multi_insert([{:value => 1}, {:value => 2}, {:value => 3}, {:value => 4}],
935
910
  :commit_every => 2)
936
911
 
937
912
  check_sqls do
938
- DB.sqls.should == [
913
+ DB.sqls.must_equal [
939
914
  SQL_BEGIN,
940
915
  "INSERT INTO `items` (`value`) VALUES (1), (2)",
941
916
  SQL_COMMIT,
@@ -945,7 +920,7 @@ describe "MySQL::Dataset#insert and related methods" do
945
920
  ]
946
921
  end
947
922
 
948
- @d.all.should == [
923
+ @d.all.must_equal [
949
924
  {:name => nil, :value => 1},
950
925
  {:name => nil, :value => 2},
951
926
  {:name => nil, :value => 3},
@@ -953,12 +928,12 @@ describe "MySQL::Dataset#insert and related methods" do
953
928
  ]
954
929
  end
955
930
 
956
- specify "#multi_insert should split the list of records into batches if :slice option is given" do
931
+ it "#multi_insert should split the list of records into batches if :slice option is given" do
957
932
  @d.multi_insert([{:value => 1}, {:value => 2}, {:value => 3}, {:value => 4}],
958
933
  :slice => 2)
959
934
 
960
935
  check_sqls do
961
- DB.sqls.should == [
936
+ DB.sqls.must_equal [
962
937
  SQL_BEGIN,
963
938
  "INSERT INTO `items` (`value`) VALUES (1), (2)",
964
939
  SQL_COMMIT,
@@ -968,7 +943,7 @@ describe "MySQL::Dataset#insert and related methods" do
968
943
  ]
969
944
  end
970
945
 
971
- @d.all.should == [
946
+ @d.all.must_equal [
972
947
  {:name => nil, :value => 1},
973
948
  {:name => nil, :value => 2},
974
949
  {:name => nil, :value => 3},
@@ -976,52 +951,52 @@ describe "MySQL::Dataset#insert and related methods" do
976
951
  ]
977
952
  end
978
953
 
979
- specify "#import should support inserting using columns and values arrays" do
954
+ it "#import should support inserting using columns and values arrays" do
980
955
  @d.import([:name, :value], [['abc', 1], ['def', 2]])
981
956
 
982
957
  check_sqls do
983
- DB.sqls.should == [
958
+ DB.sqls.must_equal [
984
959
  SQL_BEGIN,
985
960
  "INSERT INTO `items` (`name`, `value`) VALUES ('abc', 1), ('def', 2)",
986
961
  SQL_COMMIT
987
962
  ]
988
963
  end
989
964
 
990
- @d.all.should == [
965
+ @d.all.must_equal [
991
966
  {:name => 'abc', :value => 1},
992
967
  {:name => 'def', :value => 2}
993
968
  ]
994
969
  end
995
970
 
996
- specify "#insert_ignore should add the IGNORE keyword when inserting" do
971
+ it "#insert_ignore should add the IGNORE keyword when inserting" do
997
972
  @d.insert_ignore.multi_insert([{:name => 'abc'}, {:name => 'def'}])
998
973
 
999
974
  check_sqls do
1000
- DB.sqls.should == [
975
+ DB.sqls.must_equal [
1001
976
  SQL_BEGIN,
1002
977
  "INSERT IGNORE INTO `items` (`name`) VALUES ('abc'), ('def')",
1003
978
  SQL_COMMIT
1004
979
  ]
1005
980
  end
1006
981
 
1007
- @d.all.should == [
982
+ @d.all.must_equal [
1008
983
  {:name => 'abc', :value => nil}, {:name => 'def', :value => nil}
1009
984
  ]
1010
985
  end
1011
986
 
1012
- specify "#insert_ignore should add the IGNORE keyword for single inserts" do
987
+ it "#insert_ignore should add the IGNORE keyword for single inserts" do
1013
988
  @d.insert_ignore.insert(:name => 'ghi')
1014
989
  check_sqls do
1015
- DB.sqls.should == ["INSERT IGNORE INTO `items` (`name`) VALUES ('ghi')"]
990
+ DB.sqls.must_equal ["INSERT IGNORE INTO `items` (`name`) VALUES ('ghi')"]
1016
991
  end
1017
- @d.all.should == [{:name => 'ghi', :value => nil}]
992
+ @d.all.must_equal [{:name => 'ghi', :value => nil}]
1018
993
  end
1019
994
 
1020
- specify "#on_duplicate_key_update should add the ON DUPLICATE KEY UPDATE and ALL columns when no args given" do
995
+ it "#on_duplicate_key_update should add the ON DUPLICATE KEY UPDATE and ALL columns when no args given" do
1021
996
  @d.on_duplicate_key_update.import([:name,:value], [['abc', 1], ['def',2]])
1022
997
 
1023
998
  check_sqls do
1024
- DB.sqls.should == [
999
+ DB.sqls.must_equal [
1025
1000
  "SELECT * FROM `items` LIMIT 1",
1026
1001
  SQL_BEGIN,
1027
1002
  "INSERT INTO `items` (`name`, `value`) VALUES ('abc', 1), ('def', 2) ON DUPLICATE KEY UPDATE `name`=VALUES(`name`), `value`=VALUES(`value`)",
@@ -1029,25 +1004,25 @@ describe "MySQL::Dataset#insert and related methods" do
1029
1004
  ]
1030
1005
  end
1031
1006
 
1032
- @d.all.should == [
1007
+ @d.all.must_equal [
1033
1008
  {:name => 'abc', :value => 1}, {:name => 'def', :value => 2}
1034
1009
  ]
1035
1010
  end
1036
1011
 
1037
- specify "#on_duplicate_key_update should add the ON DUPLICATE KEY UPDATE and columns specified when args are given" do
1012
+ it "#on_duplicate_key_update should add the ON DUPLICATE KEY UPDATE and columns specified when args are given" do
1038
1013
  @d.on_duplicate_key_update(:value).import([:name,:value],
1039
1014
  [['abc', 1], ['def',2]]
1040
1015
  )
1041
1016
 
1042
1017
  check_sqls do
1043
- DB.sqls.should == [
1018
+ DB.sqls.must_equal [
1044
1019
  SQL_BEGIN,
1045
1020
  "INSERT INTO `items` (`name`, `value`) VALUES ('abc', 1), ('def', 2) ON DUPLICATE KEY UPDATE `value`=VALUES(`value`)",
1046
1021
  SQL_COMMIT
1047
1022
  ]
1048
1023
  end
1049
1024
 
1050
- @d.all.should == [
1025
+ @d.all.must_equal [
1051
1026
  {:name => 'abc', :value => 1}, {:name => 'def', :value => 2}
1052
1027
  ]
1053
1028
  end
@@ -1063,16 +1038,16 @@ describe "MySQL::Dataset#update and related methods" do
1063
1038
  DB.drop_table?(:items)
1064
1039
  end
1065
1040
 
1066
- specify "#update_ignore should not raise error where normal update would fail" do
1041
+ it "#update_ignore should not raise error where normal update would fail" do
1067
1042
  @d.insert(:name => 'cow', :value => 0)
1068
1043
  @d.insert(:name => 'cat', :value => 1)
1069
- proc{@d.where(:value => 1).update(:name => 'cow')}.should raise_error(Sequel::DatabaseError)
1044
+ proc{@d.where(:value => 1).update(:name => 'cow')}.must_raise(Sequel::UniqueConstraintViolation)
1070
1045
  DB.sqls.clear
1071
1046
  @d.update_ignore.where(:value => 1).update(:name => 'cow')
1072
1047
  check_sqls do
1073
- DB.sqls.should == ["UPDATE IGNORE `items` SET `name` = 'cow' WHERE (`value` = 1)"]
1048
+ DB.sqls.must_equal ["UPDATE IGNORE `items` SET `name` = 'cow' WHERE (`value` = 1)"]
1074
1049
  end
1075
- @d.order(:name).all.should == [{:name => 'cat', :value => 1}, {:name => 'cow', :value => 0}]
1050
+ @d.order(:name).all.must_equal [{:name => 'cat', :value => 1}, {:name => 'cow', :value => 0}]
1076
1051
  end
1077
1052
  end
1078
1053
 
@@ -1086,14 +1061,14 @@ describe "MySQL::Dataset#replace" do
1086
1061
  DB.drop_table?(:items)
1087
1062
  end
1088
1063
 
1089
- specify "should use default values if they exist" do
1064
+ it "should use default values if they exist" do
1090
1065
  DB.alter_table(:items){set_column_default :id, 1; set_column_default :value, 2}
1091
1066
  @d.replace
1092
- @d.all.should == [{:id=>1, :value=>2}]
1067
+ @d.all.must_equal [{:id=>1, :value=>2}]
1093
1068
  @d.replace([])
1094
- @d.all.should == [{:id=>1, :value=>2}]
1069
+ @d.all.must_equal [{:id=>1, :value=>2}]
1095
1070
  @d.replace({})
1096
- @d.all.should == [{:id=>1, :value=>2}]
1071
+ @d.all.must_equal [{:id=>1, :value=>2}]
1097
1072
  end
1098
1073
  end
1099
1074
 
@@ -1102,15 +1077,15 @@ describe "MySQL::Dataset#complex_expression_sql" do
1102
1077
  @d = DB.dataset
1103
1078
  end
1104
1079
 
1105
- specify "should handle string concatenation with CONCAT if more than one record" do
1106
- @d.literal(Sequel.join([:x, :y])).should == "CONCAT(`x`, `y`)"
1107
- @d.literal(Sequel.join([:x, :y], ' ')).should == "CONCAT(`x`, ' ', `y`)"
1108
- @d.literal(Sequel.join([Sequel.function(:x, :y), 1, Sequel.lit('z')], Sequel.subscript(:y, 1))).should == "CONCAT(x(`y`), `y`[1], '1', `y`[1], z)"
1080
+ it "should handle string concatenation with CONCAT if more than one record" do
1081
+ @d.literal(Sequel.join([:x, :y])).must_equal "CONCAT(`x`, `y`)"
1082
+ @d.literal(Sequel.join([:x, :y], ' ')).must_equal "CONCAT(`x`, ' ', `y`)"
1083
+ @d.literal(Sequel.join([Sequel.function(:x, :y), 1, Sequel.lit('z')], Sequel.subscript(:y, 1))).must_equal "CONCAT(x(`y`), `y`[1], '1', `y`[1], z)"
1109
1084
  end
1110
1085
 
1111
- specify "should handle string concatenation as simple string if just one record" do
1112
- @d.literal(Sequel.join([:x])).should == "`x`"
1113
- @d.literal(Sequel.join([:x], ' ')).should == "`x`"
1086
+ it "should handle string concatenation as simple string if just one record" do
1087
+ @d.literal(Sequel.join([:x])).must_equal "`x`"
1088
+ @d.literal(Sequel.join([:x], ' ')).must_equal "`x`"
1114
1089
  end
1115
1090
  end
1116
1091
 
@@ -1122,22 +1097,22 @@ describe "MySQL::Dataset#calc_found_rows" do
1122
1097
  DB.drop_table?(:items)
1123
1098
  end
1124
1099
 
1125
- specify "should add the SQL_CALC_FOUND_ROWS keyword when selecting" do
1126
- DB[:items].select(:a).calc_found_rows.limit(1).sql.should == \
1100
+ it "should add the SQL_CALC_FOUND_ROWS keyword when selecting" do
1101
+ DB[:items].select(:a).calc_found_rows.limit(1).sql.must_equal \
1127
1102
  'SELECT SQL_CALC_FOUND_ROWS `a` FROM `items` LIMIT 1'
1128
1103
  end
1129
1104
 
1130
- specify "should count matching rows disregarding LIMIT clause" do
1105
+ it "should count matching rows disregarding LIMIT clause" do
1131
1106
  DB[:items].multi_insert([{:a => 1}, {:a => 1}, {:a => 2}])
1132
1107
  DB.sqls.clear
1133
1108
 
1134
1109
  DB.synchronize do
1135
- DB[:items].calc_found_rows.filter(:a => 1).limit(1).all.should == [{:a => 1}]
1136
- DB.dataset.select(Sequel.function(:FOUND_ROWS).as(:rows)).all.should == [{:rows => 2 }]
1110
+ DB[:items].calc_found_rows.filter(:a => 1).limit(1).all.must_equal [{:a => 1}]
1111
+ DB.dataset.select(Sequel.function(:FOUND_ROWS).as(:rows)).all.must_equal [{:rows => 2 }]
1137
1112
  end
1138
1113
 
1139
1114
  check_sqls do
1140
- DB.sqls.should == [
1115
+ DB.sqls.must_equal [
1141
1116
  'SELECT SQL_CALC_FOUND_ROWS * FROM `items` WHERE (`a` = 1) LIMIT 1',
1142
1117
  'SELECT FOUND_ROWS() AS `rows`',
1143
1118
  ]
@@ -1157,46 +1132,46 @@ if DB.adapter_scheme == :mysql or DB.adapter_scheme == :jdbc or DB.adapter_schem
1157
1132
  DB.execute('DROP PROCEDURE test_sproc')
1158
1133
  end
1159
1134
 
1160
- specify "should be callable on the database object" do
1135
+ it "should be callable on the database object" do
1161
1136
  DB.execute_ddl('CREATE PROCEDURE test_sproc() BEGIN DELETE FROM items; END')
1162
1137
  DB[:items].delete
1163
1138
  DB[:items].insert(:value=>1)
1164
- DB[:items].count.should == 1
1139
+ DB[:items].count.must_equal 1
1165
1140
  DB.call_sproc(:test_sproc)
1166
- DB[:items].count.should == 0
1141
+ DB[:items].count.must_equal 0
1167
1142
  end
1168
1143
 
1169
1144
  # Mysql2 doesn't support stored procedures that return result sets, probably because
1170
1145
  # CLIENT_MULTI_RESULTS is not set.
1171
1146
  unless DB.adapter_scheme == :mysql2
1172
- specify "should be callable on the dataset object" do
1147
+ it "should be callable on the dataset object" do
1173
1148
  DB.execute_ddl('CREATE PROCEDURE test_sproc(a INTEGER) BEGIN SELECT *, a AS b FROM items; END')
1174
1149
  DB[:items].delete
1175
1150
  @d = DB[:items]
1176
- @d.call_sproc(:select, :test_sproc, 3).should == []
1151
+ @d.call_sproc(:select, :test_sproc, 3).must_equal []
1177
1152
  @d.insert(:value=>1)
1178
- @d.call_sproc(:select, :test_sproc, 4).should == [{:id=>nil, :value=>1, :b=>4}]
1153
+ @d.call_sproc(:select, :test_sproc, 4).must_equal [{:id=>nil, :value=>1, :b=>4}]
1179
1154
  @d.row_proc = proc{|r| r.keys.each{|k| r[k] *= 2 if r[k].is_a?(Integer)}; r}
1180
- @d.call_sproc(:select, :test_sproc, 3).should == [{:id=>nil, :value=>2, :b=>6}]
1155
+ @d.call_sproc(:select, :test_sproc, 3).must_equal [{:id=>nil, :value=>2, :b=>6}]
1181
1156
  end
1182
1157
 
1183
- specify "should be callable on the dataset object with multiple arguments" do
1158
+ it "should be callable on the dataset object with multiple arguments" do
1184
1159
  DB.execute_ddl('CREATE PROCEDURE test_sproc(a INTEGER, c INTEGER) BEGIN SELECT *, a AS b, c AS d FROM items; END')
1185
1160
  DB[:items].delete
1186
1161
  @d = DB[:items]
1187
- @d.call_sproc(:select, :test_sproc, 3, 4).should == []
1162
+ @d.call_sproc(:select, :test_sproc, 3, 4).must_equal []
1188
1163
  @d.insert(:value=>1)
1189
- @d.call_sproc(:select, :test_sproc, 4, 5).should == [{:id=>nil, :value=>1, :b=>4, :d=>5}]
1164
+ @d.call_sproc(:select, :test_sproc, 4, 5).must_equal [{:id=>nil, :value=>1, :b=>4, :d=>5}]
1190
1165
  @d.row_proc = proc{|r| r.keys.each{|k| r[k] *= 2 if r[k].is_a?(Integer)}; r}
1191
- @d.call_sproc(:select, :test_sproc, 3, 4).should == [{:id=>nil, :value=>2, :b=>6, :d => 8}]
1166
+ @d.call_sproc(:select, :test_sproc, 3, 4).must_equal [{:id=>nil, :value=>2, :b=>6, :d => 8}]
1192
1167
  end
1193
1168
  end
1194
1169
 
1195
- specify "should deal with nil values" do
1170
+ it "should deal with nil values" do
1196
1171
  DB.execute_ddl('CREATE PROCEDURE test_sproc(i INTEGER, v INTEGER) BEGIN INSERT INTO items VALUES (i, v); END')
1197
1172
  DB[:items].delete
1198
1173
  DB.call_sproc(:test_sproc, :args=>[1, nil])
1199
- DB[:items].all.should == [{:id=>1, :value=>nil}]
1174
+ DB[:items].all.must_equal [{:id=>1, :value=>nil}]
1200
1175
  end
1201
1176
  end
1202
1177
  end
@@ -1207,29 +1182,29 @@ if DB.adapter_scheme == :mysql
1207
1182
  DB.convert_invalid_date_time = false
1208
1183
  end
1209
1184
 
1210
- specify "should raise an exception when a bad date/time is used and convert_invalid_date_time is false" do
1185
+ it "should raise an exception when a bad date/time is used and convert_invalid_date_time is false" do
1211
1186
  DB.convert_invalid_date_time = false
1212
- proc{DB["SELECT CAST('0000-00-00' AS date)"].single_value}.should raise_error(Sequel::InvalidValue)
1213
- proc{DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value}.should raise_error(Sequel::InvalidValue)
1214
- proc{DB["SELECT CAST('25:00:00' AS time)"].single_value}.should raise_error(Sequel::InvalidValue)
1187
+ proc{DB["SELECT CAST('0000-00-00' AS date)"].single_value}.must_raise(Sequel::InvalidValue)
1188
+ proc{DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value}.must_raise(Sequel::InvalidValue)
1189
+ proc{DB["SELECT CAST('25:00:00' AS time)"].single_value}.must_raise(Sequel::InvalidValue)
1215
1190
  end
1216
1191
 
1217
- specify "should not use a nil value bad date/time is used and convert_invalid_date_time is nil or :nil" do
1192
+ it "should not use a nil value bad date/time is used and convert_invalid_date_time is nil or :nil" do
1218
1193
  DB.convert_invalid_date_time = nil
1219
- DB["SELECT CAST('0000-00-00' AS date)"].single_value.should == nil
1220
- DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.should == nil
1221
- DB["SELECT CAST('25:00:00' AS time)"].single_value.should == nil
1194
+ DB["SELECT CAST('0000-00-00' AS date)"].single_value.must_equal nil
1195
+ DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.must_equal nil
1196
+ DB["SELECT CAST('25:00:00' AS time)"].single_value.must_equal nil
1222
1197
  DB.convert_invalid_date_time = :nil
1223
- DB["SELECT CAST('0000-00-00' AS date)"].single_value.should == nil
1224
- DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.should == nil
1225
- DB["SELECT CAST('25:00:00' AS time)"].single_value.should == nil
1198
+ DB["SELECT CAST('0000-00-00' AS date)"].single_value.must_equal nil
1199
+ DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.must_equal nil
1200
+ DB["SELECT CAST('25:00:00' AS time)"].single_value.must_equal nil
1226
1201
  end
1227
1202
 
1228
- specify "should not use a nil value bad date/time is used and convert_invalid_date_time is :string" do
1203
+ it "should not use a nil value bad date/time is used and convert_invalid_date_time is :string" do
1229
1204
  DB.convert_invalid_date_time = :string
1230
- DB["SELECT CAST('0000-00-00' AS date)"].single_value.should == '0000-00-00'
1231
- DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.should == '0000-00-00 00:00:00'
1232
- DB["SELECT CAST('25:00:00' AS time)"].single_value.should == '25:00:00'
1205
+ DB["SELECT CAST('0000-00-00' AS date)"].single_value.must_equal '0000-00-00'
1206
+ DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.must_equal '0000-00-00 00:00:00'
1207
+ DB["SELECT CAST('25:00:00' AS time)"].single_value.must_equal '25:00:00'
1233
1208
  end
1234
1209
  end
1235
1210
 
@@ -1247,40 +1222,40 @@ if DB.adapter_scheme == :mysql
1247
1222
  DB.drop_table?(:a, :b)
1248
1223
  end
1249
1224
 
1250
- specify "should combine all results by default" do
1251
- @ds.all.should == [{:a=>10}, {:a=>15}, {:b=>20}, {:b=>25}]
1225
+ it "should combine all results by default" do
1226
+ @ds.all.must_equal [{:a=>10}, {:a=>15}, {:b=>20}, {:b=>25}]
1252
1227
  end
1253
1228
 
1254
- specify "should work with Database#run" do
1255
- proc{DB.run('SELECT * FROM a; SELECT * FROM b')}.should_not raise_error
1256
- proc{DB.run('SELECT * FROM a; SELECT * FROM b')}.should_not raise_error
1229
+ it "should work with Database#run" do
1230
+ DB.run('SELECT * FROM a; SELECT * FROM b')
1231
+ DB.run('SELECT * FROM a; SELECT * FROM b')
1257
1232
  end
1258
1233
 
1259
- specify "should work with Database#run and other statements" do
1260
- proc{DB.run('UPDATE a SET a = 1; SELECT * FROM a; DELETE FROM b')}.should_not raise_error
1261
- DB[:a].select_order_map(:a).should == [1, 1]
1262
- DB[:b].all.should == []
1234
+ it "should work with Database#run and other statements" do
1235
+ DB.run('UPDATE a SET a = 1; SELECT * FROM a; DELETE FROM b')
1236
+ DB[:a].select_order_map(:a).must_equal [1, 1]
1237
+ DB[:b].all.must_equal []
1263
1238
  end
1264
1239
 
1265
- specify "should split results returned into arrays if split_multiple_result_sets is used" do
1266
- @ds.split_multiple_result_sets.all.should == [[{:a=>10}, {:a=>15}], [{:b=>20}, {:b=>25}]]
1240
+ it "should split results returned into arrays if split_multiple_result_sets is used" do
1241
+ @ds.split_multiple_result_sets.all.must_equal [[{:a=>10}, {:a=>15}], [{:b=>20}, {:b=>25}]]
1267
1242
  end
1268
1243
 
1269
- specify "should have regular row_procs work when splitting multiple result sets" do
1244
+ it "should have regular row_procs work when splitting multiple result sets" do
1270
1245
  @ds.row_proc = proc{|x| x[x.keys.first] *= 2; x}
1271
- @ds.split_multiple_result_sets.all.should == [[{:a=>20}, {:a=>30}], [{:b=>40}, {:b=>50}]]
1246
+ @ds.split_multiple_result_sets.all.must_equal [[{:a=>20}, {:a=>30}], [{:b=>40}, {:b=>50}]]
1272
1247
  end
1273
1248
 
1274
- specify "should use the columns from the first result set when splitting result sets" do
1275
- @ds.split_multiple_result_sets.columns.should == [:a]
1249
+ it "should use the columns from the first result set when splitting result sets" do
1250
+ @ds.split_multiple_result_sets.columns.must_equal [:a]
1276
1251
  end
1277
1252
 
1278
- specify "should not allow graphing a dataset that splits multiple statements" do
1279
- proc{@ds.split_multiple_result_sets.graph(:b, :b=>:a)}.should raise_error(Sequel::Error)
1253
+ it "should not allow graphing a dataset that splits multiple statements" do
1254
+ proc{@ds.split_multiple_result_sets.graph(:b, :b=>:a)}.must_raise(Sequel::Error)
1280
1255
  end
1281
1256
 
1282
- specify "should not allow splitting a graphed dataset" do
1283
- proc{DB[:a].graph(:b, :b=>:a).split_multiple_result_sets}.should raise_error(Sequel::Error)
1257
+ it "should not allow splitting a graphed dataset" do
1258
+ proc{DB[:a].graph(:b, :b=>:a).split_multiple_result_sets}.must_raise(Sequel::Error)
1284
1259
  end
1285
1260
  end
1286
1261
  end
@@ -1300,12 +1275,12 @@ if DB.adapter_scheme == :mysql2
1300
1275
  DB.drop_table?(:a)
1301
1276
  end
1302
1277
 
1303
- specify "should correctly stream results" do
1304
- @ds.map(:a).should == (0...1000).to_a
1278
+ it "should correctly stream results" do
1279
+ @ds.map(:a).must_equal((0...1000).to_a)
1305
1280
  end
1306
1281
 
1307
- specify "should correctly handle early returning when streaming results" do
1308
- 3.times{@ds.each{|r| break r[:a]}.should == 0}
1282
+ it "should correctly handle early returning when streaming results" do
1283
+ 3.times{@ds.each{|r| break r[:a]}.must_equal 0}
1309
1284
  end
1310
1285
  end
1311
1286
  end