sequel 3.48.0 → 4.0.0

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