sequel 3.48.0 → 4.0.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 (267) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +114 -0
  3. data/Rakefile +10 -7
  4. data/doc/association_basics.rdoc +25 -23
  5. data/doc/code_order.rdoc +7 -0
  6. data/doc/core_extensions.rdoc +0 -10
  7. data/doc/object_model.rdoc +4 -1
  8. data/doc/querying.rdoc +3 -3
  9. data/doc/release_notes/4.0.0.txt +262 -0
  10. data/doc/security.rdoc +0 -28
  11. data/doc/testing.rdoc +8 -14
  12. data/lib/sequel/adapters/ado.rb +7 -11
  13. data/lib/sequel/adapters/ado/access.rb +8 -8
  14. data/lib/sequel/adapters/ado/mssql.rb +4 -4
  15. data/lib/sequel/adapters/amalgalite.rb +6 -6
  16. data/lib/sequel/adapters/cubrid.rb +7 -7
  17. data/lib/sequel/adapters/db2.rb +5 -9
  18. data/lib/sequel/adapters/dbi.rb +2 -6
  19. data/lib/sequel/adapters/do.rb +4 -4
  20. data/lib/sequel/adapters/firebird.rb +4 -4
  21. data/lib/sequel/adapters/ibmdb.rb +8 -8
  22. data/lib/sequel/adapters/informix.rb +2 -10
  23. data/lib/sequel/adapters/jdbc.rb +17 -17
  24. data/lib/sequel/adapters/jdbc/as400.rb +2 -2
  25. data/lib/sequel/adapters/jdbc/cubrid.rb +1 -1
  26. data/lib/sequel/adapters/jdbc/db2.rb +1 -1
  27. data/lib/sequel/adapters/jdbc/derby.rb +1 -1
  28. data/lib/sequel/adapters/jdbc/h2.rb +2 -2
  29. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -1
  30. data/lib/sequel/adapters/jdbc/informix.rb +1 -1
  31. data/lib/sequel/adapters/jdbc/mssql.rb +2 -2
  32. data/lib/sequel/adapters/jdbc/mysql.rb +1 -1
  33. data/lib/sequel/adapters/jdbc/oracle.rb +5 -1
  34. data/lib/sequel/adapters/jdbc/postgresql.rb +3 -3
  35. data/lib/sequel/adapters/jdbc/sqlite.rb +3 -3
  36. data/lib/sequel/adapters/jdbc/transactions.rb +3 -3
  37. data/lib/sequel/adapters/mock.rb +7 -7
  38. data/lib/sequel/adapters/mysql.rb +3 -3
  39. data/lib/sequel/adapters/mysql2.rb +4 -4
  40. data/lib/sequel/adapters/odbc.rb +2 -6
  41. data/lib/sequel/adapters/odbc/mssql.rb +1 -1
  42. data/lib/sequel/adapters/openbase.rb +1 -5
  43. data/lib/sequel/adapters/oracle.rb +13 -17
  44. data/lib/sequel/adapters/postgres.rb +20 -25
  45. data/lib/sequel/adapters/shared/cubrid.rb +3 -3
  46. data/lib/sequel/adapters/shared/db2.rb +2 -2
  47. data/lib/sequel/adapters/shared/firebird.rb +7 -7
  48. data/lib/sequel/adapters/shared/mssql.rb +9 -9
  49. data/lib/sequel/adapters/shared/mysql.rb +29 -13
  50. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +7 -7
  51. data/lib/sequel/adapters/shared/oracle.rb +22 -13
  52. data/lib/sequel/adapters/shared/postgres.rb +61 -46
  53. data/lib/sequel/adapters/shared/sqlite.rb +9 -9
  54. data/lib/sequel/adapters/sqlite.rb +17 -11
  55. data/lib/sequel/adapters/swift.rb +3 -3
  56. data/lib/sequel/adapters/swift/mysql.rb +1 -1
  57. data/lib/sequel/adapters/swift/sqlite.rb +1 -1
  58. data/lib/sequel/adapters/tinytds.rb +8 -8
  59. data/lib/sequel/ast_transformer.rb +3 -1
  60. data/lib/sequel/connection_pool.rb +4 -2
  61. data/lib/sequel/connection_pool/sharded_single.rb +2 -2
  62. data/lib/sequel/connection_pool/sharded_threaded.rb +5 -5
  63. data/lib/sequel/connection_pool/threaded.rb +7 -7
  64. data/lib/sequel/core.rb +4 -67
  65. data/lib/sequel/database.rb +1 -0
  66. data/lib/sequel/database/connecting.rb +2 -8
  67. data/lib/sequel/database/dataset.rb +2 -7
  68. data/lib/sequel/database/dataset_defaults.rb +0 -18
  69. data/lib/sequel/database/features.rb +4 -4
  70. data/lib/sequel/database/misc.rb +6 -8
  71. data/lib/sequel/database/query.rb +5 -61
  72. data/lib/sequel/database/schema_generator.rb +22 -20
  73. data/lib/sequel/database/schema_methods.rb +48 -20
  74. data/lib/sequel/database/transactions.rb +7 -17
  75. data/lib/sequel/dataset.rb +2 -0
  76. data/lib/sequel/dataset/actions.rb +23 -91
  77. data/lib/sequel/dataset/features.rb +1 -4
  78. data/lib/sequel/dataset/graph.rb +3 -47
  79. data/lib/sequel/dataset/misc.rb +4 -33
  80. data/lib/sequel/dataset/prepared_statements.rb +3 -1
  81. data/lib/sequel/dataset/query.rb +116 -240
  82. data/lib/sequel/dataset/sql.rb +19 -97
  83. data/lib/sequel/deprecated.rb +0 -16
  84. data/lib/sequel/exceptions.rb +0 -3
  85. data/lib/sequel/extensions/_pretty_table.rb +1 -1
  86. data/lib/sequel/extensions/columns_introspection.rb +1 -12
  87. data/lib/sequel/extensions/constraint_validations.rb +3 -3
  88. data/lib/sequel/extensions/core_extensions.rb +0 -9
  89. data/lib/sequel/extensions/date_arithmetic.rb +1 -2
  90. data/lib/sequel/extensions/graph_each.rb +11 -0
  91. data/lib/sequel/extensions/migration.rb +5 -5
  92. data/lib/sequel/extensions/null_dataset.rb +11 -13
  93. data/lib/sequel/extensions/pagination.rb +3 -6
  94. data/lib/sequel/extensions/pg_array.rb +6 -4
  95. data/lib/sequel/extensions/pg_array_ops.rb +35 -1
  96. data/lib/sequel/extensions/pg_json.rb +12 -2
  97. data/lib/sequel/extensions/pg_json_ops.rb +266 -0
  98. data/lib/sequel/extensions/pg_range.rb +2 -2
  99. data/lib/sequel/extensions/pg_range_ops.rb +0 -8
  100. data/lib/sequel/extensions/pg_row.rb +2 -2
  101. data/lib/sequel/extensions/pretty_table.rb +0 -4
  102. data/lib/sequel/extensions/query.rb +3 -8
  103. data/lib/sequel/extensions/schema_caching.rb +0 -7
  104. data/lib/sequel/extensions/schema_dumper.rb +10 -17
  105. data/lib/sequel/extensions/select_remove.rb +0 -4
  106. data/lib/sequel/extensions/set_overrides.rb +28 -0
  107. data/lib/sequel/extensions/to_dot.rb +6 -10
  108. data/lib/sequel/model.rb +6 -7
  109. data/lib/sequel/model/associations.rb +127 -182
  110. data/lib/sequel/model/base.rb +88 -211
  111. data/lib/sequel/model/errors.rb +0 -13
  112. data/lib/sequel/model/plugins.rb +2 -2
  113. data/lib/sequel/no_core_ext.rb +0 -1
  114. data/lib/sequel/plugins/after_initialize.rb +11 -17
  115. data/lib/sequel/plugins/association_autoreloading.rb +1 -47
  116. data/lib/sequel/plugins/association_dependencies.rb +2 -2
  117. data/lib/sequel/plugins/auto_validations.rb +2 -8
  118. data/lib/sequel/plugins/blacklist_security.rb +32 -2
  119. data/lib/sequel/plugins/caching.rb +1 -1
  120. data/lib/sequel/plugins/class_table_inheritance.rb +2 -2
  121. data/lib/sequel/plugins/composition.rb +10 -8
  122. data/lib/sequel/plugins/constraint_validations.rb +2 -2
  123. data/lib/sequel/plugins/dataset_associations.rb +4 -0
  124. data/lib/sequel/plugins/defaults_setter.rb +8 -6
  125. data/lib/sequel/plugins/dirty.rb +6 -6
  126. data/lib/sequel/plugins/force_encoding.rb +13 -8
  127. data/lib/sequel/plugins/hook_class_methods.rb +1 -7
  128. data/lib/sequel/plugins/json_serializer.rb +13 -74
  129. data/lib/sequel/plugins/lazy_attributes.rb +2 -4
  130. data/lib/sequel/plugins/list.rb +1 -1
  131. data/lib/sequel/plugins/many_through_many.rb +4 -11
  132. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +1 -49
  133. data/lib/sequel/plugins/nested_attributes.rb +1 -1
  134. data/lib/sequel/plugins/optimistic_locking.rb +3 -5
  135. data/lib/sequel/plugins/pg_array_associations.rb +453 -0
  136. data/lib/sequel/plugins/pg_typecast_on_load.rb +23 -7
  137. data/lib/sequel/plugins/prepared_statements.rb +1 -1
  138. data/lib/sequel/plugins/prepared_statements_associations.rb +20 -14
  139. data/lib/sequel/plugins/prepared_statements_safe.rb +2 -2
  140. data/lib/sequel/plugins/rcte_tree.rb +1 -1
  141. data/lib/sequel/plugins/serialization.rb +5 -4
  142. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  143. data/lib/sequel/plugins/sharding.rb +7 -1
  144. data/lib/sequel/plugins/single_table_inheritance.rb +1 -1
  145. data/lib/sequel/plugins/timestamps.rb +1 -1
  146. data/lib/sequel/plugins/touch.rb +2 -2
  147. data/lib/sequel/plugins/tree.rb +1 -1
  148. data/lib/sequel/plugins/typecast_on_load.rb +19 -4
  149. data/lib/sequel/plugins/validation_class_methods.rb +0 -30
  150. data/lib/sequel/plugins/validation_helpers.rb +13 -31
  151. data/lib/sequel/plugins/xml_serializer.rb +18 -57
  152. data/lib/sequel/sql.rb +20 -22
  153. data/lib/sequel/version.rb +2 -2
  154. data/spec/adapters/db2_spec.rb +14 -23
  155. data/spec/adapters/firebird_spec.rb +25 -29
  156. data/spec/adapters/informix_spec.rb +11 -14
  157. data/spec/adapters/mssql_spec.rb +71 -77
  158. data/spec/adapters/mysql_spec.rb +165 -172
  159. data/spec/adapters/oracle_spec.rb +36 -39
  160. data/spec/adapters/postgres_spec.rb +175 -100
  161. data/spec/adapters/spec_helper.rb +13 -11
  162. data/spec/adapters/sqlite_spec.rb +36 -44
  163. data/spec/core/connection_pool_spec.rb +2 -1
  164. data/spec/core/database_spec.rb +55 -55
  165. data/spec/core/dataset_spec.rb +45 -249
  166. data/spec/core/deprecated_spec.rb +0 -8
  167. data/spec/core/expression_filters_spec.rb +23 -5
  168. data/spec/core/object_graph_spec.rb +4 -66
  169. data/spec/core/schema_spec.rb +35 -12
  170. data/spec/core/spec_helper.rb +3 -2
  171. data/spec/core_extensions_spec.rb +17 -19
  172. data/spec/extensions/arbitrary_servers_spec.rb +2 -3
  173. data/spec/extensions/association_dependencies_spec.rb +14 -14
  174. data/spec/extensions/auto_validations_spec.rb +7 -0
  175. data/spec/extensions/blacklist_security_spec.rb +5 -5
  176. data/spec/extensions/blank_spec.rb +2 -0
  177. data/spec/extensions/class_table_inheritance_spec.rb +2 -2
  178. data/spec/extensions/columns_introspection_spec.rb +2 -29
  179. data/spec/extensions/composition_spec.rb +10 -17
  180. data/spec/extensions/core_refinements_spec.rb +5 -1
  181. data/spec/extensions/dataset_associations_spec.rb +18 -0
  182. data/spec/extensions/date_arithmetic_spec.rb +2 -2
  183. data/spec/extensions/defaults_setter_spec.rb +9 -9
  184. data/spec/extensions/dirty_spec.rb +0 -5
  185. data/spec/extensions/eval_inspect_spec.rb +2 -0
  186. data/spec/extensions/force_encoding_spec.rb +2 -18
  187. data/spec/extensions/hash_aliases_spec.rb +8 -0
  188. data/spec/extensions/hook_class_methods_spec.rb +39 -58
  189. data/spec/extensions/inflector_spec.rb +2 -0
  190. data/spec/extensions/instance_filters_spec.rb +8 -8
  191. data/spec/extensions/json_serializer_spec.rb +1 -41
  192. data/spec/extensions/list_spec.rb +1 -1
  193. data/spec/extensions/many_through_many_spec.rb +106 -109
  194. data/spec/extensions/migration_spec.rb +2 -0
  195. data/spec/extensions/named_timezones_spec.rb +1 -0
  196. data/spec/extensions/pg_array_associations_spec.rb +603 -0
  197. data/spec/extensions/pg_array_ops_spec.rb +25 -0
  198. data/spec/extensions/pg_array_spec.rb +9 -1
  199. data/spec/extensions/pg_hstore_ops_spec.rb +13 -0
  200. data/spec/extensions/pg_hstore_spec.rb +1 -0
  201. data/spec/extensions/pg_json_ops_spec.rb +131 -0
  202. data/spec/extensions/pg_json_spec.rb +10 -4
  203. data/spec/extensions/pg_range_ops_spec.rb +2 -5
  204. data/spec/extensions/pg_range_spec.rb +6 -2
  205. data/spec/extensions/pg_row_ops_spec.rb +2 -0
  206. data/spec/extensions/prepared_statements_associations_spec.rb +26 -5
  207. data/spec/extensions/rcte_tree_spec.rb +15 -15
  208. data/spec/extensions/schema_dumper_spec.rb +0 -1
  209. data/spec/extensions/schema_spec.rb +9 -9
  210. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  211. data/spec/extensions/serialization_spec.rb +18 -29
  212. data/spec/extensions/set_overrides_spec.rb +4 -0
  213. data/spec/extensions/{many_to_one_pk_lookup_spec.rb → shared_caching_spec.rb} +1 -4
  214. data/spec/extensions/single_table_inheritance_spec.rb +4 -4
  215. data/spec/extensions/spec_helper.rb +8 -9
  216. data/spec/extensions/sql_expr_spec.rb +2 -0
  217. data/spec/extensions/string_date_time_spec.rb +2 -0
  218. data/spec/extensions/string_stripper_spec.rb +2 -0
  219. data/spec/extensions/tactical_eager_loading_spec.rb +12 -12
  220. data/spec/extensions/thread_local_timezones_spec.rb +2 -0
  221. data/spec/extensions/timestamps_spec.rb +1 -1
  222. data/spec/extensions/to_dot_spec.rb +1 -1
  223. data/spec/extensions/touch_spec.rb +24 -24
  224. data/spec/extensions/tree_spec.rb +7 -7
  225. data/spec/extensions/typecast_on_load_spec.rb +8 -1
  226. data/spec/extensions/update_primary_key_spec.rb +10 -10
  227. data/spec/extensions/validation_class_methods_spec.rb +10 -39
  228. data/spec/extensions/validation_helpers_spec.rb +29 -47
  229. data/spec/extensions/xml_serializer_spec.rb +1 -23
  230. data/spec/integration/associations_test.rb +231 -40
  231. data/spec/integration/database_test.rb +1 -1
  232. data/spec/integration/dataset_test.rb +64 -64
  233. data/spec/integration/eager_loader_test.rb +28 -28
  234. data/spec/integration/migrator_test.rb +1 -1
  235. data/spec/integration/model_test.rb +2 -2
  236. data/spec/integration/plugin_test.rb +21 -21
  237. data/spec/integration/prepared_statement_test.rb +7 -7
  238. data/spec/integration/schema_test.rb +115 -110
  239. data/spec/integration/spec_helper.rb +17 -27
  240. data/spec/integration/timezone_test.rb +1 -1
  241. data/spec/integration/transaction_test.rb +10 -10
  242. data/spec/integration/type_test.rb +2 -2
  243. data/spec/model/association_reflection_spec.rb +2 -28
  244. data/spec/model/associations_spec.rb +239 -188
  245. data/spec/model/base_spec.rb +27 -68
  246. data/spec/model/dataset_methods_spec.rb +4 -4
  247. data/spec/model/eager_loading_spec.rb +160 -172
  248. data/spec/model/hooks_spec.rb +62 -79
  249. data/spec/model/model_spec.rb +36 -51
  250. data/spec/model/plugins_spec.rb +5 -19
  251. data/spec/model/record_spec.rb +125 -151
  252. data/spec/model/spec_helper.rb +8 -6
  253. data/spec/model/validations_spec.rb +4 -17
  254. data/spec/spec_config.rb +2 -10
  255. metadata +50 -56
  256. data/lib/sequel/deprecated_core_extensions.rb +0 -135
  257. data/lib/sequel/extensions/pg_auto_parameterize.rb +0 -185
  258. data/lib/sequel/extensions/pg_statement_cache.rb +0 -318
  259. data/lib/sequel/plugins/identity_map.rb +0 -260
  260. data/lib/sequel_core.rb +0 -2
  261. data/lib/sequel_model.rb +0 -2
  262. data/spec/extensions/association_autoreloading_spec.rb +0 -102
  263. data/spec/extensions/identity_map_spec.rb +0 -337
  264. data/spec/extensions/pg_auto_parameterize_spec.rb +0 -70
  265. data/spec/extensions/pg_statement_cache_spec.rb +0 -208
  266. data/spec/rcov.opts +0 -8
  267. data/spec/spec_config.rb.example +0 -10
@@ -5,19 +5,10 @@ describe "Dataset" do
5
5
  @dataset = Sequel.mock.dataset
6
6
  end
7
7
 
8
- qspecify "should accept database and opts in initialize" do
9
- db = "db"
10
- opts = {:from => :test}
11
- d = Sequel::Dataset.new(db, opts)
12
- d.db.should be(db)
13
- d.opts.should be(opts)
14
- end
15
-
16
8
  specify "should accept database in initialize" do
17
9
  db = "db"
18
10
  d = Sequel::Dataset.new(db)
19
11
  d.db.should be(db)
20
- d.opts.should be_a_kind_of(Hash)
21
12
  d.opts.should == {}
22
13
  end
23
14
 
@@ -411,20 +402,20 @@ describe "Dataset#where" do
411
402
  specify "should not replace named placeholders that don't exist in the hash" do
412
403
  @dataset.where('price < :price AND id in :ids', :price=>100).select_sql.should == "SELECT * FROM test WHERE (price < 100 AND id in :ids)"
413
404
  end
414
-
415
- qspecify "should handle a mismatched number of placeholders" do
416
- @dataset.where('price < ? AND id in ?', 100).select_sql.should == "SELECT * FROM test WHERE (price < 100 AND id in NULL)"
417
- @dataset.where('price < ? AND id in ?', 100, [1, 2, 3], 4).select_sql.should == "SELECT * FROM test WHERE (price < 100 AND id in (1, 2, 3))"
418
- end
419
405
 
406
+ specify "should raise an error for a mismatched number of placeholders" do
407
+ proc{@dataset.where('price < ? AND id in ?', 100).select_sql}.should raise_error(Sequel::Error)
408
+ proc{@dataset.where('price < ? AND id in ?', 100, [1, 2, 3], 4).select_sql}.should raise_error(Sequel::Error)
409
+ end
410
+
420
411
  specify "should handle placeholders when using an array" do
421
412
  @dataset.where(Sequel.lit(['price < ', ' AND id in '], 100, [1, 2, 3])).select_sql.should == "SELECT * FROM test WHERE price < 100 AND id in (1, 2, 3)"
422
413
  @dataset.where(Sequel.lit(['price < ', ' AND id in '], 100)).select_sql.should == "SELECT * FROM test WHERE price < 100 AND id in "
423
414
  end
424
-
425
- qspecify "should handle a mismatched number of placeholders when using an array" do
426
- @dataset.where(Sequel.lit(['a = ', ' AND price < ', ' AND id in '], 100)).select_sql.should == "SELECT * FROM test WHERE a = 100 AND price < AND id in NULL"
427
- @dataset.where(Sequel.lit(['price < ', ' AND id in '], 100, [1, 2, 3], 4)).select_sql.should == "SELECT * FROM test WHERE price < 100 AND id in (1, 2, 3)"
415
+
416
+ specify "should handle a mismatched number of placeholders when using an array" do
417
+ proc{@dataset.where(Sequel.lit(['a = ', ' AND price < ', ' AND id in '], 100)).select_sql}.should raise_error(Sequel::Error)
418
+ proc{@dataset.where(Sequel.lit(['price < ', ' AND id in '], 100, [1, 2, 3], 4)).select_sql}.should raise_error(Sequel::Error)
428
419
  end
429
420
 
430
421
  specify "should handle partial names" do
@@ -485,18 +476,6 @@ describe "Dataset#where" do
485
476
  @dataset.exclude([:id1, :id2] => []).sql.should == "SELECT * FROM test WHERE ((id1 = id1) AND (id2 = id2))"
486
477
  end
487
478
 
488
- qspecify "should handle all types of IN/NOT IN queries with empty arrays when empty_array_handle_nulls is false" do
489
- begin
490
- Sequel.empty_array_handle_nulls = false
491
- @dataset.filter(:id => []).sql.should == "SELECT * FROM test WHERE (1 = 0)"
492
- @dataset.filter([:id1, :id2] => []).sql.should == "SELECT * FROM test WHERE (1 = 0)"
493
- @dataset.exclude(:id => []).sql.should == "SELECT * FROM test WHERE (1 = 1)"
494
- @dataset.exclude([:id1, :id2] => []).sql.should == "SELECT * FROM test WHERE (1 = 1)"
495
- ensure
496
- Sequel.empty_array_handle_nulls = true
497
- end
498
- end
499
-
500
479
  specify "should handle all types of IN/NOT IN queries" do
501
480
  @dataset.filter(:id => @d1.select(:id)).sql.should == "SELECT * FROM test WHERE (id IN (SELECT id FROM test WHERE (region = 'Asia')))"
502
481
  @dataset.filter(:id => [1, 2]).sql.should == "SELECT * FROM test WHERE (id IN (1, 2))"
@@ -539,21 +518,6 @@ describe "Dataset#where" do
539
518
  db.sqls.should == ["SELECT id1, id2 FROM test WHERE (region = 'Asia')"]
540
519
  end
541
520
 
542
- qspecify "should handle IN/NOT IN queries with multiple columns and an empty dataset where the database doesn't support it when empty_array_handle nulls is true" do
543
- begin
544
- Sequel.empty_array_handle_nulls = false
545
- meta_def(@dataset, :supports_multiple_column_in?){false}
546
- db = Sequel.mock
547
- d1 = db[:test].select(:id1, :id2).filter(:region=>'Asia').columns(:id1, :id2)
548
- @dataset.filter([:id1, :id2] => d1).sql.should == "SELECT * FROM test WHERE (1 = 0)"
549
- db.sqls.should == ["SELECT id1, id2 FROM test WHERE (region = 'Asia')"]
550
- @dataset.exclude([:id1, :id2] => d1).sql.should == "SELECT * FROM test WHERE (1 = 1)"
551
- db.sqls.should == ["SELECT id1, id2 FROM test WHERE (region = 'Asia')"]
552
- ensure
553
- Sequel.empty_array_handle_nulls = true
554
- end
555
- end
556
-
557
521
  specify "should handle IN/NOT IN queries for datasets with row_procs" do
558
522
  meta_def(@dataset, :supports_multiple_column_in?){false}
559
523
  db = Sequel.mock(:fetch=>[{:id1=>1, :id2=>2}, {:id1=>3, :id2=>4}])
@@ -640,8 +604,8 @@ describe "Dataset#or" do
640
604
  @d1 = @dataset.where(:x => 1)
641
605
  end
642
606
 
643
- qspecify "should raise if no filter exists" do
644
- proc {@dataset.or(:a => 1)}.should raise_error(Sequel::Error)
607
+ specify "should just clone if no where clause exists" do
608
+ @dataset.or(:a => 1).sql.should == 'SELECT * FROM test'
645
609
  end
646
610
 
647
611
  specify "should just clone if given an empty argument" do
@@ -671,10 +635,6 @@ describe "Dataset#or" do
671
635
  specify "should allow the use of blocks and arguments simultaneously" do
672
636
  @d1.or(Sequel.expr(:zz) < 3){yy > 3}.sql.should == 'SELECT * FROM test WHERE ((x = 1) OR ((zz < 3) AND (yy > 3)))'
673
637
  end
674
-
675
- qspecify "should modify the having clause if there is already a having clause" do
676
- @dataset.having(:x => 1).or(:y => 2).sql.should == 'SELECT * FROM test HAVING ((x = 1) OR (y = 2))'
677
- end
678
638
  end
679
639
 
680
640
  describe "Dataset#and" do
@@ -683,13 +643,11 @@ describe "Dataset#and" do
683
643
  @d1 = @dataset.where(:x => 1)
684
644
  end
685
645
 
686
- qspecify "should raise if no filter exists" do
687
- proc {@dataset.and(:a => 1)}.should raise_error(Sequel::Error)
688
- proc {@dataset.where(:a => 1).group(:t).and(:b => 2)}.should_not raise_error(Sequel::Error)
689
- @dataset.where(:a => 1).group(:t).and(:b => 2).sql.should == "SELECT * FROM test WHERE ((a = 1) AND (b = 2)) GROUP BY t"
646
+ specify "should add a WHERE filter if none exists" do
647
+ @dataset.and(:a => 1).sql.should == 'SELECT * FROM test WHERE (a = 1)'
690
648
  end
691
649
 
692
- specify "should add an alternative expression to the where clause" do
650
+ specify "should add an expression to the where clause" do
693
651
  @d1.and(:y => 2).sql.should == 'SELECT * FROM test WHERE ((x = 1) AND (y = 2))'
694
652
  end
695
653
 
@@ -717,10 +675,6 @@ describe "Dataset#exclude" do
717
675
  @dataset.exclude(:region=>'Asia').select_sql.should == "SELECT * FROM test WHERE (region != 'Asia')"
718
676
  end
719
677
 
720
- qspecify "should affect the having clause if having clause is already used" do
721
- @dataset.group_and_count(:name).having{count > 2}.exclude{count > 5}.sql.should == "SELECT name, count(*) AS count FROM test GROUP BY name HAVING ((count > 2) AND (count <= 5))"
722
- end
723
-
724
678
  specify "should take multiple conditions as a hash and express the logic correctly in SQL" do
725
679
  @dataset.exclude(:region => 'Asia', :name => 'Japan').select_sql.
726
680
  should match(Regexp.union(/WHERE \(\(region != 'Asia'\) OR \(name != 'Japan'\)\)/,
@@ -776,8 +730,8 @@ describe "Dataset#invert" do
776
730
  @d = Sequel.mock.dataset.from(:test)
777
731
  end
778
732
 
779
- qspecify "should raise error if the dataset is not filtered" do
780
- proc{@d.invert}.should raise_error(Sequel::Error)
733
+ specify "should return a dataset that selects no rows if dataset is not filtered" do
734
+ @d.invert.sql.should == "SELECT * FROM test WHERE 'f'"
781
735
  end
782
736
 
783
737
  specify "should invert current filter if dataset is filtered" do
@@ -808,14 +762,6 @@ describe "Dataset#having" do
808
762
  specify "should support proc expressions" do
809
763
  @grouped.having{Sequel.function(:sum, :population) > 10}.sql.should == "SELECT region, sum(population), avg(gdp) FROM test GROUP BY region HAVING (sum(population) > 10)"
810
764
  end
811
-
812
- qspecify "should work with and on the having clause" do
813
- @grouped.having(Sequel.expr(:a) > 1).and(Sequel.expr(:b) < 2).sql.should == "SELECT region, sum(population), avg(gdp) FROM test GROUP BY region HAVING ((a > 1) AND (b < 2))"
814
- end
815
-
816
- qspecify "should work with filter on the having clause" do
817
- @grouped.having(Sequel.expr(:a) > 1).filter(Sequel.expr(:b) < 2).sql.should == "SELECT region, sum(population), avg(gdp) FROM test GROUP BY region HAVING ((a > 1) AND (b < 2))"
818
- end
819
765
  end
820
766
 
821
767
  describe "a grouped dataset" do
@@ -1161,12 +1107,6 @@ describe "Dataset#from" do
1161
1107
  @dataset.from(d1, d2).sql.should == "SELECT * FROM (SELECT * FROM a GROUP BY b) AS t1, (SELECT * FROM c GROUP BY d) AS t2"
1162
1108
  end
1163
1109
 
1164
- qspecify "should accept a hash for aliasing" do
1165
- @dataset.from(:a => :b).sql.should == "SELECT * FROM a AS b"
1166
- @dataset.from(:a => 'b').sql.should == "SELECT * FROM a AS b"
1167
- @dataset.from(@dataset.from(:a).group(:b) => :c).sql.should == "SELECT * FROM (SELECT * FROM a GROUP BY b) AS c"
1168
- end
1169
-
1170
1110
  specify "should always use a subquery if given a dataset" do
1171
1111
  @dataset.from(@dataset.from(:a)).select_sql.should == "SELECT * FROM (SELECT * FROM a) AS t1"
1172
1112
  end
@@ -1191,6 +1131,14 @@ describe "Dataset#from" do
1191
1131
  @dataset.from(Sequel.function(:a, :i)).select_sql.should == "SELECT * FROM a(i)"
1192
1132
  end
1193
1133
 
1134
+ specify "should accept virtual row blocks" do
1135
+ @dataset.from{abc(de)}.select_sql.should == "SELECT * FROM abc(de)"
1136
+ @dataset.from{[i, abc(de)]}.select_sql.should == "SELECT * FROM i, abc(de)"
1137
+ @dataset.from(:a){i}.select_sql.should == "SELECT * FROM a, i"
1138
+ @dataset.from(:a, :b){i}.select_sql.should == "SELECT * FROM a, b, i"
1139
+ @dataset.from(:a, :b){[i, abc(de)]}.select_sql.should == "SELECT * FROM a, b, i, abc(de)"
1140
+ end
1141
+
1194
1142
  specify "should accept :schema__table___alias symbol format" do
1195
1143
  @dataset.from(:abc__def).select_sql.should == "SELECT * FROM abc.def"
1196
1144
  @dataset.from(:a_b__c).select_sql.should == "SELECT * FROM a_b.c"
@@ -1249,12 +1197,8 @@ describe "Dataset#select" do
1249
1197
  @d.select(Sequel.as([[:b, :c]], :n)).sql.should == 'SELECT (b = c) AS n FROM test'
1250
1198
  end
1251
1199
 
1252
- qspecify "should handle hashes returned from virtual row blocks" do
1253
- @d.select{{:b=>:c}}.sql.should == 'SELECT b AS c FROM test'
1254
- end
1255
-
1256
- qspecify "should accept a hash for AS values" do
1257
- @d.select(:name => 'n', :__ggh => 'age').sql.should =~ /SELECT ((name AS n, __ggh AS age)|(__ggh AS age, name AS n)) FROM test/
1200
+ specify "should handle hashes returned from virtual row blocks" do
1201
+ @d.select{{:b=>:c}}.sql.should == 'SELECT (b = c) FROM test'
1258
1202
  end
1259
1203
 
1260
1204
  specify "should override the previous select option" do
@@ -1357,10 +1301,10 @@ describe "Dataset#select_more" do
1357
1301
  @d = Sequel.mock.dataset.from(:test)
1358
1302
  end
1359
1303
 
1360
- qspecify "should act like #select for datasets with no selection" do
1361
- @d.select_more(:a, :b).sql.should == 'SELECT a, b FROM test'
1362
- @d.select_all.select_more(:a, :b).sql.should == 'SELECT a, b FROM test'
1363
- @d.select(:blah).select_all.select_more(:a, :b).sql.should == 'SELECT a, b FROM test'
1304
+ specify "should act like #select_append for datasets with no selection" do
1305
+ @d.select_more(:a, :b).sql.should == 'SELECT *, a, b FROM test'
1306
+ @d.select_all.select_more(:a, :b).sql.should == 'SELECT *, a, b FROM test'
1307
+ @d.select(:blah).select_all.select_more(:a, :b).sql.should == 'SELECT *, a, b FROM test'
1364
1308
  end
1365
1309
 
1366
1310
  specify "should add to the currently selected columns" do
@@ -2139,10 +2083,6 @@ describe "Dataset#join_table" do
2139
2083
  @d.join(:categories, :category_id=>:id).sql.should == 'SELECT * FROM "items" INNER JOIN "categories" ON ("categories"."category_id" = "items"."id")'
2140
2084
  end
2141
2085
 
2142
- qspecify "should support aliased tables using the deprecated argument" do
2143
- @d.from('stats').join('players', {:id => :player_id}, 'p').sql.should == 'SELECT * FROM "stats" INNER JOIN "players" AS "p" ON ("p"."id" = "stats"."player_id")'
2144
- end
2145
-
2146
2086
  specify "should support aliased tables using the :table_alias option" do
2147
2087
  @d.from('stats').join('players', {:id => :player_id}, :table_alias=>:p).sql.should == 'SELECT * FROM "stats" INNER JOIN "players" AS "p" ON ("p"."id" = "stats"."player_id")'
2148
2088
  end
@@ -2185,6 +2125,10 @@ describe "Dataset#join_table" do
2185
2125
  @d.from('stats').join(:players, {Sequel.function(:f, :id) => Sequel.subscript(:player_id, 0)}, :qualify=>:deep).sql.should == 'SELECT * FROM "stats" INNER JOIN "players" ON (f("players"."id") = "stats"."player_id"[0])'
2186
2126
  end
2187
2127
 
2128
+ specify "should do only qualification if :qualify=>:symbol option is given" do
2129
+ @d.from('stats').join(:players, {Sequel.function(:f, :id) => :player_id}, :qualify=>:symbol).sql.should == 'SELECT * FROM "stats" INNER JOIN "players" ON (f("id") = "stats"."player_id")'
2130
+ end
2131
+
2188
2132
  specify "should allow for arbitrary conditions in the JOIN clause" do
2189
2133
  @d.join_table(:left_outer, :categories, :status => 0).sql.should == 'SELECT * FROM "items" LEFT OUTER JOIN "categories" ON ("categories"."status" = 0)'
2190
2134
  @d.join_table(:left_outer, :categories, :categorizable_type => "Post").sql.should == 'SELECT * FROM "items" LEFT OUTER JOIN "categories" ON ("categories"."categorizable_type" = \'Post\')'
@@ -2329,62 +2273,6 @@ describe "Dataset#join_table" do
2329
2273
  proc{@d.join(:categories, :a=>:d).delete_sql}.should raise_error(Sequel::InvalidOperation)
2330
2274
  proc{@d.join(:categories, :a=>:d).truncate_sql}.should raise_error(Sequel::InvalidOperation)
2331
2275
  end
2332
-
2333
- specify "should raise an error if an invalid option is passed" do
2334
- proc{@d.join(:c, [:id], nil)}.should raise_error(Sequel::Error)
2335
- proc{@d.join(:c, [:id], Sequel.qualify(:d, :c))}.should raise_error(Sequel::Error)
2336
- end
2337
- end
2338
-
2339
- describe "Dataset#[]=" do
2340
- qspecify "should perform an update on the specified filter" do
2341
- db = Sequel.mock
2342
- ds = db[:items]
2343
- ds[:a => 1] = {:x => 3}
2344
- db.sqls.should == ['UPDATE items SET x = 3 WHERE (a = 1)']
2345
- end
2346
- end
2347
-
2348
- describe "Dataset#set" do
2349
- qspecify "should act as alias to #update" do
2350
- db = Sequel.mock
2351
- ds = db[:items]
2352
- ds.set({:x => 3})
2353
- db.sqls.should == ['UPDATE items SET x = 3']
2354
- end
2355
- end
2356
-
2357
- describe "Dataset#insert_multiple" do
2358
- before do
2359
- @db = Sequel.mock(:autoid=>2)
2360
- @ds = @db[:items]
2361
- end
2362
-
2363
- qspecify "should insert all items in the supplied array" do
2364
- @ds.insert_multiple(['aa', 5, 3, {:a => 2}])
2365
- @db.sqls.should == ["INSERT INTO items VALUES ('aa')",
2366
- "INSERT INTO items VALUES (5)",
2367
- "INSERT INTO items VALUES (3)",
2368
- "INSERT INTO items (a) VALUES (2)"]
2369
- end
2370
-
2371
- qspecify "should pass array items through the supplied block if given" do
2372
- @ds.insert_multiple(["inevitable", "hello", "the ticking clock"]){|i| i.gsub('l', 'r')}
2373
- @db.sqls.should == ["INSERT INTO items VALUES ('inevitabre')",
2374
- "INSERT INTO items VALUES ('herro')",
2375
- "INSERT INTO items VALUES ('the ticking crock')"]
2376
- end
2377
-
2378
- qspecify "should return array of inserted ids" do
2379
- @ds.insert_multiple(['aa', 5, 3, {:a => 2}]).should == [2, 3, 4, 5]
2380
- end
2381
-
2382
- qspecify "should work exactly like in metioned in the example" do
2383
- @ds.insert_multiple([{:x=>1}, {:x=>2}]){|row| row[:y] = row[:x] * 2 ; row }
2384
- sqls = @db.sqls
2385
- ["INSERT INTO items (x, y) VALUES (1, 2)", "INSERT INTO items (y, x) VALUES (2, 1)"].should include(sqls[0])
2386
- ["INSERT INTO items (x, y) VALUES (2, 4)", "INSERT INTO items (y, x) VALUES (4, 2)"].should include(sqls[1])
2387
- end
2388
2276
  end
2389
2277
 
2390
2278
  describe "Dataset aggregate methods" do
@@ -2586,12 +2474,6 @@ describe "Dataset compound operations" do
2586
2474
  @b = Sequel.mock.dataset.from(:b).filter(:z => 2)
2587
2475
  end
2588
2476
 
2589
- qspecify "should support ALL with deprecated 2nd argument" do
2590
- @b.union(@a, true).sql.should == "SELECT * FROM (SELECT * FROM b WHERE (z = 2) UNION ALL SELECT * FROM a WHERE (z = 1)) AS t1"
2591
- @b.intersect(@a, true).sql.should == "SELECT * FROM (SELECT * FROM b WHERE (z = 2) INTERSECT ALL SELECT * FROM a WHERE (z = 1)) AS t1"
2592
- @b.except(@a, true).sql.should == "SELECT * FROM (SELECT * FROM b WHERE (z = 2) EXCEPT ALL SELECT * FROM a WHERE (z = 1)) AS t1"
2593
- end
2594
-
2595
2477
  specify "should support UNION and UNION ALL" do
2596
2478
  @a.union(@b).sql.should == "SELECT * FROM (SELECT * FROM a WHERE (z = 1) UNION SELECT * FROM b WHERE (z = 2)) AS t1"
2597
2479
  @b.union(@a, :all=>true).sql.should == "SELECT * FROM (SELECT * FROM b WHERE (z = 2) UNION ALL SELECT * FROM a WHERE (z = 1)) AS t1"
@@ -2759,8 +2641,8 @@ describe "Dataset#get" do
2759
2641
  end
2760
2642
 
2761
2643
  specify "should support false and nil values" do
2762
- @d.get(false).should == "SELECT 'f' FROM test LIMIT 1"
2763
- @d.get(nil).should == "SELECT NULL FROM test LIMIT 1"
2644
+ @d.get(false).should == "SELECT 'f' AS v FROM test LIMIT 1"
2645
+ @d.get(nil).should == "SELECT NULL AS v FROM test LIMIT 1"
2764
2646
  end
2765
2647
 
2766
2648
  specify "should support an array of expressions to get an array of results" do
@@ -3125,20 +3007,6 @@ describe "Dataset" do
3125
3007
  end
3126
3008
  end
3127
3009
 
3128
- describe "Dataset#to_csv" do
3129
- before do
3130
- @ds = Sequel.mock(:fetch=>[{:a=>1, :b=>2, :c=>3}, {:a=>4, :b=>5, :c=>6}, {:a=>7, :b=>8, :c=>9}])[:items].columns(:a, :b, :c)
3131
- end
3132
-
3133
- qspecify "should format a CSV representation of the records" do
3134
- @ds.to_csv.should == "a, b, c\r\n1, 2, 3\r\n4, 5, 6\r\n7, 8, 9\r\n"
3135
- end
3136
-
3137
- qspecify "should exclude column titles if so specified" do
3138
- @ds.to_csv(false).should == "1, 2, 3\r\n4, 5, 6\r\n7, 8, 9\r\n"
3139
- end
3140
- end
3141
-
3142
3010
  describe "Dataset#update_sql" do
3143
3011
  before do
3144
3012
  @ds = Sequel.mock.dataset.from(:items)
@@ -3334,10 +3202,6 @@ describe "Dataset default #fetch_rows, #insert, #update, #delete, #with_sql_dele
3334
3202
  @ds = @db[:items]
3335
3203
  end
3336
3204
 
3337
- qspecify "#fetch_rows should raise a Sequel::NotImplemented" do
3338
- proc{@ds.fetch_rows(''){}}.should raise_error(Sequel::NotImplemented)
3339
- end
3340
-
3341
3205
  specify "#delete should execute delete SQL" do
3342
3206
  @db.should_receive(:execute).once.with('DELETE FROM items', :server=>:default)
3343
3207
  @ds.delete
@@ -3577,66 +3441,6 @@ describe "Sequel::Dataset#each_server" do
3577
3441
  end
3578
3442
  end
3579
3443
 
3580
- describe "Sequel::Dataset #set_defaults" do
3581
- before do
3582
- @ds = Sequel.mock.dataset.from(:items)
3583
- end
3584
-
3585
- qspecify "should set the default values for inserts" do
3586
- @ds = @ds.set_defaults(:x=>1)
3587
- @ds.insert_sql.should == "INSERT INTO items (x) VALUES (1)"
3588
- @ds.insert_sql(:x=>2).should == "INSERT INTO items (x) VALUES (2)"
3589
- @ds.insert_sql(:y=>2).should =~ /INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/
3590
- @ds.set_defaults(:y=>2).insert_sql.should =~ /INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/
3591
- @ds.set_defaults(:x=>2).insert_sql.should == "INSERT INTO items (x) VALUES (2)"
3592
- end
3593
-
3594
- qspecify "should set the default values for updates" do
3595
- @ds = @ds.set_defaults(:x=>1)
3596
- @ds.update_sql.should == "UPDATE items SET x = 1"
3597
- @ds.update_sql(:x=>2).should == "UPDATE items SET x = 2"
3598
- @ds.update_sql(:y=>2).should =~ /UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/
3599
- @ds.set_defaults(:y=>2).update_sql.should =~ /UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/
3600
- @ds.set_defaults(:x=>2).update_sql.should == "UPDATE items SET x = 2"
3601
- end
3602
- end
3603
-
3604
- describe "Sequel::Dataset #set_overrides" do
3605
- before do
3606
- @ds = Sequel.mock.dataset.from(:items)
3607
- end
3608
-
3609
- qspecify "should override the given values for inserts" do
3610
- @ds = @ds.set_overrides(:x=>1)
3611
- @ds.insert_sql.should == "INSERT INTO items (x) VALUES (1)"
3612
- @ds.insert_sql(:x=>2).should == "INSERT INTO items (x) VALUES (1)"
3613
- @ds.insert_sql(:y=>2).should =~ /INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/
3614
- @ds.set_overrides(:y=>2).insert_sql.should =~ /INSERT INTO items \([xy], [xy]\) VALUES \([21], [21]\)/
3615
- @ds.set_overrides(:x=>2).insert_sql.should == "INSERT INTO items (x) VALUES (1)"
3616
- end
3617
-
3618
- qspecify "should override the given values for updates" do
3619
- @ds = @ds.set_overrides(:x=>1)
3620
- @ds.update_sql.should == "UPDATE items SET x = 1"
3621
- @ds.update_sql(:x=>2).should == "UPDATE items SET x = 1"
3622
- @ds.update_sql(:y=>2).should =~ /UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/
3623
- @ds.set_overrides(:y=>2).update_sql.should =~ /UPDATE items SET (x = 1|y = 2), (x = 1|y = 2)/
3624
- @ds.set_overrides(:x=>2).update_sql.should == "UPDATE items SET x = 1"
3625
- end
3626
- end
3627
-
3628
- describe "Sequel::Dataset#qualify_to_first_source" do
3629
- qspecify "should qualify to the first source" do
3630
- Sequel.mock.dataset.from(:t).filter{a<b}.qualify_to_first_source.sql.should == 'SELECT t.* FROM t WHERE (t.a < t.b)'
3631
- end
3632
- end
3633
-
3634
- describe "Sequel::Dataset#qualify_to" do
3635
- qspecify "should qualify to the given table" do
3636
- Sequel.mock.dataset.from(:t).filter{a<b}.qualify_to(:e).sql.should == 'SELECT e.* FROM t WHERE (e.a < e.b)'
3637
- end
3638
- end
3639
-
3640
3444
  describe "Sequel::Dataset#qualify" do
3641
3445
  before do
3642
3446
  @ds = Sequel::Database.new[:t]
@@ -3654,8 +3458,8 @@ describe "Sequel::Dataset#qualify" do
3654
3458
  @ds.filter(:a=>1).order(:a).group(:a).having(:a).qualify.sql.should == 'SELECT t.* FROM t WHERE (t.a = 1) GROUP BY t.a HAVING t.a ORDER BY t.a'
3655
3459
  end
3656
3460
 
3657
- qspecify "should handle hashes in select option" do
3658
- @ds.select(:a=>:b).qualify.sql.should == 'SELECT t.a AS b FROM t'
3461
+ specify "should handle hashes in select option" do
3462
+ @ds.select(:a=>:b).qualify.sql.should == 'SELECT (t.a = t.b) FROM t'
3659
3463
  end
3660
3464
 
3661
3465
  specify "should handle symbols" do
@@ -3748,6 +3552,11 @@ describe "Sequel::Dataset#unbind" do
3748
3552
  @ds.exclude(:foo=>1).unbind.last.should == {:foo=>1}
3749
3553
  end
3750
3554
 
3555
+ specify "should return variables as symbols" do
3556
+ @ds.filter(Sequel.expr(:foo)=>1).unbind.last.should == {:foo=>1}
3557
+ @ds.exclude(Sequel.expr(:foo__bar)=>1).unbind.last.should == {:"foo.bar"=>1}
3558
+ end
3559
+
3751
3560
  specify "should handle numerics, strings, dates, times, and datetimes" do
3752
3561
  @u[@ds.filter(:foo=>1)].should == ["SELECT * FROM t WHERE (foo = $foo)", {:foo=>1}]
3753
3562
  @u[@ds.filter(:foo=>1.0)].should == ["SELECT * FROM t WHERE (foo = $foo)", {:foo=>1.0}]
@@ -4117,7 +3926,7 @@ describe "Sequel::Dataset#select_map" do
4117
3926
 
4118
3927
  specify "should handle an expression without a determinable alias" do
4119
3928
  @ds.select_map{a(t__c)}.should == [1, 2]
4120
- @ds.db.sqls.should == ['SELECT a(t.c) FROM t']
3929
+ @ds.db.sqls.should == ['SELECT a(t.c) AS v FROM t']
4121
3930
  end
4122
3931
 
4123
3932
  specify "should accept a block" do
@@ -4196,7 +4005,7 @@ describe "Sequel::Dataset#select_order_map" do
4196
4005
 
4197
4006
  specify "should handle an expression without a determinable alias" do
4198
4007
  @ds.select_order_map{a(t__c)}.should == [1, 2]
4199
- @ds.db.sqls.should == ['SELECT a(t.c) FROM t ORDER BY a(t.c)']
4008
+ @ds.db.sqls.should == ['SELECT a(t.c) AS v FROM t ORDER BY a(t.c)']
4200
4009
  end
4201
4010
 
4202
4011
  specify "should accept a block" do
@@ -4575,12 +4384,6 @@ describe "Dataset#schema_and_table" do
4575
4384
  it "should correctly handle qualified identifiers" do
4576
4385
  @ds.schema_and_table(Sequel.qualify(:t, :s)).should == ['t', 's']
4577
4386
  end
4578
-
4579
- qspecify "should respect default_schema" do
4580
- @ds.db.default_schema = :foo
4581
- @ds.schema_and_table(:s).should == ['foo', 's']
4582
- @ds.schema_and_table(:s, nil).should == [nil, 's']
4583
- end
4584
4387
  end
4585
4388
 
4586
4389
  describe "Dataset#split_qualifiers" do
@@ -4615,13 +4418,6 @@ describe "Dataset#split_qualifiers" do
4615
4418
  @ds.split_qualifiers(Sequel.qualify(:d__t, :s__s2)).should == ['d', 't', 's', 's2']
4616
4419
  @ds.split_qualifiers(Sequel.qualify(Sequel.qualify(:d, :t), Sequel.qualify(:s, :s2))).should == ['d', 't', 's', 's2']
4617
4420
  end
4618
-
4619
- qspecify "should respect default_schema" do
4620
- @ds.db.default_schema = :foo
4621
- @ds.split_qualifiers(:s).should == ['foo', 's']
4622
- @ds.split_qualifiers(:s, nil).should == ['s']
4623
- @ds.split_qualifiers(Sequel.qualify(:d__t, :s)).should == ['d', 't', 's']
4624
- end
4625
4421
  end
4626
4422
 
4627
4423
  describe "Dataset#paged_each" do