sequel 4.41.0 → 4.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +98 -0
  3. data/README.rdoc +23 -10
  4. data/doc/active_record.rdoc +4 -4
  5. data/doc/advanced_associations.rdoc +2 -2
  6. data/doc/association_basics.rdoc +5 -2
  7. data/doc/cheat_sheet.rdoc +3 -3
  8. data/doc/core_extensions.rdoc +2 -2
  9. data/doc/dataset_basics.rdoc +4 -4
  10. data/doc/dataset_filtering.rdoc +1 -1
  11. data/doc/migration.rdoc +19 -1
  12. data/doc/prepared_statements.rdoc +2 -2
  13. data/doc/release_notes/4.42.0.txt +221 -0
  14. data/doc/testing.rdoc +3 -1
  15. data/lib/sequel/adapters/ado/access.rb +0 -1
  16. data/lib/sequel/adapters/ado/mssql.rb +0 -1
  17. data/lib/sequel/adapters/do/mysql.rb +0 -1
  18. data/lib/sequel/adapters/do/postgres.rb +0 -1
  19. data/lib/sequel/adapters/do/sqlite3.rb +0 -1
  20. data/lib/sequel/adapters/ibmdb.rb +21 -25
  21. data/lib/sequel/adapters/jdbc.rb +8 -16
  22. data/lib/sequel/adapters/jdbc/as400.rb +0 -1
  23. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -1
  24. data/lib/sequel/adapters/jdbc/db2.rb +0 -1
  25. data/lib/sequel/adapters/jdbc/derby.rb +0 -1
  26. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -1
  27. data/lib/sequel/adapters/jdbc/h2.rb +0 -1
  28. data/lib/sequel/adapters/jdbc/hsqldb.rb +0 -1
  29. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -1
  30. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -1
  31. data/lib/sequel/adapters/jdbc/jtds.rb +0 -1
  32. data/lib/sequel/adapters/jdbc/mssql.rb +0 -1
  33. data/lib/sequel/adapters/jdbc/mysql.rb +0 -1
  34. data/lib/sequel/adapters/jdbc/oracle.rb +0 -1
  35. data/lib/sequel/adapters/jdbc/postgresql.rb +0 -13
  36. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +0 -1
  37. data/lib/sequel/adapters/jdbc/sqlite.rb +0 -1
  38. data/lib/sequel/adapters/jdbc/sqlserver.rb +3 -4
  39. data/lib/sequel/adapters/mock.rb +54 -12
  40. data/lib/sequel/adapters/mysql.rb +1 -1
  41. data/lib/sequel/adapters/mysql2.rb +11 -17
  42. data/lib/sequel/adapters/odbc/mssql.rb +0 -1
  43. data/lib/sequel/adapters/oracle.rb +8 -20
  44. data/lib/sequel/adapters/postgres.rb +11 -29
  45. data/lib/sequel/adapters/shared/access.rb +5 -12
  46. data/lib/sequel/adapters/shared/cubrid.rb +4 -13
  47. data/lib/sequel/adapters/shared/db2.rb +4 -2
  48. data/lib/sequel/adapters/shared/firebird.rb +2 -4
  49. data/lib/sequel/adapters/shared/informix.rb +4 -2
  50. data/lib/sequel/adapters/shared/mssql.rb +3 -5
  51. data/lib/sequel/adapters/shared/mysql.rb +4 -14
  52. data/lib/sequel/adapters/shared/oracle.rb +1 -3
  53. data/lib/sequel/adapters/shared/postgres.rb +16 -38
  54. data/lib/sequel/adapters/shared/progress.rb +0 -2
  55. data/lib/sequel/adapters/shared/sqlanywhere.rb +0 -2
  56. data/lib/sequel/adapters/shared/sqlite.rb +20 -16
  57. data/lib/sequel/adapters/sqlite.rb +8 -20
  58. data/lib/sequel/adapters/swift/mysql.rb +0 -1
  59. data/lib/sequel/adapters/swift/postgres.rb +0 -1
  60. data/lib/sequel/adapters/swift/sqlite.rb +0 -1
  61. data/lib/sequel/adapters/tinytds.rb +4 -12
  62. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +1 -1
  63. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -2
  64. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +11 -34
  65. data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
  66. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +26 -0
  67. data/lib/sequel/ast_transformer.rb +2 -2
  68. data/lib/sequel/database/dataset.rb +1 -1
  69. data/lib/sequel/database/dataset_defaults.rb +0 -66
  70. data/lib/sequel/database/features.rb +6 -0
  71. data/lib/sequel/database/misc.rb +31 -17
  72. data/lib/sequel/database/query.rb +7 -4
  73. data/lib/sequel/database/schema_methods.rb +1 -1
  74. data/lib/sequel/dataset.rb +8 -8
  75. data/lib/sequel/dataset/actions.rb +140 -46
  76. data/lib/sequel/dataset/features.rb +1 -5
  77. data/lib/sequel/dataset/graph.rb +7 -8
  78. data/lib/sequel/dataset/misc.rb +127 -56
  79. data/lib/sequel/dataset/mutation.rb +9 -20
  80. data/lib/sequel/dataset/placeholder_literalizer.rb +10 -1
  81. data/lib/sequel/dataset/prepared_statements.rb +102 -46
  82. data/lib/sequel/dataset/query.rb +155 -72
  83. data/lib/sequel/dataset/sql.rb +26 -9
  84. data/lib/sequel/extensions/columns_introspection.rb +3 -1
  85. data/lib/sequel/extensions/core_extensions.rb +5 -5
  86. data/lib/sequel/extensions/core_refinements.rb +5 -5
  87. data/lib/sequel/extensions/duplicate_columns_handler.rb +4 -2
  88. data/lib/sequel/extensions/freeze_datasets.rb +69 -0
  89. data/lib/sequel/extensions/identifier_mangling.rb +196 -0
  90. data/lib/sequel/extensions/looser_typecasting.rb +11 -7
  91. data/lib/sequel/extensions/migration.rb +1 -1
  92. data/lib/sequel/extensions/null_dataset.rb +5 -2
  93. data/lib/sequel/extensions/pagination.rb +42 -23
  94. data/lib/sequel/extensions/pg_enum.rb +3 -3
  95. data/lib/sequel/extensions/query.rb +3 -3
  96. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +15 -8
  97. data/lib/sequel/model/associations.rb +25 -8
  98. data/lib/sequel/model/base.rb +88 -29
  99. data/lib/sequel/model/dataset_module.rb +37 -0
  100. data/lib/sequel/plugins/association_pks.rb +4 -4
  101. data/lib/sequel/plugins/class_table_inheritance.rb +2 -2
  102. data/lib/sequel/plugins/constraint_validations.rb +1 -2
  103. data/lib/sequel/plugins/csv_serializer.rb +2 -2
  104. data/lib/sequel/plugins/dataset_associations.rb +8 -8
  105. data/lib/sequel/plugins/eager_each.rb +2 -2
  106. data/lib/sequel/plugins/instance_filters.rb +1 -1
  107. data/lib/sequel/plugins/json_serializer.rb +2 -2
  108. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  109. data/lib/sequel/plugins/list.rb +4 -4
  110. data/lib/sequel/plugins/prepared_statements.rb +2 -4
  111. data/lib/sequel/plugins/prepared_statements_associations.rb +1 -3
  112. data/lib/sequel/plugins/prepared_statements_with_pk.rb +1 -1
  113. data/lib/sequel/plugins/rcte_tree.rb +13 -13
  114. data/lib/sequel/plugins/sharding.rb +1 -1
  115. data/lib/sequel/plugins/single_table_inheritance.rb +9 -4
  116. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  117. data/lib/sequel/plugins/validation_class_methods.rb +1 -1
  118. data/lib/sequel/plugins/validation_helpers.rb +1 -1
  119. data/lib/sequel/plugins/xml_serializer.rb +2 -2
  120. data/lib/sequel/sql.rb +69 -36
  121. data/lib/sequel/version.rb +1 -1
  122. data/spec/adapters/db2_spec.rb +10 -0
  123. data/spec/adapters/firebird_spec.rb +1 -1
  124. data/spec/adapters/mssql_spec.rb +4 -5
  125. data/spec/adapters/mysql_spec.rb +9 -9
  126. data/spec/adapters/postgres_spec.rb +67 -68
  127. data/spec/adapters/spec_helper.rb +6 -1
  128. data/spec/adapters/sqlite_spec.rb +29 -15
  129. data/spec/core/connection_pool_spec.rb +14 -14
  130. data/spec/core/database_spec.rb +38 -180
  131. data/spec/core/dataset_mutation_spec.rb +253 -0
  132. data/spec/core/dataset_spec.rb +394 -537
  133. data/spec/core/expression_filters_spec.rb +34 -32
  134. data/spec/core/mock_adapter_spec.rb +27 -35
  135. data/spec/core/placeholder_literalizer_spec.rb +2 -4
  136. data/spec/core/schema_generator_spec.rb +4 -4
  137. data/spec/core/schema_spec.rb +1 -2
  138. data/spec/core_extensions_spec.rb +22 -29
  139. data/spec/extensions/active_model_spec.rb +6 -6
  140. data/spec/extensions/association_dependencies_spec.rb +2 -2
  141. data/spec/extensions/blacklist_security_spec.rb +3 -3
  142. data/spec/extensions/boolean_readers_spec.rb +12 -12
  143. data/spec/extensions/caching_spec.rb +13 -10
  144. data/spec/extensions/class_table_inheritance_spec.rb +38 -43
  145. data/spec/extensions/column_conflicts_spec.rb +1 -3
  146. data/spec/extensions/columns_introspection_spec.rb +2 -3
  147. data/spec/extensions/composition_spec.rb +5 -3
  148. data/spec/extensions/constraint_validations_plugin_spec.rb +5 -5
  149. data/spec/extensions/constraint_validations_spec.rb +14 -8
  150. data/spec/extensions/core_refinements_spec.rb +22 -29
  151. data/spec/extensions/csv_serializer_spec.rb +7 -6
  152. data/spec/extensions/date_arithmetic_spec.rb +15 -15
  153. data/spec/extensions/defaults_setter_spec.rb +2 -2
  154. data/spec/extensions/delay_add_association_spec.rb +1 -1
  155. data/spec/extensions/dirty_spec.rb +19 -10
  156. data/spec/extensions/duplicate_columns_handler_spec.rb +12 -18
  157. data/spec/extensions/eager_each_spec.rb +12 -16
  158. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  159. data/spec/extensions/eval_inspect_spec.rb +4 -3
  160. data/spec/extensions/force_encoding_spec.rb +12 -12
  161. data/spec/extensions/freeze_datasets_spec.rb +31 -0
  162. data/spec/extensions/graph_each_spec.rb +6 -18
  163. data/spec/extensions/hook_class_methods_spec.rb +7 -7
  164. data/spec/extensions/identifier_mangling_spec.rb +307 -0
  165. data/spec/extensions/instance_filters_spec.rb +5 -6
  166. data/spec/extensions/instance_hooks_spec.rb +12 -12
  167. data/spec/extensions/json_serializer_spec.rb +12 -15
  168. data/spec/extensions/lazy_attributes_spec.rb +4 -4
  169. data/spec/extensions/list_spec.rb +19 -21
  170. data/spec/extensions/many_through_many_spec.rb +108 -163
  171. data/spec/extensions/meta_def_spec.rb +7 -2
  172. data/spec/extensions/migration_spec.rb +10 -12
  173. data/spec/extensions/mssql_optimistic_locking_spec.rb +4 -3
  174. data/spec/extensions/named_timezones_spec.rb +4 -3
  175. data/spec/extensions/nested_attributes_spec.rb +2 -2
  176. data/spec/extensions/null_dataset_spec.rb +17 -12
  177. data/spec/extensions/optimistic_locking_spec.rb +4 -5
  178. data/spec/extensions/pagination_spec.rb +8 -10
  179. data/spec/extensions/pg_array_associations_spec.rb +28 -27
  180. data/spec/extensions/pg_array_ops_spec.rb +2 -1
  181. data/spec/extensions/pg_array_spec.rb +6 -2
  182. data/spec/extensions/pg_enum_spec.rb +5 -3
  183. data/spec/extensions/pg_hstore_ops_spec.rb +3 -1
  184. data/spec/extensions/pg_hstore_spec.rb +7 -6
  185. data/spec/extensions/pg_inet_ops_spec.rb +2 -1
  186. data/spec/extensions/pg_inet_spec.rb +2 -1
  187. data/spec/extensions/pg_interval_spec.rb +2 -1
  188. data/spec/extensions/pg_json_ops_spec.rb +2 -1
  189. data/spec/extensions/pg_json_spec.rb +6 -3
  190. data/spec/extensions/pg_loose_count_spec.rb +1 -0
  191. data/spec/extensions/pg_range_ops_spec.rb +3 -1
  192. data/spec/extensions/pg_range_spec.rb +9 -5
  193. data/spec/extensions/pg_row_ops_spec.rb +2 -1
  194. data/spec/extensions/pg_row_plugin_spec.rb +4 -6
  195. data/spec/extensions/pg_row_spec.rb +5 -3
  196. data/spec/extensions/pg_static_cache_updater_spec.rb +2 -1
  197. data/spec/extensions/pg_typecast_on_load_spec.rb +1 -1
  198. data/spec/extensions/prepared_statements_associations_spec.rb +1 -1
  199. data/spec/extensions/prepared_statements_spec.rb +12 -11
  200. data/spec/extensions/pretty_table_spec.rb +1 -1
  201. data/spec/extensions/query_spec.rb +8 -5
  202. data/spec/extensions/rcte_tree_spec.rb +39 -39
  203. data/spec/extensions/round_timestamps_spec.rb +2 -2
  204. data/spec/extensions/schema_dumper_spec.rb +3 -2
  205. data/spec/extensions/schema_spec.rb +2 -2
  206. data/spec/extensions/scissors_spec.rb +1 -2
  207. data/spec/extensions/sequel_3_dataset_methods_spec.rb +30 -17
  208. data/spec/extensions/serialization_modification_detection_spec.rb +2 -2
  209. data/spec/extensions/serialization_spec.rb +15 -13
  210. data/spec/extensions/set_overrides_spec.rb +14 -8
  211. data/spec/extensions/sharding_spec.rb +9 -18
  212. data/spec/extensions/shared_caching_spec.rb +3 -4
  213. data/spec/extensions/single_table_inheritance_spec.rb +11 -11
  214. data/spec/extensions/skip_create_refresh_spec.rb +2 -1
  215. data/spec/extensions/spec_helper.rb +1 -1
  216. data/spec/extensions/split_values_spec.rb +2 -2
  217. data/spec/extensions/sql_comments_spec.rb +6 -0
  218. data/spec/extensions/static_cache_spec.rb +7 -9
  219. data/spec/extensions/string_agg_spec.rb +30 -29
  220. data/spec/extensions/tactical_eager_loading_spec.rb +4 -5
  221. data/spec/extensions/thread_local_timezones_spec.rb +2 -2
  222. data/spec/extensions/timestamps_spec.rb +28 -3
  223. data/spec/extensions/to_dot_spec.rb +1 -2
  224. data/spec/extensions/tree_spec.rb +33 -29
  225. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  226. data/spec/extensions/unlimited_update_spec.rb +1 -0
  227. data/spec/extensions/update_primary_key_spec.rb +11 -7
  228. data/spec/extensions/update_refresh_spec.rb +1 -1
  229. data/spec/extensions/uuid_spec.rb +0 -1
  230. data/spec/extensions/validate_associated_spec.rb +1 -1
  231. data/spec/extensions/validation_class_methods_spec.rb +10 -10
  232. data/spec/extensions/validation_helpers_spec.rb +10 -10
  233. data/spec/extensions/xml_serializer_spec.rb +7 -3
  234. data/spec/integration/associations_test.rb +31 -31
  235. data/spec/integration/dataset_test.rb +17 -19
  236. data/spec/integration/eager_loader_test.rb +24 -24
  237. data/spec/integration/model_test.rb +6 -6
  238. data/spec/integration/plugin_test.rb +43 -43
  239. data/spec/integration/prepared_statement_test.rb +6 -6
  240. data/spec/integration/schema_test.rb +63 -52
  241. data/spec/integration/spec_helper.rb +6 -1
  242. data/spec/integration/transaction_test.rb +13 -13
  243. data/spec/model/association_reflection_spec.rb +17 -17
  244. data/spec/model/associations_spec.rb +101 -96
  245. data/spec/model/base_spec.rb +175 -49
  246. data/spec/model/class_dataset_methods_spec.rb +5 -9
  247. data/spec/model/dataset_methods_spec.rb +5 -5
  248. data/spec/model/eager_loading_spec.rb +209 -235
  249. data/spec/model/hooks_spec.rb +15 -15
  250. data/spec/model/model_spec.rb +28 -21
  251. data/spec/model/plugins_spec.rb +4 -5
  252. data/spec/model/record_spec.rb +59 -57
  253. data/spec/model/spec_helper.rb +1 -1
  254. data/spec/model/validations_spec.rb +6 -6
  255. data/spec/spec_config.rb +1 -1
  256. metadata +10 -2
data/lib/sequel/sql.rb CHANGED
@@ -26,7 +26,7 @@ module Sequel
26
26
  # +Object+. This allows the virtual row support to work with classes
27
27
  # without prefixing them with ::, such as:
28
28
  #
29
- # DB[:bonds].filter{maturity_date > Time.now}
29
+ # DB[:bonds].where{maturity_date > Time.now}
30
30
  class BasicObject < ::BasicObject
31
31
  # Lookup missing constants in <tt>::Object</tt>
32
32
  def self.const_missing(name)
@@ -252,7 +252,8 @@ module Sequel
252
252
  raise(Error, "Invalid operator #{op}")
253
253
  end
254
254
  @op = op
255
- @args = args
255
+ @args = args.freeze
256
+ freeze
256
257
  end
257
258
 
258
259
  to_s_method :complex_expression_sql, '@op, @args'
@@ -596,10 +597,10 @@ module Sequel
596
597
  # Converts a string into a <tt>Sequel::LiteralString</tt>, in order to override string
597
598
  # literalization, e.g.:
598
599
  #
599
- # DB[:items].filter(:abc => 'def').sql #=>
600
+ # DB[:items].where(:abc => 'def').sql #=>
600
601
  # "SELECT * FROM items WHERE (abc = 'def')"
601
602
  #
602
- # DB[:items].filter(:abc => Sequel.lit('def')).sql #=>
603
+ # DB[:items].where(:abc => Sequel.lit('def')).sql #=>
603
604
  # "SELECT * FROM items WHERE (abc = def)"
604
605
  #
605
606
  # You can also provide arguments, to create a <tt>Sequel::SQL::PlaceholderLiteralString</tt>:
@@ -682,9 +683,9 @@ module Sequel
682
683
  # this array as a value in a filter, but may be necessary if you are using it as a
683
684
  # value with placeholder SQL:
684
685
  #
685
- # DB[:a].filter([:a, :b]=>[[1, 2], [3, 4]]) # SQL: (a, b) IN ((1, 2), (3, 4))
686
- # DB[:a].filter('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: (a, b) IN ((1 = 2) AND (3 = 4))
687
- # DB[:a].filter('(a, b) IN ?', Sequel.value_list([[1, 2], [3, 4]])) # SQL: (a, b) IN ((1, 2), (3, 4))
686
+ # DB[:a].where([:a, :b]=>[[1, 2], [3, 4]]) # SQL: (a, b) IN ((1, 2), (3, 4))
687
+ # DB[:a].where('(a, b) IN ?', [[1, 2], [3, 4]]) # SQL: (a, b) IN ((1 = 2) AND (3 = 4))
688
+ # DB[:a].where('(a, b) IN ?', Sequel.value_list([[1, 2], [3, 4]])) # SQL: (a, b) IN ((1, 2), (3, 4))
688
689
  def value_list(arg)
689
690
  raise Error, 'argument to Sequel.value_list must be an array' unless arg.is_a?(Array)
690
691
  SQL::ValueList.new(arg)
@@ -1035,6 +1036,7 @@ module Sequel
1035
1036
  @expression = expression
1036
1037
  @aliaz = aliaz
1037
1038
  @columns = columns
1039
+ freeze
1038
1040
  end
1039
1041
 
1040
1042
  to_s_method :aliased_expression_sql
@@ -1174,7 +1176,11 @@ module Sequel
1174
1176
  # all conditions represent their own boolean expression.
1175
1177
  def initialize(conditions, default, expression=(no_expression=true; nil))
1176
1178
  raise(Sequel::Error, 'CaseExpression conditions must be a hash or array of all two pairs') unless Sequel.condition_specifier?(conditions)
1177
- @conditions, @default, @expression, @no_expression = conditions.to_a, default, expression, no_expression
1179
+ @conditions = conditions.to_a.dup.freeze
1180
+ @default = default
1181
+ @expression = expression
1182
+ @no_expression = no_expression
1183
+ freeze
1178
1184
  end
1179
1185
 
1180
1186
  # Whether to use an expression for this CASE expression.
@@ -1208,6 +1214,7 @@ module Sequel
1208
1214
  def initialize(expr, type)
1209
1215
  @expr = expr
1210
1216
  @type = type
1217
+ freeze
1211
1218
  end
1212
1219
 
1213
1220
  to_s_method :cast_sql, '@expr, @type'
@@ -1221,6 +1228,7 @@ module Sequel
1221
1228
  # Create an object with the given table
1222
1229
  def initialize(table)
1223
1230
  @table = table
1231
+ freeze
1224
1232
  end
1225
1233
 
1226
1234
  to_s_method :column_all_sql
@@ -1257,6 +1265,7 @@ module Sequel
1257
1265
  # Create an constant with the given value
1258
1266
  def initialize(constant)
1259
1267
  @constant = constant
1268
+ freeze
1260
1269
  end
1261
1270
 
1262
1271
  to_s_method :constant_sql, '@constant'
@@ -1303,6 +1312,7 @@ module Sequel
1303
1312
  # Set the callable object
1304
1313
  def initialize(callable)
1305
1314
  @callable = callable
1315
+ freeze
1306
1316
  end
1307
1317
 
1308
1318
  # Call the underlying callable and return the result. If the
@@ -1337,15 +1347,11 @@ module Sequel
1337
1347
 
1338
1348
  # Set the name and args for the function
1339
1349
  def initialize(name, *args)
1340
- @name = name
1341
- @args = args
1342
- @opts = OPTS
1350
+ _initialize(name, args, OPTS)
1343
1351
  end
1344
1352
 
1345
1353
  def self.new!(name, args, opts)
1346
- f = new(name, *args)
1347
- f.instance_variable_set(:@opts, opts)
1348
- f
1354
+ allocate.send(:_initialize, name, args, opts)
1349
1355
  end
1350
1356
 
1351
1357
  # If no arguments are given, return a new function with the wildcard prepended to the arguments.
@@ -1372,7 +1378,12 @@ module Sequel
1372
1378
  #
1373
1379
  # Sequel.function(:foo, :col).filter(:a=>1) # foo(col) FILTER (WHERE a = 1)
1374
1380
  def filter(*args, &block)
1375
- args = args.first if args.length == 1
1381
+ if args.length == 1
1382
+ args = args.first
1383
+ else
1384
+ args.freeze
1385
+ end
1386
+
1376
1387
  with_opts(:filter=>args, :filter_block=>block)
1377
1388
  end
1378
1389
 
@@ -1388,7 +1399,7 @@ module Sequel
1388
1399
  #
1389
1400
  # Sequel.function(:foo, :a).order(:a, Sequel.desc(:b)) # foo(a ORDER BY a, b DESC)
1390
1401
  def order(*args)
1391
- with_opts(:order=>args)
1402
+ with_opts(:order=>args.freeze)
1392
1403
  end
1393
1404
 
1394
1405
  # Return a new function with an OVER clause (making it a window function).
@@ -1430,13 +1441,21 @@ module Sequel
1430
1441
  # Sequel.function(:rank, :a).within_group(:b, :c)
1431
1442
  # # rank(a) WITHIN GROUP (ORDER BY b, c)
1432
1443
  def within_group(*expressions)
1433
- with_opts(:within_group=>expressions)
1444
+ with_opts(:within_group=>expressions.freeze)
1434
1445
  end
1435
1446
 
1436
1447
  to_s_method :function_sql
1437
1448
 
1438
1449
  private
1439
1450
 
1451
+ # Set args and opts
1452
+ def _initialize(name, args, opts)
1453
+ @name = name
1454
+ @args = args.freeze
1455
+ @opts = opts.freeze
1456
+ freeze
1457
+ end
1458
+
1440
1459
  # Return a new function call with the given opts merged into the current opts.
1441
1460
  def with_opts(opts)
1442
1461
  self.class.new!(name, args, Hash[@opts].merge!(opts))
@@ -1468,6 +1487,7 @@ module Sequel
1468
1487
  # Set the value to the given argument
1469
1488
  def initialize(value)
1470
1489
  @value = value
1490
+ freeze
1471
1491
  end
1472
1492
 
1473
1493
  # Create a Function using this identifier as the functions name, with
@@ -1492,6 +1512,7 @@ module Sequel
1492
1512
  def initialize(join_type, table_expr)
1493
1513
  @join_type = join_type
1494
1514
  @table_expr = table_expr
1515
+ freeze
1495
1516
  end
1496
1517
 
1497
1518
  # The table/set related to the JOIN, without any alias.
@@ -1545,8 +1566,8 @@ module Sequel
1545
1566
 
1546
1567
  # Create an object with the given USING conditions and call super
1547
1568
  # with the remaining args.
1548
- def initialize(using, *args)
1549
- @using = using
1569
+ def initialize(cols, *args)
1570
+ @using = cols
1550
1571
  super(*args)
1551
1572
  end
1552
1573
 
@@ -1617,7 +1638,10 @@ module Sequel
1617
1638
  #
1618
1639
  # :nulls :: Can be :first/:last for NULLS FIRST/LAST.
1619
1640
  def initialize(expression, descending = true, opts=OPTS)
1620
- @expression, @descending, @nulls = expression, descending, opts[:nulls]
1641
+ @expression = expression
1642
+ @descending = descending
1643
+ @nulls = opts[:nulls]
1644
+ freeze
1621
1645
  end
1622
1646
 
1623
1647
  # Return a copy that is ordered ASC
@@ -1652,6 +1676,7 @@ module Sequel
1652
1676
  def initialize(table, column)
1653
1677
  @table = convert_identifier(table)
1654
1678
  @column = convert_identifier(column)
1679
+ freeze
1655
1680
  end
1656
1681
 
1657
1682
  # Create a Function using this identifier as the functions name, with
@@ -1746,7 +1771,9 @@ module Sequel
1746
1771
 
1747
1772
  # Set the array column and subscripts to the given arguments
1748
1773
  def initialize(f, sub)
1749
- @f, @sub = f, sub
1774
+ @f = f
1775
+ @sub = sub
1776
+ freeze
1750
1777
  end
1751
1778
 
1752
1779
  # Create a new +Subscript+ appending the given subscript(s)
@@ -1781,7 +1808,7 @@ module Sequel
1781
1808
  # the methods defined by Sequel, if you are running on ruby 1.9, or if you are not using the
1782
1809
  # core extensions.
1783
1810
  #
1784
- # An instance of this class is yielded to the block supplied to <tt>Dataset#filter</tt>, <tt>Dataset#order</tt>, and <tt>Dataset#select</tt>
1811
+ # An instance of this class is yielded to the block supplied to <tt>Dataset#where</tt>, <tt>Dataset#order</tt>, and <tt>Dataset#select</tt>
1785
1812
  # (and the other methods that accept a block and pass it to one of those methods).
1786
1813
  # If the block doesn't take an argument, the block is instance_execed in the context of
1787
1814
  # an instance of this class.
@@ -1814,16 +1841,16 @@ module Sequel
1814
1841
  # ds = DB[:t]
1815
1842
  #
1816
1843
  # # Argument yielded to block
1817
- # ds.filter{|r| r.name < 2} # SELECT * FROM t WHERE (name < 2)
1844
+ # ds.where{|r| r.name < 2} # SELECT * FROM t WHERE (name < 2)
1818
1845
  #
1819
1846
  # # Block without argument (instance_eval)
1820
- # ds.filter{name < 2} # SELECT * FROM t WHERE (name < 2)
1847
+ # ds.where{name < 2} # SELECT * FROM t WHERE (name < 2)
1821
1848
  #
1822
1849
  # # Qualified identifiers
1823
- # ds.filter{table__column + 1 < 2} # SELECT * FROM t WHERE ((table.column + 1) < 2)
1850
+ # ds.where{table__column + 1 < 2} # SELECT * FROM t WHERE ((table.column + 1) < 2)
1824
1851
  #
1825
1852
  # # Functions
1826
- # ds.filter{is_active(1, 'arg2')} # SELECT * FROM t WHERE is_active(1, 'arg2')
1853
+ # ds.where{is_active(1, 'arg2')} # SELECT * FROM t WHERE is_active(1, 'arg2')
1827
1854
  # ds.select{version{}} # SELECT version() FROM t
1828
1855
  # ds.select{count(:*){}} # SELECT count(*) FROM t
1829
1856
  # ds.select{count(:distinct, col1){}} # SELECT count(DISTINCT col1) FROM t
@@ -1840,19 +1867,19 @@ module Sequel
1840
1867
  # ds.select{|o| o./(4, :a).as(:b)} # SELECT (4 / a) AS b FROM t
1841
1868
  #
1842
1869
  # # Boolean Operators
1843
- # ds.filter{|o| o.&({:a=>1}, :b)} # SELECT * FROM t WHERE ((a = 1) AND b)
1844
- # ds.filter{|o| o.|({:a=>1}, :b)} # SELECT * FROM t WHERE ((a = 1) OR b)
1845
- # ds.filter{|o| o.~({:a=>1})} # SELECT * FROM t WHERE (a != 1)
1846
- # ds.filter{|o| o.~({:a=>1, :b=>2})} # SELECT * FROM t WHERE ((a != 1) OR (b != 2))
1870
+ # ds.where{|o| o.&({:a=>1}, :b)} # SELECT * FROM t WHERE ((a = 1) AND b)
1871
+ # ds.where{|o| o.|({:a=>1}, :b)} # SELECT * FROM t WHERE ((a = 1) OR b)
1872
+ # ds.where{|o| o.~({:a=>1})} # SELECT * FROM t WHERE (a != 1)
1873
+ # ds.where{|o| o.~({:a=>1, :b=>2})} # SELECT * FROM t WHERE ((a != 1) OR (b != 2))
1847
1874
  #
1848
1875
  # # Inequality Operators
1849
- # ds.filter{|o| o.>(1, :a)} # SELECT * FROM t WHERE (1 > a)
1850
- # ds.filter{|o| o.<(2, :a)} # SELECT * FROM t WHERE (2 < a)
1851
- # ds.filter{|o| o.>=(3, :a)} # SELECT * FROM t WHERE (3 >= a)
1852
- # ds.filter{|o| o.<=(4, :a)} # SELECT * FROM t WHERE (4 <= a)
1876
+ # ds.where{|o| o.>(1, :a)} # SELECT * FROM t WHERE (1 > a)
1877
+ # ds.where{|o| o.<(2, :a)} # SELECT * FROM t WHERE (2 < a)
1878
+ # ds.where{|o| o.>=(3, :a)} # SELECT * FROM t WHERE (3 >= a)
1879
+ # ds.where{|o| o.<=(4, :a)} # SELECT * FROM t WHERE (4 <= a)
1853
1880
  #
1854
1881
  # # Literal Strings
1855
- # ds.filter{{a=>`some SQL`}} # SELECT * FROM t WHERE (a = some SQL)
1882
+ # ds.where{{a=>`some SQL`}} # SELECT * FROM t WHERE (a = some SQL)
1856
1883
  #
1857
1884
  # For a more detailed explanation, see the {Virtual Rows guide}[rdoc-ref:doc/virtual_rows.rdoc].
1858
1885
  class VirtualRow < BasicObject
@@ -1869,6 +1896,10 @@ module Sequel
1869
1896
  END
1870
1897
  end
1871
1898
 
1899
+ def initialize
1900
+ freeze
1901
+ end
1902
+
1872
1903
  # Return a literal string created with the given string.
1873
1904
  def `(s)
1874
1905
  Sequel::LiteralString.new(s)
@@ -1924,7 +1955,8 @@ module Sequel
1924
1955
 
1925
1956
  # Set the options to the options given
1926
1957
  def initialize(opts=OPTS)
1927
- @opts = opts
1958
+ @opts = opts.frozen? ? opts : Hash[opts].freeze
1959
+ freeze
1928
1960
  end
1929
1961
 
1930
1962
  to_s_method :window_sql, '@opts'
@@ -1939,6 +1971,7 @@ module Sequel
1939
1971
  # Set the value wrapped by the object.
1940
1972
  def initialize(value)
1941
1973
  @value = value
1974
+ freeze
1942
1975
  end
1943
1976
 
1944
1977
  to_s_method :literal, '@value'
@@ -5,7 +5,7 @@ module Sequel
5
5
  MAJOR = 4
6
6
  # The minor version of Sequel. Bumped for every non-patch level
7
7
  # release, generally around once a month.
8
- MINOR = 41
8
+ MINOR = 42
9
9
  # The tiny version of Sequel. Usually 0, only bumped for bugfix
10
10
  # releases that fix regressions from previous versions.
11
11
  TINY = 0
@@ -118,6 +118,11 @@ describe "Sequel::IBMDB.convert_smallint_to_bool" do
118
118
  @ds.delete
119
119
  @ds << {:b=>true, :i=>1}
120
120
  @ds.all.must_equal [{:b=>true, :i=>1}]
121
+
122
+ @ds = @ds.with_convert_smallint_to_bool(false)
123
+ @ds.delete
124
+ @ds << {:b=>true, :i=>10}
125
+ @ds.all.must_equal [{:b=>1, :i=>10}]
121
126
  end
122
127
 
123
128
  it "should return all smallints as integers when unset" do
@@ -135,6 +140,11 @@ describe "Sequel::IBMDB.convert_smallint_to_bool" do
135
140
  @ds.delete
136
141
  @ds << {:b=>0, :i=>0}
137
142
  @ds.all.must_equal [{:b=>0, :i=>0}]
143
+
144
+ @ds = @ds.with_convert_smallint_to_bool(true)
145
+ @ds.delete
146
+ @ds << {:b=>true, :i=>10}
147
+ @ds.all.must_equal [{:b=>true, :i=>10}]
138
148
  end
139
149
  end if DB.adapter_scheme == :ibmdb
140
150
 
@@ -381,7 +381,7 @@ describe "Postgres::Dataset#insert" do
381
381
  it "should return nil if the table has no primary key" do
382
382
  ds = DB[:test]
383
383
  ds.delete
384
- ds.insert(:name=>'a').must_equal nil
384
+ ds.insert(:name=>'a').must_be_nil
385
385
  end
386
386
  end
387
387
 
@@ -352,14 +352,14 @@ describe "MSSSQL::Dataset#insert" do
352
352
  end
353
353
 
354
354
  it "should have insert_select return nil if disable_insert_output is used" do
355
- @ds.disable_insert_output.insert_select(:value=>10).must_equal nil
355
+ @ds.disable_insert_output.insert_select(:value=>10).must_be_nil
356
356
  end
357
357
 
358
358
  it "should have insert_select return nil if the server version is not 2005+" do
359
- @ds = @ds.with_extend(Module.new do
359
+ @ds = @ds.with_extend do
360
360
  def server_version() 8000760 end
361
- end)
362
- @ds.insert_select(:value=>10).must_equal nil
361
+ end
362
+ @ds.insert_select(:value=>10).must_be_nil
363
363
  end
364
364
 
365
365
  it "should have insert_select insert the record and return the inserted record" do
@@ -427,7 +427,6 @@ end
427
427
 
428
428
  describe "MSSQL::Database#rename_table" do
429
429
  it "should work on non-schema bound tables which need escaping" do
430
- DB.quote_identifiers = true
431
430
  DB.create_table! :'foo bar' do
432
431
  text :name
433
432
  end
@@ -150,10 +150,10 @@ if [:mysql, :mysql2].include?(DB.adapter_scheme)
150
150
 
151
151
  it "should allow disabling the conversion on a per-dataset basis" do
152
152
  @db.convert_tinyint_to_bool = true
153
- ds = @ds.with_extend(Module.new do
153
+ ds = @ds.with_extend do
154
154
  def cast_tinyint_integer?(f) true end #mysql
155
155
  def convert_tinyint_to_bool?() false end #mysql2
156
- end)
156
+ end
157
157
  ds.delete
158
158
  ds << {:b=>true, :i=>10}
159
159
  ds.all.must_equal [{:b=>1, :i=>10}]
@@ -597,7 +597,7 @@ describe "A MySQL database" do
597
597
  @db[:items].first.must_equal(:name => 'tutu', :value => 1234)
598
598
 
599
599
  @db << 'DELETE FROM items'
600
- @db[:items].first.must_equal nil
600
+ @db[:items].first.must_be_nil
601
601
  end
602
602
  end
603
603
 
@@ -1208,13 +1208,13 @@ if DB.adapter_scheme == :mysql
1208
1208
 
1209
1209
  it "should not use a nil value bad date/time is used and convert_invalid_date_time is nil or :nil" do
1210
1210
  DB.convert_invalid_date_time = nil
1211
- DB["SELECT CAST('0000-00-00' AS date)"].single_value.must_equal nil
1212
- DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.must_equal nil
1213
- DB["SELECT CAST('25:00:00' AS time)"].single_value.must_equal nil
1211
+ DB["SELECT CAST('0000-00-00' AS date)"].single_value.must_be_nil
1212
+ DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.must_be_nil
1213
+ DB["SELECT CAST('25:00:00' AS time)"].single_value.must_be_nil
1214
1214
  DB.convert_invalid_date_time = :nil
1215
- DB["SELECT CAST('0000-00-00' AS date)"].single_value.must_equal nil
1216
- DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.must_equal nil
1217
- DB["SELECT CAST('25:00:00' AS time)"].single_value.must_equal nil
1215
+ DB["SELECT CAST('0000-00-00' AS date)"].single_value.must_be_nil
1216
+ DB["SELECT CAST('0000-00-00 00:00:00' AS datetime)"].single_value.must_be_nil
1217
+ DB["SELECT CAST('25:00:00' AS time)"].single_value.must_be_nil
1218
1218
  end
1219
1219
 
1220
1220
  it "should not use a nil value bad date/time is used and convert_invalid_date_time is :string" do
@@ -199,12 +199,12 @@ describe "PostgreSQL", 'INSERT ON CONFLICT' do
199
199
  @ds.insert(10, 11, 3, true)
200
200
  proc{@ds.insert(1, 3, 4)}.must_raise Sequel::UniqueConstraintViolation
201
201
  proc{@ds.insert(11, 12, 3, true)}.must_raise Sequel::UniqueConstraintViolation
202
- @ds.insert_ignore.insert(1, 3, 4).must_equal nil
203
- @ds.insert_conflict.insert(1, 3, 4).must_equal nil
204
- @ds.insert_conflict.insert(11, 12, 3, true).must_equal nil
205
- @ds.insert_conflict(:target=>:a).insert(1, 3, 4).must_equal nil
206
- @ds.insert_conflict(:target=>:c, :conflict_where=>:c_is_unique).insert(11, 12, 3, true).must_equal nil
207
- @ds.insert_conflict(:constraint=>:ic_test_a_uidx).insert(1, 3, 4).must_equal nil
202
+ @ds.insert_ignore.insert(1, 3, 4).must_be_nil
203
+ @ds.insert_conflict.insert(1, 3, 4).must_be_nil
204
+ @ds.insert_conflict.insert(11, 12, 3, true).must_be_nil
205
+ @ds.insert_conflict(:target=>:a).insert(1, 3, 4).must_be_nil
206
+ @ds.insert_conflict(:target=>:c, :conflict_where=>:c_is_unique).insert(11, 12, 3, true).must_be_nil
207
+ @ds.insert_conflict(:constraint=>:ic_test_a_uidx).insert(1, 3, 4).must_be_nil
208
208
  @ds.all.must_equal [{:a=>1, :b=>2, :c=>3, :c_is_unique=>false}, {:a=>10, :b=>11, :c=>3, :c_is_unique=>true}]
209
209
  end
210
210
 
@@ -221,15 +221,15 @@ describe "PostgreSQL", 'INSERT ON CONFLICT' do
221
221
 
222
222
  it "Dataset#insert_conflict should handle upserts" do
223
223
  @ds.insert(1, 2, 3)
224
- @ds.insert_conflict(:target=>:a, :update=>{:b=>3}).insert(1, 3, 4).must_equal nil
224
+ @ds.insert_conflict(:target=>:a, :update=>{:b=>3}).insert(1, 3, 4).must_be_nil
225
225
  @ds.all.must_equal [{:a=>1, :b=>3, :c=>3, :c_is_unique=>false}]
226
- @ds.insert_conflict(:target=>[:b, :c], :update=>{:c=>5}).insert(5, 3, 3).must_equal nil
226
+ @ds.insert_conflict(:target=>[:b, :c], :update=>{:c=>5}).insert(5, 3, 3).must_be_nil
227
227
  @ds.all.must_equal [{:a=>1, :b=>3, :c=>5, :c_is_unique=>false}]
228
- @ds.insert_conflict(:constraint=>:ic_test_a_uidx, :update=>{:b=>4}).insert(1, 3).must_equal nil
228
+ @ds.insert_conflict(:constraint=>:ic_test_a_uidx, :update=>{:b=>4}).insert(1, 3).must_be_nil
229
229
  @ds.all.must_equal [{:a=>1, :b=>4, :c=>5, :c_is_unique=>false}]
230
- @ds.insert_conflict(:constraint=>:ic_test_a_uidx, :update=>{:b=>5}, :update_where=>{Sequel[:ic_test][:b]=>4}).insert(1, 3, 4).must_equal nil
230
+ @ds.insert_conflict(:constraint=>:ic_test_a_uidx, :update=>{:b=>5}, :update_where=>{Sequel[:ic_test][:b]=>4}).insert(1, 3, 4).must_be_nil
231
231
  @ds.all.must_equal [{:a=>1, :b=>5, :c=>5, :c_is_unique=>false}]
232
- @ds.insert_conflict(:constraint=>:ic_test_a_uidx, :update=>{:b=>6}, :update_where=>{Sequel[:ic_test][:b]=>4}).insert(1, 3, 4).must_equal nil
232
+ @ds.insert_conflict(:constraint=>:ic_test_a_uidx, :update=>{:b=>6}, :update_where=>{Sequel[:ic_test][:b]=>4}).insert(1, 3, 4).must_be_nil
233
233
  @ds.all.must_equal [{:a=>1, :b=>5, :c=>5, :c_is_unique=>false}]
234
234
  end
235
235
 
@@ -284,12 +284,12 @@ describe "A PostgreSQL database" do
284
284
  it "should support disable_insert_returning" do
285
285
  ds = @db[Sequel[:public][:testfk]].disable_insert_returning
286
286
  ds.delete
287
- ds.insert.must_equal nil
287
+ ds.insert.must_be_nil
288
288
  id = ds.max(:id)
289
289
  ds.select_order_map([:id, :i]).must_equal [[id, nil]]
290
- ds.insert(:i=>id).must_equal nil
290
+ ds.insert(:i=>id).must_be_nil
291
291
  ds.select_order_map([:id, :i]).must_equal [[id, nil], [id+1, id]]
292
- ds.insert_select(:i=>ds.max(:id)).must_equal nil
292
+ ds.insert_select(:i=>ds.max(:id)).must_be_nil
293
293
  ds.select_order_map([:id, :i]).must_equal [[id, nil], [id+1, id]]
294
294
  c = Class.new(Sequel::Model(ds))
295
295
  c.class_eval do
@@ -510,8 +510,8 @@ describe "A PostgreSQL dataset" do
510
510
  info[:schema].must_equal 'public'
511
511
  info[:table].must_equal 'atest'
512
512
  info[:constraint].must_equal 'f'
513
- info[:column].must_equal nil
514
- info[:type].must_equal nil
513
+ info[:column].must_be_nil
514
+ info[:type].must_be_nil
515
515
 
516
516
  begin
517
517
  @db[:atest].insert(0, nil)
@@ -521,9 +521,9 @@ describe "A PostgreSQL dataset" do
521
521
  info = @db.error_info(e.wrapped_exception)
522
522
  info[:schema].must_equal 'public'
523
523
  info[:table].must_equal 'atest'
524
- info[:constraint].must_equal nil
524
+ info[:constraint].must_be_nil
525
525
  info[:column].must_equal 't2'
526
- info[:type].must_equal nil
526
+ info[:type].must_be_nil
527
527
  end if DB.server_version >= 90300 && DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG && Object.const_defined?(:PG) && ::PG.const_defined?(:Constants) && ::PG::Constants.const_defined?(:PG_DIAG_SCHEMA_NAME)
528
528
 
529
529
  it "should support Database#do for executing anonymous code blocks" do
@@ -667,8 +667,8 @@ describe "A PostgreSQL dataset" do
667
667
  end
668
668
 
669
669
  it "#lock should return nil" do
670
- @d.lock('EXCLUSIVE'){@d.insert(:name=>'a')}.must_equal nil
671
- @db.transaction{@d.lock('EXCLUSIVE').must_equal nil; @d.insert(:name=>'a')}
670
+ @d.lock('EXCLUSIVE'){@d.insert(:name=>'a')}.must_be_nil
671
+ @db.transaction{@d.lock('EXCLUSIVE').must_be_nil; @d.insert(:name=>'a')}
672
672
  end
673
673
 
674
674
  it "should raise an error if attempting to update a joined dataset with a single FROM table" do
@@ -817,22 +817,21 @@ describe "A PostgreSQL dataset with a timestamp field" do
817
817
  it "should handle infinite timestamps if convert_infinite_timestamps is set" do
818
818
  @d << {:time=>Sequel.cast('infinity', DateTime)}
819
819
  @db.convert_infinite_timestamps = :nil
820
- @db[:test3].get(:time).must_equal nil
820
+ @db[:test3].get(:time).must_be_nil
821
821
  @db.convert_infinite_timestamps = :string
822
822
  @db[:test3].get(:time).must_equal 'infinity'
823
823
  @db.convert_infinite_timestamps = :float
824
824
  @db[:test3].get(:time).must_equal 1.0/0.0
825
825
  @db.convert_infinite_timestamps = 'nil'
826
- @db[:test3].get(:time).must_equal nil
826
+ @db[:test3].get(:time).must_be_nil
827
827
  @db.convert_infinite_timestamps = 'string'
828
828
  @db[:test3].get(:time).must_equal 'infinity'
829
829
  @db.convert_infinite_timestamps = 'float'
830
830
  @db[:test3].get(:time).must_equal 1.0/0.0
831
831
  @db.convert_infinite_timestamps = 't'
832
832
  @db[:test3].get(:time).must_equal 1.0/0.0
833
- if ((Time.parse('infinity'); nil) rescue true)
834
- # Skip for loose time parsing (e.g. old rbx)
835
- @db.convert_infinite_timestamps = 'f'
833
+ @db.convert_infinite_timestamps = 'f'
834
+ if RUBY_VERSION >= '1.9'
836
835
  proc{@db[:test3].get(:time)}.must_raise ArgumentError, Sequel::InvalidValue
837
836
  @db.convert_infinite_timestamps = nil
838
837
  proc{@db[:test3].get(:time)}.must_raise ArgumentError, Sequel::InvalidValue
@@ -842,7 +841,7 @@ describe "A PostgreSQL dataset with a timestamp field" do
842
841
 
843
842
  @d.update(:time=>Sequel.cast('-infinity', DateTime))
844
843
  @db.convert_infinite_timestamps = :nil
845
- @db[:test3].get(:time).must_equal nil
844
+ @db[:test3].get(:time).must_be_nil
846
845
  @db.convert_infinite_timestamps = :string
847
846
  @db[:test3].get(:time).must_equal '-infinity'
848
847
  @db.convert_infinite_timestamps = :float
@@ -861,7 +860,7 @@ describe "A PostgreSQL dataset with a timestamp field" do
861
860
  it "should handle infinite dates if convert_infinite_timestamps is set" do
862
861
  @d << {:date=>Sequel.cast('infinity', Date)}
863
862
  @db.convert_infinite_timestamps = :nil
864
- @db[:test3].get(:date).must_equal nil
863
+ @db[:test3].get(:date).must_be_nil
865
864
  @db.convert_infinite_timestamps = :string
866
865
  @db[:test3].get(:date).must_equal 'infinity'
867
866
  @db.convert_infinite_timestamps = :float
@@ -869,7 +868,7 @@ describe "A PostgreSQL dataset with a timestamp field" do
869
868
 
870
869
  @d.update(:date=>Sequel.cast('-infinity', :timestamp))
871
870
  @db.convert_infinite_timestamps = :nil
872
- @db[:test3].get(:date).must_equal nil
871
+ @db[:test3].get(:date).must_be_nil
873
872
  @db.convert_infinite_timestamps = :string
874
873
  @db[:test3].get(:date).must_equal '-infinity'
875
874
  @db.convert_infinite_timestamps = :float
@@ -975,7 +974,7 @@ describe "A PostgreSQL database" do
975
974
 
976
975
  it "should not raise an error if attempting to resetting the primary key sequence for a table without a primary key" do
977
976
  @db.create_table(:posts){Integer :a}
978
- @db.reset_primary_key_sequence(:posts).must_equal nil
977
+ @db.reset_primary_key_sequence(:posts).must_be_nil
979
978
  end
980
979
 
981
980
  it "should support opclass specification" do
@@ -1138,8 +1137,8 @@ describe "Postgres::Dataset#insert" do
1138
1137
  end
1139
1138
 
1140
1139
  it "should work with static SQL" do
1141
- @ds.with_sql('INSERT INTO test5 (value) VALUES (10)').insert.must_equal nil
1142
- @db['INSERT INTO test5 (value) VALUES (20)'].insert.must_equal nil
1140
+ @ds.with_sql('INSERT INTO test5 (value) VALUES (10)').insert.must_be_nil
1141
+ @db['INSERT INTO test5 (value) VALUES (20)'].insert.must_be_nil
1143
1142
  @ds.all.must_equal [{:xid=>1, :value=>10}, {:xid=>2, :value=>20}]
1144
1143
  end
1145
1144
 
@@ -1185,7 +1184,7 @@ describe "Postgres::Dataset#insert" do
1185
1184
  it "should return nil if the table has no primary key" do
1186
1185
  @db.create_table!(:test5){String :name; Integer :value}
1187
1186
  @ds.delete
1188
- @ds.insert(:name=>'a').must_equal nil
1187
+ @ds.insert(:name=>'a').must_be_nil
1189
1188
  end
1190
1189
  end
1191
1190
 
@@ -1202,14 +1201,14 @@ describe "Postgres::Database schema qualified tables" do
1202
1201
 
1203
1202
  it "should be able to create, drop, select and insert into tables in a given schema" do
1204
1203
  @db.create_table(Sequel[:schema_test][:schema_test]){primary_key :i}
1205
- @db[Sequel[:schema_test][:schema_test]].first.must_equal nil
1204
+ @db[Sequel[:schema_test][:schema_test]].first.must_be_nil
1206
1205
  @db[Sequel[:schema_test][:schema_test]].insert(:i=>1).must_equal 1
1207
1206
  @db[Sequel[:schema_test][:schema_test]].first.must_equal(:i=>1)
1208
1207
  @db.from(Sequel.lit('schema_test.schema_test')).first.must_equal(:i=>1)
1209
1208
  @db.drop_table(Sequel[:schema_test][:schema_test])
1210
1209
  @db.create_table(Sequel.qualify(:schema_test, :schema_test)){integer :i}
1211
- @db[Sequel[:schema_test][:schema_test]].first.must_equal nil
1212
- @db.from(Sequel.lit('schema_test.schema_test')).first.must_equal nil
1210
+ @db[Sequel[:schema_test][:schema_test]].first.must_be_nil
1211
+ @db.from(Sequel.lit('schema_test.schema_test')).first.must_be_nil
1213
1212
  @db.drop_table(Sequel.qualify(:schema_test, :schema_test))
1214
1213
  end
1215
1214
 
@@ -1727,11 +1726,11 @@ if DB.adapter_scheme == :postgres
1727
1726
  end
1728
1727
 
1729
1728
  it "should handle returning inside block" do
1730
- ds = @ds.with_extend(Module.new do
1729
+ ds = @ds.with_extend do
1731
1730
  def check_return
1732
1731
  use_cursor.each{|r| return}
1733
1732
  end
1734
- end)
1733
+ end
1735
1734
  ds.check_return
1736
1735
  ds.all.must_equal ds.use_cursor.all
1737
1736
  end
@@ -1994,30 +1993,30 @@ if DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG && DB.server_versio
1994
1993
  called2 = true
1995
1994
  break
1996
1995
  end
1997
- end.must_equal nil
1996
+ end.must_be_nil
1998
1997
  called.must_equal true
1999
1998
  called2.must_equal true
2000
1999
  i.must_equal 1
2001
2000
  end
2002
2001
 
2003
2002
  it "should accept a :timeout option in listen" do
2004
- @db.listen('foo2', :timeout=>0.001).must_equal nil
2003
+ @db.listen('foo2', :timeout=>0.001).must_be_nil
2005
2004
  called = false
2006
- @db.listen('foo2', :timeout=>0.001){|ev, pid, payload| called = true}.must_equal nil
2005
+ @db.listen('foo2', :timeout=>0.001){|ev, pid, payload| called = true}.must_be_nil
2007
2006
  called.must_equal false
2008
2007
  i = 0
2009
- @db.listen('foo2', :timeout=>0.001, :loop=>proc{i+=1; throw :stop if i > 3}){|ev, pid, payload| called = true}.must_equal nil
2008
+ @db.listen('foo2', :timeout=>0.001, :loop=>proc{i+=1; throw :stop if i > 3}){|ev, pid, payload| called = true}.must_be_nil
2010
2009
  i.must_equal 4
2011
2010
 
2012
2011
  called = false
2013
2012
  i = 0
2014
- @db.listen('foo2', :timeout=>proc{i+=1; 0.001}){|ev, pid, payload| called = true}.must_equal nil
2013
+ @db.listen('foo2', :timeout=>proc{i+=1; 0.001}){|ev, pid, payload| called = true}.must_be_nil
2015
2014
  called.must_equal false
2016
2015
  i.must_equal 1
2017
2016
 
2018
2017
  i = 0
2019
2018
  t = 0
2020
- @db.listen('foo2', :timeout=>proc{t+=1; 0.001}, :loop=>proc{i+=1; throw :stop if i > 3}){|ev, pid, payload| called = true}.must_equal nil
2019
+ @db.listen('foo2', :timeout=>proc{t+=1; 0.001}, :loop=>proc{i+=1; throw :stop if i > 3}){|ev, pid, payload| called = true}.must_be_nil
2021
2020
  called.must_equal false
2022
2021
  t.must_equal 4
2023
2022
 
@@ -2366,7 +2365,7 @@ describe 'PostgreSQL array handling' do
2366
2365
  @ds.call(:insert, {:i=>[1,2]}, {:i=>:$i})
2367
2366
  @ds.get(:i).must_equal [1, 2]
2368
2367
  @ds.filter(:i=>:$i).call(:first, :i=>[1,2]).must_equal(:i=>[1,2])
2369
- @ds.filter(:i=>:$i).call(:first, :i=>[1,3]).must_equal nil
2368
+ @ds.filter(:i=>:$i).call(:first, :i=>[1,3]).must_be_nil
2370
2369
 
2371
2370
  # NULL values
2372
2371
  @ds.delete
@@ -2380,7 +2379,7 @@ describe 'PostgreSQL array handling' do
2380
2379
  @ds.call(:insert, {:i=>:$i}, :i=>Sequel.pg_array(a))
2381
2380
  @ds.get(:i).must_equal a
2382
2381
  @ds.filter(:i=>:$i).call(:first, :i=>a).must_equal(:i=>a)
2383
- @ds.filter(:i=>:$i).call(:first, :i=>['', nil, nil, 'a']).must_equal nil
2382
+ @ds.filter(:i=>:$i).call(:first, :i=>['', nil, nil, 'a']).must_be_nil
2384
2383
 
2385
2384
  @db.create_table!(:items) do
2386
2385
  column :i, 'date[]'
@@ -2389,7 +2388,7 @@ describe 'PostgreSQL array handling' do
2389
2388
  @ds.call(:insert, {:i=>:$i}, :i=>Sequel.pg_array(a, 'date'))
2390
2389
  @ds.get(:i).must_equal a
2391
2390
  @ds.filter(:i=>:$i).call(:first, :i=>a).must_equal(:i=>a)
2392
- @ds.filter(:i=>:$i).call(:first, :i=>Sequel.pg_array([Date.today-1], 'date')).must_equal nil
2391
+ @ds.filter(:i=>:$i).call(:first, :i=>Sequel.pg_array([Date.today-1], 'date')).must_be_nil
2393
2392
 
2394
2393
  @db.create_table!(:items) do
2395
2394
  column :i, 'timestamp[]'
@@ -2398,7 +2397,7 @@ describe 'PostgreSQL array handling' do
2398
2397
  @ds.call(:insert, {:i=>:$i}, :i=>Sequel.pg_array(a, 'timestamp'))
2399
2398
  @ds.get(:i).must_equal a
2400
2399
  @ds.filter(:i=>:$i).call(:first, :i=>a).must_equal(:i=>a)
2401
- @ds.filter(:i=>:$i).call(:first, :i=>Sequel.pg_array([a.first-1], 'timestamp')).must_equal nil
2400
+ @ds.filter(:i=>:$i).call(:first, :i=>Sequel.pg_array([a.first-1], 'timestamp')).must_be_nil
2402
2401
 
2403
2402
  @db.create_table!(:items) do
2404
2403
  column :i, 'boolean[]'
@@ -2407,7 +2406,7 @@ describe 'PostgreSQL array handling' do
2407
2406
  @ds.call(:insert, {:i=>:$i}, :i=>Sequel.pg_array(a, 'boolean'))
2408
2407
  @ds.get(:i).must_equal a
2409
2408
  @ds.filter(:i=>:$i).call(:first, :i=>a).must_equal(:i=>a)
2410
- @ds.filter(:i=>:$i).call(:first, :i=>Sequel.pg_array([false, true], 'boolean')).must_equal nil
2409
+ @ds.filter(:i=>:$i).call(:first, :i=>Sequel.pg_array([false, true], 'boolean')).must_be_nil
2411
2410
 
2412
2411
  @db.create_table!(:items) do
2413
2412
  column :i, 'bytea[]'
@@ -2416,7 +2415,7 @@ describe 'PostgreSQL array handling' do
2416
2415
  @ds.call(:insert, {:i=>:$i}, :i=>Sequel.pg_array(a, 'bytea'))
2417
2416
  @ds.get(:i).must_equal a
2418
2417
  @ds.filter(:i=>:$i).call(:first, :i=>a).must_equal(:i=>a)
2419
- @ds.filter(:i=>:$i).call(:first, :i=>Sequel.pg_array([Sequel.blob("b\0")], 'bytea')).must_equal nil
2418
+ @ds.filter(:i=>:$i).call(:first, :i=>Sequel.pg_array([Sequel.blob("b\0")], 'bytea')).must_be_nil
2420
2419
  end if (DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG) || DB.adapter_scheme == :jdbc
2421
2420
 
2422
2421
  it 'with models' do
@@ -2594,7 +2593,7 @@ describe 'PostgreSQL hstore handling' do
2594
2593
  @ds.call(:insert, {:i=>Sequel.hstore(@h)}, {:i=>:$i})
2595
2594
  @ds.get(:i).must_equal @h
2596
2595
  @ds.filter(:i=>:$i).call(:first, :i=>Sequel.hstore(@h)).must_equal(:i=>@h)
2597
- @ds.filter(:i=>:$i).call(:first, :i=>Sequel.hstore({})).must_equal nil
2596
+ @ds.filter(:i=>:$i).call(:first, :i=>Sequel.hstore({})).must_be_nil
2598
2597
 
2599
2598
  @ds.delete
2600
2599
  @ds.call(:insert, {:i=>Sequel.hstore('a'=>nil)}, {:i=>:$i})
@@ -2604,7 +2603,7 @@ describe 'PostgreSQL hstore handling' do
2604
2603
  @ds.call(:insert, {:i=>@h}, {:i=>:$i})
2605
2604
  @ds.get(:i).must_equal @h
2606
2605
  @ds.filter(:i=>:$i).call(:first, :i=>@h).must_equal(:i=>@h)
2607
- @ds.filter(:i=>:$i).call(:first, :i=>{}).must_equal nil
2606
+ @ds.filter(:i=>:$i).call(:first, :i=>{}).must_be_nil
2608
2607
  end if (DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG) || DB.adapter_scheme == :jdbc
2609
2608
 
2610
2609
  it 'with models and associations' do
@@ -2712,7 +2711,7 @@ describe 'PostgreSQL hstore handling' do
2712
2711
  h3 = Sequel.hstore(:h3)
2713
2712
 
2714
2713
  @ds.get(h1['a']).must_equal 'b'
2715
- @ds.get(h1['d']).must_equal nil
2714
+ @ds.get(h1['d']).must_be_nil
2716
2715
 
2717
2716
  @ds.get(h2.concat(h3).keys.length).must_equal 2
2718
2717
  @ds.get(h1.concat(h3).keys.length).must_equal 3
@@ -2735,9 +2734,9 @@ describe 'PostgreSQL hstore handling' do
2735
2734
  @ds.get(h1.defined('c')).must_equal false
2736
2735
  @ds.get(h1.defined('d')).must_equal false
2737
2736
 
2738
- @ds.get(h1.delete('a')['c']).must_equal nil
2739
- @ds.get(h1.delete(%w'a d')['c']).must_equal nil
2740
- @ds.get(h1.delete(h2)['c']).must_equal nil
2737
+ @ds.get(h1.delete('a')['c']).must_be_nil
2738
+ @ds.get(h1.delete(%w'a d')['c']).must_be_nil
2739
+ @ds.get(h1.delete(h2)['c']).must_be_nil
2741
2740
 
2742
2741
  @ds.from(Sequel.hstore('a'=>'b', 'c'=>nil).op.each).order(:key).all.must_equal [{:key=>'a', :value=>'b'}, {:key=>'c', :value=>nil}]
2743
2742
 
@@ -2766,7 +2765,7 @@ describe 'PostgreSQL hstore handling' do
2766
2765
 
2767
2766
  @ds.get(h1.slice(%w'a c').keys.length).must_equal 2
2768
2767
  @ds.get(h1.slice(%w'd c').keys.length).must_equal 1
2769
- @ds.get(h1.slice(%w'd e').keys.length).must_equal nil
2768
+ @ds.get(h1.slice(%w'd e').keys.length).must_be_nil
2770
2769
 
2771
2770
  @ds.from(Sequel.hstore('t'=>'s', 'a'=>'b').op.svals.as(:s)).select_order_map(:s).must_equal %w'b s'
2772
2771
 
@@ -3056,7 +3055,7 @@ describe 'PostgreSQL inet/cidr types' do
3056
3055
  @ds.get(:i).must_equal @ipv4
3057
3056
  @ds.get(:c).must_equal @ipv4nm
3058
3057
  @ds.filter(:i=>:$i, :c=>:$c).call(:first, :i=>@ipv4, :c=>@ipv4nm).must_equal(:i=>@ipv4, :c=>@ipv4nm)
3059
- @ds.filter(:i=>:$i, :c=>:$c).call(:first, :i=>@ipv6, :c=>@ipv6nm).must_equal nil
3058
+ @ds.filter(:i=>:$i, :c=>:$c).call(:first, :i=>@ipv6, :c=>@ipv6nm).must_be_nil
3060
3059
  @ds.filter(:i=>:$i, :c=>:$c).call(:delete, :i=>@ipv4, :c=>@ipv4nm).must_equal 1
3061
3060
 
3062
3061
  unless ipv6_broken
@@ -3064,14 +3063,14 @@ describe 'PostgreSQL inet/cidr types' do
3064
3063
  @ds.get(:i).must_equal @ipv6
3065
3064
  @ds.get(:c).must_equal @ipv6nm
3066
3065
  @ds.filter(:i=>:$i, :c=>:$c).call(:first, :i=>@ipv6, :c=>@ipv6nm).must_equal(:i=>@ipv6, :c=>@ipv6nm)
3067
- @ds.filter(:i=>:$i, :c=>:$c).call(:first, :i=>@ipv4, :c=>@ipv4nm).must_equal nil
3066
+ @ds.filter(:i=>:$i, :c=>:$c).call(:first, :i=>@ipv4, :c=>@ipv4nm).must_be_nil
3068
3067
  @ds.filter(:i=>:$i, :c=>:$c).call(:delete, :i=>@ipv6, :c=>@ipv6nm).must_equal 1
3069
3068
  end
3070
3069
 
3071
3070
  @db.create_table!(:items){column :i, 'inet[]'; column :c, 'cidr[]'; column :m, 'macaddr[]'}
3072
3071
  @ds.call(:insert, {:i=>[@ipv4], :c=>[@ipv4nm], :m=>['12:34:56:78:90:ab']}, {:i=>:$i, :c=>:$c, :m=>:$m})
3073
3072
  @ds.filter(:i=>:$i, :c=>:$c, :m=>:$m).call(:first, :i=>[@ipv4], :c=>[@ipv4nm], :m=>['12:34:56:78:90:ab']).must_equal(:i=>[@ipv4], :c=>[@ipv4nm], :m=>['12:34:56:78:90:ab'])
3074
- @ds.filter(:i=>:$i, :c=>:$c, :m=>:$m).call(:first, :i=>[], :c=>[], :m=>[]).must_equal nil
3073
+ @ds.filter(:i=>:$i, :c=>:$c, :m=>:$m).call(:first, :i=>[], :c=>[], :m=>[]).must_be_nil
3075
3074
  @ds.filter(:i=>:$i, :c=>:$c, :m=>:$m).call(:delete, :i=>[@ipv4], :c=>[@ipv4nm], :m=>['12:34:56:78:90:ab']).must_equal 1
3076
3075
  end if (DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG) || DB.adapter_scheme == :jdbc
3077
3076
 
@@ -3226,7 +3225,7 @@ describe 'PostgreSQL range types' do
3226
3225
  @ds.first.must_be :==, @r
3227
3226
  @ds.filter(h).call(:first, @r).must_be :==, @r
3228
3227
  @ds.filter(h).call(:first, @pgr).must_be :==, @r
3229
- @ds.filter(h).call(:first, r2).must_equal nil
3228
+ @ds.filter(h).call(:first, r2).must_be_nil
3230
3229
  @ds.filter(h).call(:delete, @r).must_equal 1
3231
3230
 
3232
3231
  @db.create_table!(:items){column :i4, 'int4range[]'; column :i8, 'int8range[]'; column :n, 'numrange[]'; column :d, 'daterange[]'; column :t, 'tsrange[]'; column :tz, 'tstzrange[]'}
@@ -3234,7 +3233,7 @@ describe 'PostgreSQL range types' do
3234
3233
  @ds.call(:insert, @ra, h)
3235
3234
  @ds.filter(h).call(:first, @ra).each{|k, v| v.must_be :==, @ra[k].to_a}
3236
3235
  @ds.filter(h).call(:first, @pgra).each{|k, v| v.must_be :==, @ra[k].to_a}
3237
- @ds.filter(h).call(:first, r2).must_equal nil
3236
+ @ds.filter(h).call(:first, r2).must_be_nil
3238
3237
  @ds.filter(h).call(:delete, @ra).must_equal 1
3239
3238
  end if (DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG) || DB.adapter_scheme == :jdbc
3240
3239
 
@@ -3409,13 +3408,13 @@ describe 'PostgreSQL interval types' do
3409
3408
  @ds.call(:insert, {:i=>d}, {:i=>:$i})
3410
3409
  @ds.get(:i).must_equal d
3411
3410
  @ds.filter(:i=>:$i).call(:first, :i=>d).must_equal(:i=>d)
3412
- @ds.filter(:i=>Sequel.cast(:$i, :interval)).call(:first, :i=>'0').must_equal nil
3411
+ @ds.filter(:i=>Sequel.cast(:$i, :interval)).call(:first, :i=>'0').must_be_nil
3413
3412
  @ds.filter(:i=>:$i).call(:delete, :i=>d).must_equal 1
3414
3413
 
3415
3414
  @db.create_table!(:items){column :i, 'interval[]'}
3416
3415
  @ds.call(:insert, {:i=>[d]}, {:i=>:$i})
3417
3416
  @ds.filter(:i=>:$i).call(:first, :i=>[d]).must_equal(:i=>[d])
3418
- @ds.filter(:i=>:$i).call(:first, :i=>[]).must_equal nil
3417
+ @ds.filter(:i=>:$i).call(:first, :i=>[]).must_be_nil
3419
3418
  @ds.filter(:i=>:$i).call(:delete, :i=>[d]).must_equal 1
3420
3419
  end if (DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG) || DB.adapter_scheme == :jdbc
3421
3420
 
@@ -3529,7 +3528,7 @@ describe 'PostgreSQL row-valued/composite types' do
3529
3528
  @ds.call(:insert, {:address=>Sequel.pg_row(['123 Sesame St', 'Somewhere', '12345'])}, {:address=>:$address, :id=>1})
3530
3529
  @ds.get(:address).must_equal(:street=>'123 Sesame St', :city=>'Somewhere', :zip=>'12345')
3531
3530
  @ds.filter(:address=>Sequel.cast(:$address, :address)).call(:first, :address=>Sequel.pg_row(['123 Sesame St', 'Somewhere', '12345']))[:id].must_equal 1
3532
- @ds.filter(:address=>Sequel.cast(:$address, :address)).call(:first, :address=>Sequel.pg_row(['123 Sesame St', 'Somewhere', '12356'])).must_equal nil
3531
+ @ds.filter(:address=>Sequel.cast(:$address, :address)).call(:first, :address=>Sequel.pg_row(['123 Sesame St', 'Somewhere', '12356'])).must_be_nil
3533
3532
 
3534
3533
  @ds.delete
3535
3534
  @ds.call(:insert, {:address=>Sequel.pg_row([nil, nil, nil])}, {:address=>:$address, :id=>1})
@@ -3541,7 +3540,7 @@ describe 'PostgreSQL row-valued/composite types' do
3541
3540
  @ds.call(:insert, {:employees=>Sequel.pg_array([@db.row_type(:person, [1, Sequel.pg_row(['123 Sesame St', 'Somewhere', '12345'])])])}, {:employees=>:$employees, :id=>1})
3542
3541
  @ds.get(:company).must_equal(:id=>1, :employees=>[{:id=>1, :address=>{:street=>'123 Sesame St', :city=>'Somewhere', :zip=>'12345'}}])
3543
3542
  @ds.filter(:employees=>Sequel.cast(:$employees, 'person[]')).call(:first, :employees=>Sequel.pg_array([@db.row_type(:person, [1, Sequel.pg_row(['123 Sesame St', 'Somewhere', '12345'])])]))[:id].must_equal 1
3544
- @ds.filter(:employees=>Sequel.cast(:$employees, 'person[]')).call(:first, :employees=>Sequel.pg_array([@db.row_type(:person, [1, Sequel.pg_row(['123 Sesame St', 'Somewhere', '12356'])])])).must_equal nil
3543
+ @ds.filter(:employees=>Sequel.cast(:$employees, 'person[]')).call(:first, :employees=>Sequel.pg_array([@db.row_type(:person, [1, Sequel.pg_row(['123 Sesame St', 'Somewhere', '12356'])])])).must_be_nil
3545
3544
 
3546
3545
  @ds.delete
3547
3546
  @ds.call(:insert, {:employees=>Sequel.pg_array([@db.row_type(:person, [1, Sequel.pg_row([nil, nil, nil])])])}, {:employees=>:$employees, :id=>1})
@@ -3671,7 +3670,7 @@ describe 'PostgreSQL row-valued/composite types' do
3671
3670
  @ds.call(:insert, {:address=>@a}, {:address=>:$address, :id=>1})
3672
3671
  @ds.get(:address).must_equal @a
3673
3672
  @ds.filter(:address=>Sequel.cast(:$address, :address)).call(:first, :address=>@a)[:id].must_equal 1
3674
- @ds.filter(:address=>Sequel.cast(:$address, :address)).call(:first, :address=>Address.new(:street=>'123 Sesame St', :city=>'Somewhere', :zip=>'12356')).must_equal nil
3673
+ @ds.filter(:address=>Sequel.cast(:$address, :address)).call(:first, :address=>Address.new(:street=>'123 Sesame St', :city=>'Somewhere', :zip=>'12356')).must_be_nil
3675
3674
  end if (DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG) || DB.adapter_scheme == :jdbc
3676
3675
 
3677
3676
  it 'use arrays of model objects in bound variables' do
@@ -3679,7 +3678,7 @@ describe 'PostgreSQL row-valued/composite types' do
3679
3678
  @ds.call(:insert, {:employees=>@es}, {:employees=>:$employees, :id=>1})
3680
3679
  @ds.get(:company).must_equal Company.new(:id=>1, :employees=>@es)
3681
3680
  @ds.filter(:employees=>Sequel.cast(:$employees, 'person[]')).call(:first, :employees=>@es)[:id].must_equal 1
3682
- @ds.filter(:employees=>Sequel.cast(:$employees, 'person[]')).call(:first, :employees=>Sequel.pg_array([@db.row_type(:person, [1, Sequel.pg_row(['123 Sesame St', 'Somewhere', '12356'])])])).must_equal nil
3681
+ @ds.filter(:employees=>Sequel.cast(:$employees, 'person[]')).call(:first, :employees=>Sequel.pg_array([@db.row_type(:person, [1, Sequel.pg_row(['123 Sesame St', 'Somewhere', '12356'])])])).must_be_nil
3683
3682
  end if (DB.adapter_scheme == :postgres && SEQUEL_POSTGRES_USES_PG) || DB.adapter_scheme == :jdbc
3684
3683
 
3685
3684
  it 'model typecasting' do
@@ -3822,7 +3821,7 @@ describe "PostgreSQL stored procedures for datasets" do
3822
3821
 
3823
3822
  it "should correctly call stored procedure for inserting record" do
3824
3823
  result = @ds.call_sproc(:insert, :insert_item, 100)
3825
- result.must_equal nil
3824
+ result.must_be_nil
3826
3825
 
3827
3826
  @ds.call(:all).must_equal [{:id=>1, :numb=>100}]
3828
3827
  end