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
@@ -67,12 +67,4 @@ describe "Sequel::Deprecated" do
67
67
  @output.first.should == 'foo'
68
68
  @output.count.should == 4
69
69
  end
70
-
71
- specify "should have deprecated_module return a module where all instance methods are marked deprecated" do
72
- m = Module.new{def foo; 1 end}
73
- dm = @d.deprecated_module(m){|meth| ["Module##{meth}", "Load the bar extension"]}
74
- dm.should_not == m
75
- c = Class.new{include dm}.new.foo.should == 1
76
- @output.should == ['Module#foo is deprecated and will be removed in Sequel 4.0. Load the bar extension.']
77
- end
78
70
  end
@@ -748,6 +748,10 @@ describe "Sequel core extension replacements" do
748
748
  Sequel.blob(o).should equal(o)
749
749
  end
750
750
 
751
+ it "Sequel.deep_qualify should do a deep qualification into nested structors" do
752
+ l(Sequel.deep_qualify(:t, Sequel.+(:c, 1)), "(t.c + 1)")
753
+ end
754
+
751
755
  it "Sequel.qualify should return a qualified identifier" do
752
756
  l(Sequel.qualify(:t, :c), "t.c")
753
757
  end
@@ -798,6 +802,8 @@ describe "Sequel core extension replacements" do
798
802
  l(Sequel.subscript(:a, 1), 'a[1]')
799
803
  l(Sequel.subscript(:a, 1, 2), 'a[1, 2]')
800
804
  l(Sequel.subscript(:a, [1, 2]), 'a[1, 2]')
805
+ l(Sequel.subscript(:a, 1..2), 'a[1:2]')
806
+ l(Sequel.subscript(:a, 1...3), 'a[1:2]')
801
807
  end
802
808
 
803
809
  it "Sequel.function should return an SQL function" do
@@ -1010,20 +1016,32 @@ describe "Sequel.delay" do
1010
1016
  end
1011
1017
  end
1012
1018
 
1013
- describe "Sequel.parse_json" do
1019
+ describe Sequel do
1014
1020
  before do
1015
- Sequel::JSON = Object.new
1016
- def (Sequel::JSON).parse(json, opts={})
1017
- [json, opts]
1021
+ Sequel::JSON = Class.new do
1022
+ self::ParserError = Sequel
1023
+ def self.parse(json, opts={})
1024
+ [json, opts]
1025
+ end
1018
1026
  end
1019
1027
  end
1020
1028
  after do
1021
1029
  Sequel.send(:remove_const, :JSON)
1022
1030
  end
1023
1031
 
1024
- specify "should parse json correctly" do
1032
+ specify ".parse_json should parse json correctly" do
1025
1033
  Sequel.parse_json('[]').should == ['[]', {:create_additions=>false}]
1026
1034
  end
1035
+
1036
+ specify ".json_parser_error_class should return the related parser error class" do
1037
+ Sequel.json_parser_error_class.should == Sequel
1038
+ end
1039
+
1040
+ specify ".object_to_json should return a json version of the object" do
1041
+ o = Object.new
1042
+ def o.to_json(*args); [1, args]; end
1043
+ Sequel.object_to_json(o, :foo).should == [1, [:foo]]
1044
+ end
1027
1045
  end
1028
1046
 
1029
1047
  describe "Sequel::LiteralString" do
@@ -172,6 +172,10 @@ describe Sequel::Dataset, " graphing" do
172
172
  @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :q]).add_graph_aliases(:y=>[:lines, :r]).sql.should == 'SELECT points.q AS x, lines.r AS y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)'
173
173
  end
174
174
 
175
+ it "#add_graph_aliases should raise an error if called without existing graph aliases" do
176
+ proc{@ds1.add_graph_aliases(:y=>[:lines, :r])}.should raise_error(Sequel::Error)
177
+ end
178
+
175
179
  it "#set_graph_aliases should allow a third entry to specify an expression to use other than the default" do
176
180
  ds = @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x, 1], :y=>[:lines, :y, Sequel.function(:random)])
177
181
  ['SELECT 1 AS x, random() AS y FROM points LEFT OUTER JOIN lines ON (lines.x = points.id)',
@@ -205,74 +209,8 @@ describe Sequel::Dataset, " graphing" do
205
209
  ].should(include(ds.sql))
206
210
  end
207
211
 
208
- qspecify "#graph_each should split the result set into component tables" do
209
- @db.fetch = [[{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7}],
210
- [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>8, :name=>9, :graphs_x=>10, :graphs_y=>11, :graphs_lines_x=>12}],
211
- [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graph_id_0=>8, :graph_x=>9, :graph_y=>10, :graph_graph_id=>11}]]
212
-
213
- @ds1.graph(@ds2, :x=>:id).all.should == [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}}]
214
- @ds1.graph(@ds2, :x=>:id).graph(@ds3, :id=>:graph_id).all.should == [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>{:id=>8, :name=>9, :x=>10, :y=>11, :lines_x=>12}}]
215
- @ds1.graph(@ds2, :x=>:id).graph(@ds2, {:y=>:points__id}, :table_alias=>:graph).all.should == [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graph=>{:id=>8, :x=>9, :y=>10, :graph_id=>11}}]
216
- end
217
-
218
212
  it "#ungraphed should remove the splitting of result sets into component tables" do
219
213
  @db.fetch = {:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7}
220
214
  @ds1.graph(@ds2, :x=>:id).ungraphed.all.should == [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7}]
221
215
  end
222
-
223
- qspecify "#graph_each should give a nil value instead of a hash when all values for a table are nil" do
224
- @db.fetch = [[{:id=>1,:x=>2,:y=>3,:lines_id=>nil,:lines_x=>nil,:lines_y=>nil,:graph_id=>nil}],
225
- [{:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>nil, :name=>nil, :graphs_x=>nil, :graphs_y=>nil, :graphs_lines_x=>nil},
226
- {:id=>2,:x=>4,:y=>5,:lines_id=>nil,:lines_x=>nil,:lines_y=>nil,:graph_id=>nil, :graphs_id=>nil, :name=>nil, :graphs_x=>nil, :graphs_y=>nil, :graphs_lines_x=>nil},
227
- {:id=>3,:x=>5,:y=>6,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7, :graphs_id=>7, :name=>8, :graphs_x=>9, :graphs_y=>10, :graphs_lines_x=>11},
228
- {:id=>3,:x=>5,:y=>6,:lines_id=>7,:lines_x=>5,:lines_y=>8,:graph_id=>9, :graphs_id=>9, :name=>10, :graphs_x=>10, :graphs_y=>11, :graphs_lines_x=>12}]]
229
-
230
- @ds1.graph(@ds2, :x=>:id).all.should == [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>nil}]
231
- @ds1.graph(@ds2, :x=>:id).graph(@ds3, :id=>:graph_id).all.should == [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>nil},
232
- {:points=>{:id=>2, :x=>4, :y=>5}, :lines=>nil, :graphs=>nil},
233
- {:points=>{:id=>3, :x=>5, :y=>6}, :lines=>{:id=>4, :x=>5, :y=>6, :graph_id=>7}, :graphs=>{:id=>7, :name=>8, :x=>9, :y=>10, :lines_x=>11}},
234
- {:points=>{:id=>3, :x=>5, :y=>6}, :lines=>{:id=>7, :x=>5, :y=>8, :graph_id=>9}, :graphs=>{:id=>9, :name=>10, :x=>10, :y=>11, :lines_x=>12}}]
235
- end
236
-
237
- qspecify "#graph_each should not give a nil value instead of a hash when any value for a table is false" do
238
- @db.fetch = {:id=>1,:x=>2,:y=>3,:lines_id=>nil,:lines_x=>false,:lines_y=>nil,:graph_id=>nil}
239
- @ds1.graph(@ds2, :x=>:id).all.should == [{:points=>{:id=>1, :x=>2, :y=>3}, :lines=>{:id=>nil, :x=>false, :y=>nil, :graph_id=>nil}}]
240
- end
241
-
242
- qspecify "#graph_each should not included tables graphed with the :select => false option in the result set" do
243
- @db.fetch = {:id=>1,:x=>2,:y=>3,:graphs_id=>8, :name=>9, :graphs_x=>10, :graphs_y=>11, :lines_x=>12}
244
- @ds1.graph(:lines, {:x=>:id}, :select=>false).graph(:graphs, :id=>:graph_id).all.should == [{:points=>{:id=>1, :x=>2, :y=>3}, :graphs=>{:id=>8, :name=>9, :x=>10, :y=>11, :lines_x=>12}}]
245
- end
246
-
247
- qspecify "#graph_each should only include the columns selected with #set_graph_aliases and #add_graph_aliases, if called" do
248
- @db.fetch = [nil, [{:x=>2,:y=>3}], nil, [{:x=>2}], [{:x=>2, :q=>18}]]
249
-
250
- @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x], :y=>[:lines, :y]).all.should == [{:points=>{:x=>2}, :lines=>{:y=>3}}]
251
- ds = @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :x])
252
- ds.all.should == [{:points=>{:x=>2}, :lines=>nil}]
253
- ds = ds.add_graph_aliases(:q=>[:points, :r, 18])
254
- ds.all.should == [{:points=>{:x=>2, :r=>18}, :lines=>nil}]
255
- end
256
-
257
- qspecify "#graph_each should correctly map values when #set_graph_aliases is used with a third argument for each entry" do
258
- @db.fetch = [nil, {:x=>2,:y=>3}]
259
- @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points, :z1, 2], :y=>[:lines, :z2, Sequel.function(:random)]).all.should == [{:points=>{:z1=>2}, :lines=>{:z2=>3}}]
260
- end
261
-
262
- qspecify "#graph_each should correctly map values when #set_graph_aliases is used with a single argument for each entry" do
263
- @db.fetch = [nil, {:x=>2,:y=>3}]
264
- @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>[:points], :y=>[:lines]).all.should == [{:points=>{:x=>2}, :lines=>{:y=>3}}]
265
- end
266
-
267
- qspecify "#graph_each should correctly map values when #set_graph_aliases is used with a symbol for each entry" do
268
- @db.fetch = [nil, {:x=>2,:y=>3}]
269
- @ds1.graph(:lines, :x=>:id).set_graph_aliases(:x=>:points, :y=>:lines).all.should == [{:points=>{:x=>2}, :lines=>{:y=>3}}]
270
- end
271
-
272
- qspecify "#graph_each should run the row_proc for graphed datasets" do
273
- @ds1.row_proc = proc{|h| h.keys.each{|k| h[k] *= 2}; h}
274
- @ds2.row_proc = proc{|h| h.keys.each{|k| h[k] *= 3}; h}
275
- @db.fetch = {:id=>1,:x=>2,:y=>3,:lines_id=>4,:lines_x=>5,:lines_y=>6,:graph_id=>7}
276
- @ds1.graph(@ds2, :x=>:id).all.should == [{:points=>{:id=>2, :x=>4, :y=>6}, :lines=>{:id=>12, :x=>15, :y=>18, :graph_id=>21}}]
277
- end
278
216
  end
@@ -502,11 +502,19 @@ describe "DB#create_table" do
502
502
  specify "should accept unnamed constraint definitions with blocks" do
503
503
  @db.create_table(:cats) do
504
504
  integer :score
505
- check{(x.sql_number > 0) & (y.sql_number < 1)}
505
+ check{(x > 0) & (y < 1)}
506
506
  end
507
507
  @db.sqls.should == ["CREATE TABLE cats (score integer, CHECK ((x > 0) AND (y < 1)))"]
508
508
  end
509
509
 
510
+ specify "should accept unnamed constraint definitions with function calls" do
511
+ @db.create_table(:cats) do
512
+ integer :score
513
+ check{f(x)}
514
+ end
515
+ @db.sqls.should == ["CREATE TABLE cats (score integer, CHECK (f(x)))"]
516
+ end
517
+
510
518
  specify "should accept unnamed constraint definitions" do
511
519
  @db.create_table(:cats) do
512
520
  check 'price < ?', 100
@@ -514,6 +522,13 @@ describe "DB#create_table" do
514
522
  @db.sqls.should == ["CREATE TABLE cats (CHECK (price < 100))"]
515
523
  end
516
524
 
525
+ specify "should accept arrays of pairs constraints" do
526
+ @db.create_table(:cats) do
527
+ check [[:price, 100]]
528
+ end
529
+ @db.sqls.should == ["CREATE TABLE cats (CHECK (price = 100))"]
530
+ end
531
+
517
532
  specify "should accept hash constraints" do
518
533
  @db.create_table(:cats) do
519
534
  check :price=>100
@@ -521,6 +536,13 @@ describe "DB#create_table" do
521
536
  @db.sqls.should == ["CREATE TABLE cats (CHECK (price = 100))"]
522
537
  end
523
538
 
539
+ specify "should accept array constraints" do
540
+ @db.create_table(:cats) do
541
+ check [Sequel.expr(:x) > 0, Sequel.expr(:y) < 1]
542
+ end
543
+ @db.sqls.should == ["CREATE TABLE cats (CHECK ((x > 0) AND (y < 1)))"]
544
+ end
545
+
524
546
  specify "should accept named constraint definitions" do
525
547
  @db.create_table(:cats) do
526
548
  integer :score
@@ -1124,14 +1146,6 @@ describe "Database#create_table" do
1124
1146
  @db.sqls.should == ['CREATE TEMPORARY TABLE test_tmp (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name text)',
1125
1147
  'CREATE UNIQUE INDEX test_tmp_name_index ON test_tmp (name)']
1126
1148
  end
1127
-
1128
- qspecify "should not use default schema when creating a temporary table" do
1129
- @db.default_schema = :foo
1130
- @db.create_table :test_tmp, :temp => true do
1131
- column :name, :text
1132
- end
1133
- @db.sqls.should == ['CREATE TEMPORARY TABLE test_tmp (name text)']
1134
- end
1135
1149
  end
1136
1150
 
1137
1151
  describe "Database#alter_table" do
@@ -1287,11 +1301,20 @@ describe "Database#create_view" do
1287
1301
  specify "should construct proper SQL with dataset" do
1288
1302
  @db.create_view :test, @db[:items].select(:a, :b).order(:c)
1289
1303
  @db.sqls.should == ['CREATE VIEW test AS SELECT a, b FROM items ORDER BY c']
1290
- @db.create_or_replace_view :sch__test, "SELECT * FROM xyz"
1291
- @db.sqls.should == ['DROP VIEW sch.test', 'CREATE VIEW sch.test AS SELECT * FROM xyz']
1292
1304
  end
1293
1305
 
1294
- specify "should construct proper SQL with dataset" do
1306
+ specify "should handle :columns option" do
1307
+ @db.create_view :test, @db[:items].select(:a, :b).order(:c), :columns=>[:d, :e]
1308
+ @db.sqls.should == ['CREATE VIEW test (d, e) AS SELECT a, b FROM items ORDER BY c']
1309
+ @db.create_view :test, @db[:items].select(:a, :b).order(:c), :columns=>%w'd e'
1310
+ @db.sqls.should == ['CREATE VIEW test (d, e) AS SELECT a, b FROM items ORDER BY c']
1311
+ @db.create_view :test, @db[:items].select(:a, :b).order(:c), :columns=>[Sequel.identifier('d'), Sequel.lit('e')]
1312
+ @db.sqls.should == ['CREATE VIEW test (d, e) AS SELECT a, b FROM items ORDER BY c']
1313
+ end
1314
+
1315
+ specify "should handle create_or_replace_view" do
1316
+ @db.create_or_replace_view :sch__test, "SELECT * FROM xyz"
1317
+ @db.sqls.should == ['DROP VIEW sch.test', 'CREATE VIEW sch.test AS SELECT * FROM xyz']
1295
1318
  @db.create_or_replace_view :test, @db[:items].select(:a, :b).order(:c)
1296
1319
  @db.sqls.should == ['DROP VIEW test', 'CREATE VIEW test AS SELECT a, b FROM items ORDER BY c']
1297
1320
  @db.create_or_replace_view Sequel.identifier(:test), @db[:items].select(:a, :b).order(:c)
@@ -7,7 +7,6 @@ end
7
7
 
8
8
  unless Object.const_defined?('Sequel')
9
9
  $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
10
- SEQUEL_NO_CORE_EXTENSIONS = true
11
10
  require 'sequel/core'
12
11
  end
13
12
  Sequel::Deprecation.backtrace_filter = lambda{|line, lineno| lineno < 4 || line =~ /_spec\.rb/}
@@ -38,7 +37,9 @@ end
38
37
 
39
38
  if ENV['SEQUEL_COLUMNS_INTROSPECTION']
40
39
  Sequel.extension :columns_introspection
41
- Sequel::Dataset.introspect_all_columns
40
+ Sequel::Database.extension :columns_introspection
41
+ Sequel.require 'adapters/mock'
42
+ Sequel::Mock::Dataset.send(:include, Sequel::ColumnsIntrospection)
42
43
  end
43
44
 
44
45
  Sequel.quote_identifiers = false
@@ -7,12 +7,8 @@ end
7
7
 
8
8
  unless Object.const_defined?('Sequel') && Sequel.const_defined?('Model')
9
9
  $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
10
- if dep_core_extensions = ENV['SEQUEL_DEPRECATED_CORE_EXTENSIONS']
11
- require 'sequel'
12
- else
13
- require 'sequel/no_core_ext'
14
- end
15
- Sequel::Deprecation.backtrace_filter = false
10
+ require 'sequel'
11
+ Sequel::Deprecation.backtrace_filter = true
16
12
  end
17
13
 
18
14
  Sequel.quote_identifiers = false
@@ -21,10 +17,8 @@ Sequel.identifier_output_method = nil
21
17
 
22
18
  Regexp.send(:include, Sequel::SQL::StringMethods)
23
19
  String.send(:include, Sequel::SQL::StringMethods)
24
- if dep_core_extensions.nil? || dep_core_extensions =~ /OVERRIDDEN/
25
- Sequel.extension :core_extensions
26
- end
27
- if RUBY_VERSION < '1.9.0' && (dep_core_extensions.nil? || dep_core_extensions =~ /SYMBOL18/)
20
+ Sequel.extension :core_extensions
21
+ if RUBY_VERSION < '1.9.0'
28
22
  Sequel.extension :ruby18_symbol_extensions
29
23
  end
30
24
 
@@ -264,7 +258,7 @@ end
264
258
 
265
259
  describe "Array#case and Hash#case" do
266
260
  before do
267
- @d = Sequel::Dataset.new(nil)
261
+ @d = Sequel.mock.dataset
268
262
  end
269
263
 
270
264
  specify "should return SQL CASE expression" do
@@ -296,7 +290,7 @@ end
296
290
 
297
291
  describe "Array#sql_value_list and #sql_array" do
298
292
  before do
299
- @d = Sequel::Dataset.new(nil)
293
+ @d = Sequel.mock.dataset
300
294
  end
301
295
 
302
296
  specify "should treat the array as an SQL value list instead of conditions when used as a placeholder value" do
@@ -391,7 +385,7 @@ end
391
385
 
392
386
  describe "#desc" do
393
387
  before do
394
- @ds = Sequel::Dataset.new(nil)
388
+ @ds = Sequel.mock.dataset
395
389
  end
396
390
 
397
391
  specify "should format a DESC clause for a column ref" do
@@ -407,7 +401,7 @@ end
407
401
 
408
402
  describe "#asc" do
409
403
  before do
410
- @ds = Sequel::Dataset.new(nil)
404
+ @ds = Sequel.mock.dataset
411
405
  end
412
406
 
413
407
  specify "should format a ASC clause for a column ref" do
@@ -423,7 +417,7 @@ end
423
417
 
424
418
  describe "#as" do
425
419
  before do
426
- @ds = Sequel::Dataset.new(nil)
420
+ @ds = Sequel.mock.dataset
427
421
  end
428
422
 
429
423
  specify "should format a AS clause for a column ref" do
@@ -488,7 +482,7 @@ end
488
482
  if RUBY_VERSION < '1.9.0'
489
483
  describe "Symbol#[]" do
490
484
  specify "should format an SQL Function" do
491
- ds = Sequel::Dataset.new(nil)
485
+ ds = Sequel.mock.dataset
492
486
  ds.literal(:xyz[]).should == 'xyz()'
493
487
  ds.literal(:xyz[1]).should == 'xyz(1)'
494
488
  ds.literal(:xyz[1, 2, :abc[3]]).should == 'xyz(1, 2, abc(3))'
@@ -498,7 +492,7 @@ end
498
492
 
499
493
  describe "Symbol#*" do
500
494
  before do
501
- @ds = Sequel::Dataset.new(nil)
495
+ @ds = Sequel.mock.dataset
502
496
  end
503
497
 
504
498
  specify "should format a qualified wildcard if no argument" do
@@ -518,7 +512,7 @@ end
518
512
 
519
513
  describe "Symbol" do
520
514
  before do
521
- @ds = Sequel::Dataset.new(nil)
515
+ @ds = Sequel.mock.dataset
522
516
  @ds.quote_identifiers = true
523
517
  @ds.identifier_input_method = :upcase
524
518
  end
@@ -634,7 +628,7 @@ end
634
628
  describe "Postgres extensions integration" do
635
629
  before do
636
630
  @db = Sequel.mock
637
- Sequel.extension(:pg_array, :pg_array_ops, :pg_hstore, :pg_hstore_ops, :pg_json, :pg_range, :pg_range_ops, :pg_row, :pg_row_ops)
631
+ Sequel.extension(:pg_array, :pg_array_ops, :pg_hstore, :pg_hstore_ops, :pg_json, :pg_json_ops, :pg_range, :pg_range_ops, :pg_row, :pg_row_ops)
638
632
  end
639
633
 
640
634
  it "Symbol#pg_array should return an ArrayOp" do
@@ -649,6 +643,10 @@ describe "Postgres extensions integration" do
649
643
  @db.literal(:a.hstore['a']).should == "(a -> 'a')"
650
644
  end
651
645
 
646
+ it "Symbol#pg_json should return an JSONOp" do
647
+ @db.literal(:a.pg_json[%w'a b']).should == "(a #> ARRAY['a','b'])"
648
+ end
649
+
652
650
  it "Symbol#pg_range should return a RangeOp" do
653
651
  @db.literal(:a.pg_range.lower).should == "lower(a)"
654
652
  end
@@ -65,7 +65,7 @@ describe "arbtirary servers" do
65
65
  end
66
66
 
67
67
  specify "should work correctly with server_block plugin" do
68
- @db.extend Sequel::ServerBlock
68
+ @db.extension :server_block
69
69
  @db.with_server(:host=>'host1', :database=>'db1') do
70
70
  @db.synchronize do |c|
71
71
  c.opts[:host].should == 'host1'
@@ -77,9 +77,8 @@ describe "arbtirary servers" do
77
77
  end
78
78
  end
79
79
 
80
-
81
80
  specify "should respect multithreaded access with server block plugin" do
82
- @db.extend Sequel::ServerBlock
81
+ @db.extension :server_block
83
82
  q, q1 = Queue.new, Queue.new
84
83
 
85
84
  t = nil
@@ -15,61 +15,61 @@ describe "AssociationDependencies plugin" do
15
15
  @Artist.one_to_one :first_album, :class=>@Album, :key=>:artist_id, :conditions=>{:position=>1}
16
16
  @Artist.many_to_many :other_artists, :class=>@Artist, :join_table=>:aoa, :left_key=>:l, :right_key=>:r
17
17
  @Album.many_to_one :artist, :class=>@Artist
18
- MODEL_DB.reset
18
+ DB.reset
19
19
  end
20
20
 
21
21
  specify "should allow destroying associated many_to_one associated object" do
22
22
  @Album.add_association_dependencies :artist=>:destroy
23
23
  @Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
24
- MODEL_DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
24
+ DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
25
25
  end
26
26
 
27
27
  specify "should allow deleting associated many_to_one associated object" do
28
28
  @Album.add_association_dependencies :artist=>:delete
29
29
  @Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
30
- MODEL_DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE (artists.id = 2)']
30
+ DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE (artists.id = 2)']
31
31
  end
32
32
 
33
33
  specify "should allow destroying associated one_to_one associated object" do
34
34
  @Artist.add_association_dependencies :first_album=>:destroy
35
35
  @Artist.load(:id=>2, :name=>'Ar').destroy
36
- MODEL_DB.sqls.should == ['SELECT * FROM albums WHERE ((position = 1) AND (albums.artist_id = 2)) LIMIT 1', 'DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE id = 2']
36
+ DB.sqls.should == ['SELECT * FROM albums WHERE ((position = 1) AND (albums.artist_id = 2)) LIMIT 1', 'DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE id = 2']
37
37
  end
38
38
 
39
39
  specify "should allow deleting associated one_to_one associated object" do
40
40
  @Artist.add_association_dependencies :first_album=>:delete
41
41
  @Artist.load(:id=>2, :name=>'Ar').destroy
42
- MODEL_DB.sqls.should == ['DELETE FROM albums WHERE ((position = 1) AND (albums.artist_id = 2))', 'DELETE FROM artists WHERE id = 2']
42
+ DB.sqls.should == ['DELETE FROM albums WHERE ((position = 1) AND (albums.artist_id = 2))', 'DELETE FROM artists WHERE id = 2']
43
43
  end
44
44
 
45
45
  specify "should allow destroying associated one_to_many objects" do
46
46
  @Artist.add_association_dependencies :albums=>:destroy
47
47
  @Artist.load(:id=>2, :name=>'Ar').destroy
48
- MODEL_DB.sqls.should == ['SELECT * FROM albums WHERE (albums.artist_id = 2)', 'DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE id = 2']
48
+ DB.sqls.should == ['SELECT * FROM albums WHERE (albums.artist_id = 2)', 'DELETE FROM albums WHERE id = 1', 'DELETE FROM artists WHERE id = 2']
49
49
  end
50
50
 
51
51
  specify "should allow deleting associated one_to_many objects" do
52
52
  @Artist.add_association_dependencies :albums=>:delete
53
53
  @Artist.load(:id=>2, :name=>'Ar').destroy
54
- MODEL_DB.sqls.should == ['DELETE FROM albums WHERE (albums.artist_id = 2)', 'DELETE FROM artists WHERE id = 2']
54
+ DB.sqls.should == ['DELETE FROM albums WHERE (albums.artist_id = 2)', 'DELETE FROM artists WHERE id = 2']
55
55
  end
56
56
 
57
57
  specify "should allow nullifying associated one_to_one objects" do
58
58
  @Artist.add_association_dependencies :first_album=>:nullify
59
59
  @Artist.load(:id=>2, :name=>'Ar').destroy
60
- MODEL_DB.sqls.should == ['UPDATE albums SET artist_id = NULL WHERE ((position = 1) AND (artist_id = 2))', 'DELETE FROM artists WHERE id = 2']
60
+ DB.sqls.should == ['UPDATE albums SET artist_id = NULL WHERE ((position = 1) AND (artist_id = 2))', 'DELETE FROM artists WHERE id = 2']
61
61
  end
62
62
 
63
63
  specify "should allow nullifying associated one_to_many objects" do
64
64
  @Artist.add_association_dependencies :albums=>:nullify
65
65
  @Artist.load(:id=>2, :name=>'Ar').destroy
66
- MODEL_DB.sqls.should == ['UPDATE albums SET artist_id = NULL WHERE (artist_id = 2)', 'DELETE FROM artists WHERE id = 2']
66
+ DB.sqls.should == ['UPDATE albums SET artist_id = NULL WHERE (artist_id = 2)', 'DELETE FROM artists WHERE id = 2']
67
67
  end
68
68
 
69
69
  specify "should allow nullifying associated many_to_many associations" do
70
70
  @Artist.add_association_dependencies :other_artists=>:nullify
71
71
  @Artist.load(:id=>2, :name=>'Ar').destroy
72
- MODEL_DB.sqls.should == ['DELETE FROM aoa WHERE (l = 2)', 'DELETE FROM artists WHERE id = 2']
72
+ DB.sqls.should == ['DELETE FROM aoa WHERE (l = 2)', 'DELETE FROM artists WHERE id = 2']
73
73
  end
74
74
 
75
75
  specify "should raise an error if attempting to nullify a many_to_one association" do
@@ -97,21 +97,21 @@ describe "AssociationDependencies plugin" do
97
97
  specify "should allow specifying association dependencies in the plugin call" do
98
98
  @Album.plugin :association_dependencies, :artist=>:destroy
99
99
  @Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
100
- MODEL_DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
100
+ DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
101
101
  end
102
102
 
103
103
  specify "should work with subclasses" do
104
104
  c = Class.new(@Album)
105
105
  c.add_association_dependencies :artist=>:destroy
106
106
  c.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
107
- MODEL_DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
107
+ DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
108
108
 
109
109
  @Album.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
110
- MODEL_DB.sqls.should == ['DELETE FROM albums WHERE id = 1']
110
+ DB.sqls.should == ['DELETE FROM albums WHERE id = 1']
111
111
 
112
112
  @Album.add_association_dependencies :artist=>:destroy
113
113
  c2 = Class.new(@Album)
114
114
  c2.load(:id=>1, :name=>'Al', :artist_id=>2).destroy
115
- MODEL_DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
115
+ DB.sqls.should == ['DELETE FROM albums WHERE id = 1', 'SELECT * FROM artists WHERE (artists.id = 2) LIMIT 1', 'DELETE FROM artists WHERE id = 2']
116
116
  end
117
117
  end