sequel 4.41.0 → 4.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +98 -0
  3. data/README.rdoc +23 -10
  4. data/doc/active_record.rdoc +4 -4
  5. data/doc/advanced_associations.rdoc +2 -2
  6. data/doc/association_basics.rdoc +5 -2
  7. data/doc/cheat_sheet.rdoc +3 -3
  8. data/doc/core_extensions.rdoc +2 -2
  9. data/doc/dataset_basics.rdoc +4 -4
  10. data/doc/dataset_filtering.rdoc +1 -1
  11. data/doc/migration.rdoc +19 -1
  12. data/doc/prepared_statements.rdoc +2 -2
  13. data/doc/release_notes/4.42.0.txt +221 -0
  14. data/doc/testing.rdoc +3 -1
  15. data/lib/sequel/adapters/ado/access.rb +0 -1
  16. data/lib/sequel/adapters/ado/mssql.rb +0 -1
  17. data/lib/sequel/adapters/do/mysql.rb +0 -1
  18. data/lib/sequel/adapters/do/postgres.rb +0 -1
  19. data/lib/sequel/adapters/do/sqlite3.rb +0 -1
  20. data/lib/sequel/adapters/ibmdb.rb +21 -25
  21. data/lib/sequel/adapters/jdbc.rb +8 -16
  22. data/lib/sequel/adapters/jdbc/as400.rb +0 -1
  23. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -1
  24. data/lib/sequel/adapters/jdbc/db2.rb +0 -1
  25. data/lib/sequel/adapters/jdbc/derby.rb +0 -1
  26. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -1
  27. data/lib/sequel/adapters/jdbc/h2.rb +0 -1
  28. data/lib/sequel/adapters/jdbc/hsqldb.rb +0 -1
  29. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -1
  30. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -1
  31. data/lib/sequel/adapters/jdbc/jtds.rb +0 -1
  32. data/lib/sequel/adapters/jdbc/mssql.rb +0 -1
  33. data/lib/sequel/adapters/jdbc/mysql.rb +0 -1
  34. data/lib/sequel/adapters/jdbc/oracle.rb +0 -1
  35. data/lib/sequel/adapters/jdbc/postgresql.rb +0 -13
  36. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +0 -1
  37. data/lib/sequel/adapters/jdbc/sqlite.rb +0 -1
  38. data/lib/sequel/adapters/jdbc/sqlserver.rb +3 -4
  39. data/lib/sequel/adapters/mock.rb +54 -12
  40. data/lib/sequel/adapters/mysql.rb +1 -1
  41. data/lib/sequel/adapters/mysql2.rb +11 -17
  42. data/lib/sequel/adapters/odbc/mssql.rb +0 -1
  43. data/lib/sequel/adapters/oracle.rb +8 -20
  44. data/lib/sequel/adapters/postgres.rb +11 -29
  45. data/lib/sequel/adapters/shared/access.rb +5 -12
  46. data/lib/sequel/adapters/shared/cubrid.rb +4 -13
  47. data/lib/sequel/adapters/shared/db2.rb +4 -2
  48. data/lib/sequel/adapters/shared/firebird.rb +2 -4
  49. data/lib/sequel/adapters/shared/informix.rb +4 -2
  50. data/lib/sequel/adapters/shared/mssql.rb +3 -5
  51. data/lib/sequel/adapters/shared/mysql.rb +4 -14
  52. data/lib/sequel/adapters/shared/oracle.rb +1 -3
  53. data/lib/sequel/adapters/shared/postgres.rb +16 -38
  54. data/lib/sequel/adapters/shared/progress.rb +0 -2
  55. data/lib/sequel/adapters/shared/sqlanywhere.rb +0 -2
  56. data/lib/sequel/adapters/shared/sqlite.rb +20 -16
  57. data/lib/sequel/adapters/sqlite.rb +8 -20
  58. data/lib/sequel/adapters/swift/mysql.rb +0 -1
  59. data/lib/sequel/adapters/swift/postgres.rb +0 -1
  60. data/lib/sequel/adapters/swift/sqlite.rb +0 -1
  61. data/lib/sequel/adapters/tinytds.rb +4 -12
  62. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +1 -1
  63. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -2
  64. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +11 -34
  65. data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
  66. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +26 -0
  67. data/lib/sequel/ast_transformer.rb +2 -2
  68. data/lib/sequel/database/dataset.rb +1 -1
  69. data/lib/sequel/database/dataset_defaults.rb +0 -66
  70. data/lib/sequel/database/features.rb +6 -0
  71. data/lib/sequel/database/misc.rb +31 -17
  72. data/lib/sequel/database/query.rb +7 -4
  73. data/lib/sequel/database/schema_methods.rb +1 -1
  74. data/lib/sequel/dataset.rb +8 -8
  75. data/lib/sequel/dataset/actions.rb +140 -46
  76. data/lib/sequel/dataset/features.rb +1 -5
  77. data/lib/sequel/dataset/graph.rb +7 -8
  78. data/lib/sequel/dataset/misc.rb +127 -56
  79. data/lib/sequel/dataset/mutation.rb +9 -20
  80. data/lib/sequel/dataset/placeholder_literalizer.rb +10 -1
  81. data/lib/sequel/dataset/prepared_statements.rb +102 -46
  82. data/lib/sequel/dataset/query.rb +155 -72
  83. data/lib/sequel/dataset/sql.rb +26 -9
  84. data/lib/sequel/extensions/columns_introspection.rb +3 -1
  85. data/lib/sequel/extensions/core_extensions.rb +5 -5
  86. data/lib/sequel/extensions/core_refinements.rb +5 -5
  87. data/lib/sequel/extensions/duplicate_columns_handler.rb +4 -2
  88. data/lib/sequel/extensions/freeze_datasets.rb +69 -0
  89. data/lib/sequel/extensions/identifier_mangling.rb +196 -0
  90. data/lib/sequel/extensions/looser_typecasting.rb +11 -7
  91. data/lib/sequel/extensions/migration.rb +1 -1
  92. data/lib/sequel/extensions/null_dataset.rb +5 -2
  93. data/lib/sequel/extensions/pagination.rb +42 -23
  94. data/lib/sequel/extensions/pg_enum.rb +3 -3
  95. data/lib/sequel/extensions/query.rb +3 -3
  96. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +15 -8
  97. data/lib/sequel/model/associations.rb +25 -8
  98. data/lib/sequel/model/base.rb +88 -29
  99. data/lib/sequel/model/dataset_module.rb +37 -0
  100. data/lib/sequel/plugins/association_pks.rb +4 -4
  101. data/lib/sequel/plugins/class_table_inheritance.rb +2 -2
  102. data/lib/sequel/plugins/constraint_validations.rb +1 -2
  103. data/lib/sequel/plugins/csv_serializer.rb +2 -2
  104. data/lib/sequel/plugins/dataset_associations.rb +8 -8
  105. data/lib/sequel/plugins/eager_each.rb +2 -2
  106. data/lib/sequel/plugins/instance_filters.rb +1 -1
  107. data/lib/sequel/plugins/json_serializer.rb +2 -2
  108. data/lib/sequel/plugins/lazy_attributes.rb +1 -1
  109. data/lib/sequel/plugins/list.rb +4 -4
  110. data/lib/sequel/plugins/prepared_statements.rb +2 -4
  111. data/lib/sequel/plugins/prepared_statements_associations.rb +1 -3
  112. data/lib/sequel/plugins/prepared_statements_with_pk.rb +1 -1
  113. data/lib/sequel/plugins/rcte_tree.rb +13 -13
  114. data/lib/sequel/plugins/sharding.rb +1 -1
  115. data/lib/sequel/plugins/single_table_inheritance.rb +9 -4
  116. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  117. data/lib/sequel/plugins/validation_class_methods.rb +1 -1
  118. data/lib/sequel/plugins/validation_helpers.rb +1 -1
  119. data/lib/sequel/plugins/xml_serializer.rb +2 -2
  120. data/lib/sequel/sql.rb +69 -36
  121. data/lib/sequel/version.rb +1 -1
  122. data/spec/adapters/db2_spec.rb +10 -0
  123. data/spec/adapters/firebird_spec.rb +1 -1
  124. data/spec/adapters/mssql_spec.rb +4 -5
  125. data/spec/adapters/mysql_spec.rb +9 -9
  126. data/spec/adapters/postgres_spec.rb +67 -68
  127. data/spec/adapters/spec_helper.rb +6 -1
  128. data/spec/adapters/sqlite_spec.rb +29 -15
  129. data/spec/core/connection_pool_spec.rb +14 -14
  130. data/spec/core/database_spec.rb +38 -180
  131. data/spec/core/dataset_mutation_spec.rb +253 -0
  132. data/spec/core/dataset_spec.rb +394 -537
  133. data/spec/core/expression_filters_spec.rb +34 -32
  134. data/spec/core/mock_adapter_spec.rb +27 -35
  135. data/spec/core/placeholder_literalizer_spec.rb +2 -4
  136. data/spec/core/schema_generator_spec.rb +4 -4
  137. data/spec/core/schema_spec.rb +1 -2
  138. data/spec/core_extensions_spec.rb +22 -29
  139. data/spec/extensions/active_model_spec.rb +6 -6
  140. data/spec/extensions/association_dependencies_spec.rb +2 -2
  141. data/spec/extensions/blacklist_security_spec.rb +3 -3
  142. data/spec/extensions/boolean_readers_spec.rb +12 -12
  143. data/spec/extensions/caching_spec.rb +13 -10
  144. data/spec/extensions/class_table_inheritance_spec.rb +38 -43
  145. data/spec/extensions/column_conflicts_spec.rb +1 -3
  146. data/spec/extensions/columns_introspection_spec.rb +2 -3
  147. data/spec/extensions/composition_spec.rb +5 -3
  148. data/spec/extensions/constraint_validations_plugin_spec.rb +5 -5
  149. data/spec/extensions/constraint_validations_spec.rb +14 -8
  150. data/spec/extensions/core_refinements_spec.rb +22 -29
  151. data/spec/extensions/csv_serializer_spec.rb +7 -6
  152. data/spec/extensions/date_arithmetic_spec.rb +15 -15
  153. data/spec/extensions/defaults_setter_spec.rb +2 -2
  154. data/spec/extensions/delay_add_association_spec.rb +1 -1
  155. data/spec/extensions/dirty_spec.rb +19 -10
  156. data/spec/extensions/duplicate_columns_handler_spec.rb +12 -18
  157. data/spec/extensions/eager_each_spec.rb +12 -16
  158. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  159. data/spec/extensions/eval_inspect_spec.rb +4 -3
  160. data/spec/extensions/force_encoding_spec.rb +12 -12
  161. data/spec/extensions/freeze_datasets_spec.rb +31 -0
  162. data/spec/extensions/graph_each_spec.rb +6 -18
  163. data/spec/extensions/hook_class_methods_spec.rb +7 -7
  164. data/spec/extensions/identifier_mangling_spec.rb +307 -0
  165. data/spec/extensions/instance_filters_spec.rb +5 -6
  166. data/spec/extensions/instance_hooks_spec.rb +12 -12
  167. data/spec/extensions/json_serializer_spec.rb +12 -15
  168. data/spec/extensions/lazy_attributes_spec.rb +4 -4
  169. data/spec/extensions/list_spec.rb +19 -21
  170. data/spec/extensions/many_through_many_spec.rb +108 -163
  171. data/spec/extensions/meta_def_spec.rb +7 -2
  172. data/spec/extensions/migration_spec.rb +10 -12
  173. data/spec/extensions/mssql_optimistic_locking_spec.rb +4 -3
  174. data/spec/extensions/named_timezones_spec.rb +4 -3
  175. data/spec/extensions/nested_attributes_spec.rb +2 -2
  176. data/spec/extensions/null_dataset_spec.rb +17 -12
  177. data/spec/extensions/optimistic_locking_spec.rb +4 -5
  178. data/spec/extensions/pagination_spec.rb +8 -10
  179. data/spec/extensions/pg_array_associations_spec.rb +28 -27
  180. data/spec/extensions/pg_array_ops_spec.rb +2 -1
  181. data/spec/extensions/pg_array_spec.rb +6 -2
  182. data/spec/extensions/pg_enum_spec.rb +5 -3
  183. data/spec/extensions/pg_hstore_ops_spec.rb +3 -1
  184. data/spec/extensions/pg_hstore_spec.rb +7 -6
  185. data/spec/extensions/pg_inet_ops_spec.rb +2 -1
  186. data/spec/extensions/pg_inet_spec.rb +2 -1
  187. data/spec/extensions/pg_interval_spec.rb +2 -1
  188. data/spec/extensions/pg_json_ops_spec.rb +2 -1
  189. data/spec/extensions/pg_json_spec.rb +6 -3
  190. data/spec/extensions/pg_loose_count_spec.rb +1 -0
  191. data/spec/extensions/pg_range_ops_spec.rb +3 -1
  192. data/spec/extensions/pg_range_spec.rb +9 -5
  193. data/spec/extensions/pg_row_ops_spec.rb +2 -1
  194. data/spec/extensions/pg_row_plugin_spec.rb +4 -6
  195. data/spec/extensions/pg_row_spec.rb +5 -3
  196. data/spec/extensions/pg_static_cache_updater_spec.rb +2 -1
  197. data/spec/extensions/pg_typecast_on_load_spec.rb +1 -1
  198. data/spec/extensions/prepared_statements_associations_spec.rb +1 -1
  199. data/spec/extensions/prepared_statements_spec.rb +12 -11
  200. data/spec/extensions/pretty_table_spec.rb +1 -1
  201. data/spec/extensions/query_spec.rb +8 -5
  202. data/spec/extensions/rcte_tree_spec.rb +39 -39
  203. data/spec/extensions/round_timestamps_spec.rb +2 -2
  204. data/spec/extensions/schema_dumper_spec.rb +3 -2
  205. data/spec/extensions/schema_spec.rb +2 -2
  206. data/spec/extensions/scissors_spec.rb +1 -2
  207. data/spec/extensions/sequel_3_dataset_methods_spec.rb +30 -17
  208. data/spec/extensions/serialization_modification_detection_spec.rb +2 -2
  209. data/spec/extensions/serialization_spec.rb +15 -13
  210. data/spec/extensions/set_overrides_spec.rb +14 -8
  211. data/spec/extensions/sharding_spec.rb +9 -18
  212. data/spec/extensions/shared_caching_spec.rb +3 -4
  213. data/spec/extensions/single_table_inheritance_spec.rb +11 -11
  214. data/spec/extensions/skip_create_refresh_spec.rb +2 -1
  215. data/spec/extensions/spec_helper.rb +1 -1
  216. data/spec/extensions/split_values_spec.rb +2 -2
  217. data/spec/extensions/sql_comments_spec.rb +6 -0
  218. data/spec/extensions/static_cache_spec.rb +7 -9
  219. data/spec/extensions/string_agg_spec.rb +30 -29
  220. data/spec/extensions/tactical_eager_loading_spec.rb +4 -5
  221. data/spec/extensions/thread_local_timezones_spec.rb +2 -2
  222. data/spec/extensions/timestamps_spec.rb +28 -3
  223. data/spec/extensions/to_dot_spec.rb +1 -2
  224. data/spec/extensions/tree_spec.rb +33 -29
  225. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  226. data/spec/extensions/unlimited_update_spec.rb +1 -0
  227. data/spec/extensions/update_primary_key_spec.rb +11 -7
  228. data/spec/extensions/update_refresh_spec.rb +1 -1
  229. data/spec/extensions/uuid_spec.rb +0 -1
  230. data/spec/extensions/validate_associated_spec.rb +1 -1
  231. data/spec/extensions/validation_class_methods_spec.rb +10 -10
  232. data/spec/extensions/validation_helpers_spec.rb +10 -10
  233. data/spec/extensions/xml_serializer_spec.rb +7 -3
  234. data/spec/integration/associations_test.rb +31 -31
  235. data/spec/integration/dataset_test.rb +17 -19
  236. data/spec/integration/eager_loader_test.rb +24 -24
  237. data/spec/integration/model_test.rb +6 -6
  238. data/spec/integration/plugin_test.rb +43 -43
  239. data/spec/integration/prepared_statement_test.rb +6 -6
  240. data/spec/integration/schema_test.rb +63 -52
  241. data/spec/integration/spec_helper.rb +6 -1
  242. data/spec/integration/transaction_test.rb +13 -13
  243. data/spec/model/association_reflection_spec.rb +17 -17
  244. data/spec/model/associations_spec.rb +101 -96
  245. data/spec/model/base_spec.rb +175 -49
  246. data/spec/model/class_dataset_methods_spec.rb +5 -9
  247. data/spec/model/dataset_methods_spec.rb +5 -5
  248. data/spec/model/eager_loading_spec.rb +209 -235
  249. data/spec/model/hooks_spec.rb +15 -15
  250. data/spec/model/model_spec.rb +28 -21
  251. data/spec/model/plugins_spec.rb +4 -5
  252. data/spec/model/record_spec.rb +59 -57
  253. data/spec/model/spec_helper.rb +1 -1
  254. data/spec/model/validations_spec.rb +6 -6
  255. data/spec/spec_config.rb +1 -1
  256. metadata +10 -2
@@ -4,7 +4,8 @@ Sequel.extension :pg_array, :pg_array_ops, :pg_hstore, :pg_hstore_ops
4
4
 
5
5
  describe "Sequel::Postgres::ArrayOp" do
6
6
  before do
7
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
7
+ @db = Sequel.connect('mock://postgres')
8
+ @db.extend_datasets{def quote_identifiers?; false end}
8
9
  @a = Sequel.pg_array_op(:a)
9
10
  end
10
11
 
@@ -12,8 +12,12 @@ describe "pg_array extension" do
12
12
  end
13
13
 
14
14
  before do
15
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
16
- @db.extend_datasets(Module.new{def supports_timestamp_timezones?; false; end; def supports_timestamp_usecs?; false; end})
15
+ @db = Sequel.connect('mock://postgres')
16
+ @db.extend_datasets(Module.new do
17
+ def supports_timestamp_timezones?; false end
18
+ def supports_timestamp_usecs?; false; end
19
+ def quote_identifiers?; false end
20
+ end)
17
21
  @db.extension(:pg_array)
18
22
  @m = Sequel::Postgres
19
23
  @converter = @m::PG_TYPES
@@ -4,14 +4,16 @@ Sequel.extension :migration
4
4
 
5
5
  describe "pg_enum extension" do
6
6
  before do
7
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
7
+ @db = Sequel.connect('mock://postgres')
8
+ @db.extend_datasets{def quote_identifiers?; false end}
8
9
  @db.extend(Module.new do
9
10
  def schema_parse_table(*)
10
11
  [[:a, {:oid=>1}]]
11
12
  end
13
+ def _metadata_dataset
14
+ super.with_fetch([[{:v=>1, :enumlabel=>'a'}, {:v=>1, :enumlabel=>'b'}, {:v=>1, :enumlabel=>'c'}], [{:typname=>'enum1', :v=>212389}]])
15
+ end
12
16
  end)
13
- @db.send(:metadata_dataset)._fetch = [[{:v=>1, :enumlabel=>'a'}, {:v=>1, :enumlabel=>'b'}, {:v=>1, :enumlabel=>'c'}],
14
- [{:typname=>'enum1', :v=>212389}]]
15
17
  @db.extension(:pg_array, :pg_enum)
16
18
  @db.sqls
17
19
  end
@@ -4,7 +4,9 @@ Sequel.extension :pg_array, :pg_array_ops, :pg_hstore, :pg_hstore_ops
4
4
 
5
5
  describe "Sequel::Postgres::HStoreOp" do
6
6
  before do
7
- @ds = Sequel.connect('mock://postgres', :quote_identifiers=>false).dataset
7
+ @db = Sequel.connect('mock://postgres')
8
+ @db.extend_datasets{def quote_identifiers?; false end}
9
+ @ds = @db.dataset
8
10
  @h = Sequel.hstore_op(:h)
9
11
  end
10
12
 
@@ -3,7 +3,8 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
3
3
  describe "pg_hstore extension" do
4
4
  before do
5
5
  Sequel.extension :pg_array, :pg_hstore
6
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
6
+ @db = Sequel.connect('mock://postgres')
7
+ @db.extend_datasets{def quote_identifiers?; false end}
7
8
  @m = Sequel::Postgres
8
9
  @c = @m::HStore
9
10
  @db.extension :pg_hstore
@@ -91,7 +92,7 @@ describe "pg_hstore extension" do
91
92
 
92
93
  if RUBY_VERSION >= '1.9.0'
93
94
  Sequel.hstore('foo'=>'bar').assoc(:foo).must_equal ['foo', 'bar']
94
- Sequel.hstore('foo'=>'bar').assoc(:foo2).must_equal nil
95
+ Sequel.hstore('foo'=>'bar').assoc(:foo2).must_be_nil
95
96
  end
96
97
  end
97
98
 
@@ -116,23 +117,23 @@ describe "pg_hstore extension" do
116
117
  if RUBY_VERSION >= '1.9.0'
117
118
  it "should convert key lookups to string" do
118
119
  Sequel.hstore('foo'=>'bar').key(:bar).must_equal 'foo'
119
- Sequel.hstore('foo'=>'bar').key(:bar2).must_equal nil
120
+ Sequel.hstore('foo'=>'bar').key(:bar2).must_be_nil
120
121
  end
121
122
 
122
123
  it "should handle nil values in key lookups" do
123
124
  Sequel.hstore('foo'=>'').key('').must_equal 'foo'
124
- Sequel.hstore('foo'=>'').key(nil).must_equal nil
125
+ Sequel.hstore('foo'=>'').key(nil).must_be_nil
125
126
  Sequel.hstore('foo'=>nil).key(nil).must_equal 'foo'
126
127
  end
127
128
 
128
129
  it "should convert rassoc lookups to string" do
129
130
  Sequel.hstore('foo'=>'bar').rassoc(:bar).must_equal ['foo', 'bar']
130
- Sequel.hstore('foo'=>'bar').rassoc(:bar2).must_equal nil
131
+ Sequel.hstore('foo'=>'bar').rassoc(:bar2).must_be_nil
131
132
  end
132
133
 
133
134
  it "should handle nil values in rassoc lookups" do
134
135
  Sequel.hstore('foo'=>'').rassoc('').must_equal ['foo', '']
135
- Sequel.hstore('foo'=>'').rassoc(nil).must_equal nil
136
+ Sequel.hstore('foo'=>'').rassoc(nil).must_be_nil
136
137
  Sequel.hstore('foo'=>nil).rassoc(nil).must_equal ['foo', nil]
137
138
  end
138
139
  end
@@ -4,7 +4,8 @@ Sequel.extension :pg_inet_ops
4
4
 
5
5
  describe "Sequel::Postgres::InetOp" do
6
6
  before do
7
- db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
7
+ db = Sequel.connect('mock://postgres')
8
+ db.extend_datasets{def quote_identifiers?; false end}
8
9
  db.extension :pg_inet
9
10
  @ds = db.dataset
10
11
  @h = Sequel.pg_inet_op(:h)
@@ -3,7 +3,8 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
3
3
  describe "pg_inet extension" do
4
4
  ipv6_broken = (IPAddr.new('::1'); false) rescue true
5
5
  before do
6
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
6
+ @db = Sequel.connect('mock://postgres')
7
+ @db.extend_datasets{def quote_identifiers?; false end}
7
8
  @db.extension(:pg_array, :pg_inet)
8
9
  end
9
10
 
@@ -7,7 +7,8 @@ rescue LoadError => exc
7
7
  else
8
8
  describe "pg_interval extension" do
9
9
  before do
10
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
10
+ @db = Sequel.connect('mock://postgres')
11
+ @db.extend_datasets{def quote_identifiers?; false end}
11
12
  @db.extension(:pg_array, :pg_interval)
12
13
  end
13
14
 
@@ -4,7 +4,8 @@ Sequel.extension :pg_array, :pg_array_ops, :pg_json, :pg_json_ops
4
4
 
5
5
  describe "Sequel::Postgres::JSONOp" do
6
6
  before do
7
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
7
+ @db = Sequel.connect('mock://postgres')
8
+ @db.extend_datasets{def quote_identifiers?; false end}
8
9
  @j = Sequel.pg_json_op(:j)
9
10
  @jb = Sequel.pg_jsonb_op(:j)
10
11
  @l = proc{|o| @db.literal(o)}
@@ -12,7 +12,8 @@ describe "pg_json extension" do
12
12
  @bac = m::JSONBArray
13
13
  end
14
14
  before do
15
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
15
+ @db = Sequel.connect('mock://postgres')
16
+ @db.extend_datasets{def quote_identifiers?; false end}
16
17
  @db.extension(:pg_array, :pg_json)
17
18
  end
18
19
 
@@ -53,15 +54,17 @@ describe "pg_json extension" do
53
54
  Sequel.instance_eval do
54
55
  alias pj parse_json
55
56
  def parse_json(v)
56
- {'1'=>1, "'a'"=>'a', 'true'=>true, 'false'=>false, 'null'=>nil, 'o'=>Object.new}.fetch(v){pj(v)}
57
+ {'1'=>1, "'a'"=>'a', 'true'=>true, 'false'=>false, 'null'=>nil, 'o'=>Object.new, '[one]'=>[1]}.fetch(v){pj(v)}
57
58
  end
58
59
  end
59
60
  @m.parse_json('1').must_equal 1
60
61
  @m.parse_json("'a'").must_equal 'a'
61
62
  @m.parse_json('true').must_equal true
62
63
  @m.parse_json('false').must_equal false
63
- @m.parse_json('null').must_equal nil
64
+ @m.parse_json('null').must_be_nil
64
65
  proc{@m.parse_json('o')}.must_raise(Sequel::InvalidValue)
66
+ @m.db_parse_json('one').must_equal 1
67
+ @m.db_parse_jsonb('one').must_equal 1
65
68
  ensure
66
69
  Sequel.instance_eval do
67
70
  alias parse_json pj
@@ -3,6 +3,7 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
3
3
  describe "pg_loose_count extension" do
4
4
  before do
5
5
  @db = Sequel.mock(:host=>'postgres', :fetch=>{:v=>1}).extension(:pg_loose_count)
6
+ @db.extend_datasets{def quote_identifiers?; false end}
6
7
  end
7
8
 
8
9
  it "should add loose_count method getting fast count for entire table using table statistics" do
@@ -4,7 +4,9 @@ Sequel.extension :pg_array, :pg_range, :pg_range_ops
4
4
 
5
5
  describe "Sequel::Postgres::RangeOp" do
6
6
  before do
7
- @ds = Sequel.connect('mock://postgres', :quote_identifiers=>false).dataset
7
+ db = Sequel.connect('mock://postgres')
8
+ db.extend_datasets{def quote_identifiers?; false end}
9
+ @ds = db.dataset
8
10
  @h = Sequel.pg_range_op(:h)
9
11
  end
10
12
 
@@ -11,9 +11,13 @@ describe "pg_range extension" do
11
11
  end
12
12
 
13
13
  before do
14
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
14
+ @db = Sequel.connect('mock://postgres')
15
15
  @R = Sequel::Postgres::PGRange
16
- @db.extend_datasets(Module.new{def supports_timestamp_timezones?; false; end; def supports_timestamp_usecs?; false; end})
16
+ @db.extend_datasets do
17
+ def supports_timestamp_timezones?; false end
18
+ def supports_timestamp_usecs?; false end
19
+ def quote_identifiers?; false end
20
+ end
17
21
  @db.extension(:pg_array, :pg_range)
18
22
  end
19
23
 
@@ -280,17 +284,17 @@ describe "pg_range extension" do
280
284
  it "should have #begin return the beginning of the range" do
281
285
  @r1.begin.must_equal 1
282
286
  @r2.begin.must_equal 3
283
- @r3.begin.must_equal nil
287
+ @r3.begin.must_be_nil
284
288
  end
285
289
 
286
290
  it "should have #end return the end of the range" do
287
291
  @r1.end.must_equal 2
288
- @r2.end.must_equal nil
292
+ @r2.end.must_be_nil
289
293
  @r3.end.must_equal 4
290
294
  end
291
295
 
292
296
  it "should have #db_type return the range's database type" do
293
- @r1.db_type.must_equal nil
297
+ @r1.db_type.must_be_nil
294
298
  @r2.db_type.must_equal 'int4range'
295
299
  @r3.db_type.must_equal 'int8range'
296
300
  end
@@ -4,7 +4,8 @@ Sequel.extension :pg_array, :pg_array_ops, :pg_row, :pg_row_ops
4
4
 
5
5
  describe "Sequel::Postgres::PGRowOp" do
6
6
  before do
7
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
7
+ @db = Sequel.connect('mock://postgres')
8
+ @db.extend_datasets{def quote_identifiers?; false end}
8
9
  @a = Sequel.pg_row_op(:a)
9
10
  end
10
11
 
@@ -1,8 +1,9 @@
1
1
  require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
2
 
3
3
  describe "Sequel::Plugins::PgRow" do
4
- before(:all) do
5
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
4
+ before do
5
+ @db = Sequel.connect('mock://postgres')
6
+ @db.extend_datasets{def quote_identifiers?; false end}
6
7
  @db.extension(:pg_array)
7
8
  @c = Class.new(Sequel::Model(@db[:address]))
8
9
  @c.columns :street, :city
@@ -15,9 +16,6 @@ describe "Sequel::Plugins::PgRow" do
15
16
  @c2.columns :address
16
17
  @c2.db_schema[:address].merge!(:type=>:pg_row_address)
17
18
  end
18
- after do
19
- @c.dataset.opts[:from] = [:address]
20
- end
21
19
 
22
20
  it "should have schema_type_class include Sequel::Model" do
23
21
  @c2.new.send(:schema_type_class, :address).must_equal @c
@@ -42,7 +40,7 @@ describe "Sequel::Plugins::PgRow" do
42
40
  end
43
41
 
44
42
  it "should handle literalizing model instances when model table is aliased" do
45
- @c.dataset.opts[:from] = [Sequel.as(:address, :a)]
43
+ @c.dataset = @c.dataset.from(Sequel.as(:address, :a))
46
44
  @db.literal(@c.load(:street=>'123 Foo St', :city=>'Bar City')).must_equal "ROW('123 Foo St', 'Bar City')::address"
47
45
  end
48
46
 
@@ -2,7 +2,8 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
2
 
3
3
  describe "pg_row extension" do
4
4
  before do
5
- @db = Sequel.connect('mock://postgres', :quote_identifiers=>false)
5
+ @db = Sequel.connect('mock://postgres')
6
+ @db.extend_datasets{def quote_identifiers?; false end}
6
7
  @db.extension(:pg_array, :pg_row)
7
8
  @m = Sequel::Postgres::PGRow
8
9
  @db.sqls
@@ -14,7 +15,7 @@ describe "pg_row extension" do
14
15
  a.to_a.must_be_kind_of(Array)
15
16
  a[0].must_equal 'a'
16
17
  a.must_equal %w'a b c'
17
- a.db_type.must_equal nil
18
+ a.db_type.must_be_nil
18
19
  @db.literal(a).must_equal "ROW('a', 'b', 'c')"
19
20
  end
20
21
 
@@ -24,7 +25,7 @@ describe "pg_row extension" do
24
25
  as.each do |a|
25
26
  a.class.must_equal(@m::ArrayRow)
26
27
  a.to_a.must_be_kind_of(Array)
27
- a.db_type.must_equal nil
28
+ a.db_type.must_be_nil
28
29
  end
29
30
  @db.literal(as).must_equal "ARRAY[ROW('a', 'b', 'c'),ROW('d', 'e', 'f')]::record[]"
30
31
  end
@@ -136,6 +137,7 @@ describe "pg_row extension" do
136
137
 
137
138
  it "should reload registered row types when reseting conversion procs" do
138
139
  db = Sequel.mock(:host=>'postgres')
140
+ db.extend_datasets{def quote_identifiers?; false end}
139
141
  db.extension(:pg_row)
140
142
  db.conversion_procs[4] = proc{|s| s.to_i}
141
143
  db.conversion_procs[5] = proc{|s| s * 2}
@@ -2,7 +2,8 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
2
 
3
3
  describe "pg_static_cache_updater extension" do
4
4
  before do
5
- @db = Sequel.mock(:host=>'postgres')
5
+ @db = Sequel.connect('mock://postgres')
6
+ @db.extend_datasets{def quote_identifiers?; false end}
6
7
  def @db.listen(chan, opts={})
7
8
  execute("LISTEN #{chan}")
8
9
  yield(*opts[:yield])
@@ -24,7 +24,7 @@ describe Sequel::Model, "PgTypecastOnLoad plugin" do
24
24
  end
25
25
 
26
26
  it "should call the database conversion proc with value when automatically reloading the object on creation via insert_select" do
27
- @c.dataset.meta_def(:insert_select){|h| insert(h); first}
27
+ @c.dataset = @c.dataset.with_extend{def insert_select(h) insert(h); first end}
28
28
  @c.create.values.must_equal(:id=>1, :b=>true, :y=>0)
29
29
  end
30
30
 
@@ -86,7 +86,7 @@ describe "Sequel::Plugins::PreparedStatementsAssociations" do
86
86
 
87
87
  it "should not run query if no objects can be associated" do
88
88
  @Artist.new.albums.must_equal []
89
- @Album.new.artist.must_equal nil
89
+ @Album.new.artist.must_be_nil
90
90
  @db.sqls.must_equal []
91
91
  end
92
92
 
@@ -49,7 +49,7 @@ describe "prepared_statements plugin" do
49
49
  true
50
50
  end
51
51
  def insert_select(h)
52
- self._fetch = {:id=>1, :name=>'foo', :i => 2}
52
+ cache_set(:_fetch, :id=>1, :name=>'foo', :i => 2)
53
53
  server(:default).with_sql_first(insert_select_sql(h))
54
54
  end
55
55
  def insert_select_sql(*v)
@@ -80,7 +80,7 @@ describe "prepared_statements plugin" do
80
80
 
81
81
  describe " with placeholder type specifiers" do
82
82
  before do
83
- @ds.meta_def(:requires_placeholder_type_specifiers?){true}
83
+ @ds = @ds.with_extend{def requires_placeholder_type_specifiers?; true end}
84
84
  end
85
85
 
86
86
  it "should correctly handle without schema type" do
@@ -90,17 +90,18 @@ describe "prepared_statements plugin" do
90
90
 
91
91
  it "should correctly handle with schema type" do
92
92
  @c.db_schema[:id][:type] = :integer
93
- ds = @c.send(:prepared_lookup)
94
- def ds.literal_symbol_append(sql, v)
95
- if @opts[:bind_vars] and match = /\A\$(.*)\z/.match(v.to_s)
96
- s = match[1].split('__')[0].to_sym
97
- if prepared_arg?(s)
98
- literal_append(sql, prepared_arg(s))
93
+ ds = @c.send(:prepared_lookup).with_extend do
94
+ def literal_symbol_append(sql, v)
95
+ if @opts[:bind_vars] and match = /\A\$(.*)\z/.match(v.to_s)
96
+ s = match[1].split('__')[0].to_sym
97
+ if prepared_arg?(s)
98
+ literal_append(sql, prepared_arg(s))
99
+ else
100
+ sql << v.to_s
101
+ end
99
102
  else
100
- sql << v.to_s
103
+ super
101
104
  end
102
- else
103
- super
104
105
  end
105
106
  end
106
107
  @c[1].must_equal @p
@@ -23,7 +23,7 @@ describe "Dataset#print" do
23
23
  end
24
24
 
25
25
  it "should default to the dataset's columns" do
26
- @dataset.meta_def(:columns) {[:a, :b]}
26
+ @dataset.columns(:a, :b)
27
27
  @dataset.print
28
28
  @output.rewind
29
29
  @output.read.must_equal \
@@ -87,12 +87,15 @@ describe "Dataset#query" do
87
87
  q.sql.must_equal "SELECT * FROM xyz"
88
88
  end
89
89
 
90
- it "should have an appropriate mutation method" do
91
- @d.query! do
92
- select :a, :b___mongo
93
- from :yyy
90
+ # SEQUEL5: Remove
91
+ unless Sequel.mock.dataset.frozen?
92
+ it "should have an appropriate mutation method" do
93
+ @d.query! do
94
+ select :a, :b___mongo
95
+ from :yyy
96
+ end
97
+ @d.sql.must_equal "SELECT a, b AS mongo FROM yyy"
94
98
  end
95
- @d.sql.must_equal "SELECT a, b AS mongo FROM yyy"
96
99
  end
97
100
 
98
101
  it "should raise on non-chainable method calls" do
@@ -35,7 +35,7 @@ describe Sequel::Model, "rcte_tree" do
35
35
  end
36
36
 
37
37
  it "should use the correct SQL for lazy associations when recursive CTEs require column aliases" do
38
- @c.dataset.meta_def(:recursive_cte_requires_column_aliases?){true}
38
+ @c.dataset = @c.dataset.with_extend{def recursive_cte_requires_column_aliases?; true end}
39
39
  @c.plugin :rcte_tree
40
40
  @o.parent_dataset.sql.must_equal 'SELECT * FROM nodes WHERE (nodes.id = 1) LIMIT 1'
41
41
  @o.children_dataset.sql.must_equal 'SELECT * FROM nodes WHERE (nodes.parent_id = 2)'
@@ -44,13 +44,13 @@ describe Sequel::Model, "rcte_tree" do
44
44
  end
45
45
 
46
46
  it "should use the correct SQL for eager loading when recursive CTEs require column aliases" do
47
- @c.dataset.meta_def(:recursive_cte_requires_column_aliases?){true}
47
+ @c.dataset = @c.dataset.with_extend{def recursive_cte_requires_column_aliases?; true end}
48
48
  @c.plugin :rcte_tree
49
- @ds._fetch = [[{:id=>1, :name=>'A', :parent_id=>3}]]
49
+ @c.dataset = @c.dataset.with_fetch([[{:id=>1, :name=>'A', :parent_id=>3}]])
50
50
  @c.eager(:ancestors).all
51
51
  @db.sqls.must_equal ["SELECT * FROM nodes", "WITH t(x_root_x, id, name, parent_id, i, pi) AS (SELECT id AS x_root_x, nodes.id, nodes.name, nodes.parent_id, nodes.i, nodes.pi FROM nodes WHERE (id IN (3)) UNION ALL SELECT t.x_root_x, nodes.id, nodes.name, nodes.parent_id, nodes.i, nodes.pi FROM nodes INNER JOIN t ON (t.parent_id = nodes.id)) SELECT * FROM t AS nodes"]
52
52
 
53
- @ds._fetch = [[{:id=>1, :name=>'A', :parent_id=>3}]]
53
+ @c.dataset = @c.dataset.with_fetch([[{:id=>1, :name=>'A', :parent_id=>3}]])
54
54
  @c.eager(:descendants).all
55
55
  @db.sqls.must_equal ["SELECT * FROM nodes", "WITH t(x_root_x, id, name, parent_id, i, pi) AS (SELECT parent_id AS x_root_x, nodes.id, nodes.name, nodes.parent_id, nodes.i, nodes.pi FROM nodes WHERE (parent_id IN (1)) UNION ALL SELECT t.x_root_x, nodes.id, nodes.name, nodes.parent_id, nodes.i, nodes.pi FROM nodes INNER JOIN t ON (t.id = nodes.parent_id)) SELECT * FROM t AS nodes"]
56
56
  end
@@ -73,27 +73,27 @@ describe Sequel::Model, "rcte_tree" do
73
73
 
74
74
  it "should add all parent associations when lazily loading ancestors" do
75
75
  @c.plugin :rcte_tree
76
- @ds._fetch = [[{:id=>1, :name=>'A', :parent_id=>3}, {:id=>4, :name=>'B', :parent_id=>nil}, {:id=>3, :name=>'?', :parent_id=>4}]]
76
+ @c.dataset = @c.dataset.with_fetch([[{:id=>1, :name=>'A', :parent_id=>3}, {:id=>4, :name=>'B', :parent_id=>nil}, {:id=>3, :name=>'?', :parent_id=>4}]])
77
77
  @o.ancestors.must_equal [@c.load(:id=>1, :name=>'A', :parent_id=>3), @c.load(:id=>4, :name=>'B', :parent_id=>nil), @c.load(:id=>3, :name=>'?', :parent_id=>4)]
78
78
  @o.associations[:parent].must_equal @c.load(:id=>1, :name=>'A', :parent_id=>3)
79
79
  @o.associations[:parent].associations[:parent].must_equal @c.load(:id=>3, :name=>'?', :parent_id=>4)
80
80
  @o.associations[:parent].associations[:parent].associations[:parent].must_equal @c.load(:id=>4, :name=>'B', :parent_id=>nil)
81
- @o.associations[:parent].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_equal nil
81
+ @o.associations[:parent].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_be_nil
82
82
  end
83
83
 
84
84
  it "should add all parent associations when lazily loading ancestors and giving options" do
85
85
  @c.plugin :rcte_tree, :primary_key=>:i, :key=>:pi, :ancestors=>{:name=>:as}, :parent=>{:name=>:p}
86
- @ds._fetch = [[{:i=>4, :name=>'A', :pi=>5}, {:i=>6, :name=>'B', :pi=>nil}, {:i=>5, :name=>'?', :pi=>6}]]
86
+ @c.dataset = @c.dataset.with_fetch([[{:i=>4, :name=>'A', :pi=>5}, {:i=>6, :name=>'B', :pi=>nil}, {:i=>5, :name=>'?', :pi=>6}]])
87
87
  @o.as.must_equal [@c.load(:i=>4, :name=>'A', :pi=>5), @c.load(:i=>6, :name=>'B', :pi=>nil), @c.load(:i=>5, :name=>'?', :pi=>6)]
88
88
  @o.associations[:p].must_equal @c.load(:i=>4, :name=>'A', :pi=>5)
89
89
  @o.associations[:p].associations[:p].must_equal @c.load(:i=>5, :name=>'?', :pi=>6)
90
90
  @o.associations[:p].associations[:p].associations[:p].must_equal @c.load(:i=>6, :name=>'B', :pi=>nil)
91
- @o.associations[:p].associations[:p].associations[:p].associations.fetch(:p, 1).must_equal nil
91
+ @o.associations[:p].associations[:p].associations[:p].associations.fetch(:p, 1).must_be_nil
92
92
  end
93
93
 
94
94
  it "should add all parent and children associations when lazily loading descendants" do
95
95
  @c.plugin :rcte_tree
96
- @ds._fetch = [[{:id=>3, :name=>'??', :parent_id=>1}, {:id=>1, :name=>'A', :parent_id=>2}, {:id=>4, :name=>'B', :parent_id=>2}, {:id=>5, :name=>'?', :parent_id=>3}]]
96
+ @c.dataset = @c.dataset.with_fetch([[{:id=>3, :name=>'??', :parent_id=>1}, {:id=>1, :name=>'A', :parent_id=>2}, {:id=>4, :name=>'B', :parent_id=>2}, {:id=>5, :name=>'?', :parent_id=>3}]])
97
97
  @o.descendants.must_equal [@c.load(:id=>3, :name=>'??', :parent_id=>1), @c.load(:id=>1, :name=>'A', :parent_id=>2), @c.load(:id=>4, :name=>'B', :parent_id=>2), @c.load(:id=>5, :name=>'?', :parent_id=>3)]
98
98
  @o.associations[:children].must_equal [@c.load(:id=>1, :name=>'A', :parent_id=>2), @c.load(:id=>4, :name=>'B', :parent_id=>2)]
99
99
  @o.associations[:children].map{|c1| c1.associations[:children]}.must_equal [[@c.load(:id=>3, :name=>'??', :parent_id=>1)], []]
@@ -106,7 +106,7 @@ describe Sequel::Model, "rcte_tree" do
106
106
 
107
107
  it "should add all children associations when lazily loading descendants and giving options" do
108
108
  @c.plugin :rcte_tree, :primary_key=>:i, :key=>:pi, :children=>{:name=>:cs}, :descendants=>{:name=>:ds}
109
- @ds._fetch = [[{:i=>7, :name=>'??', :pi=>5}, {:i=>5, :name=>'A', :pi=>3}, {:i=>6, :name=>'B', :pi=>3}, {:i=>8, :name=>'?', :pi=>7}]]
109
+ @c.dataset = @c.dataset.with_fetch([[{:i=>7, :name=>'??', :pi=>5}, {:i=>5, :name=>'A', :pi=>3}, {:i=>6, :name=>'B', :pi=>3}, {:i=>8, :name=>'?', :pi=>7}]])
110
110
  @o.ds.must_equal [@c.load(:i=>7, :name=>'??', :pi=>5), @c.load(:i=>5, :name=>'A', :pi=>3), @c.load(:i=>6, :name=>'B', :pi=>3), @c.load(:i=>8, :name=>'?', :pi=>7)]
111
111
  @o.associations[:cs].must_equal [@c.load(:i=>5, :name=>'A', :pi=>3), @c.load(:i=>6, :name=>'B', :pi=>3)]
112
112
  @o.associations[:cs].map{|c1| c1.associations[:cs]}.must_equal [[@c.load(:i=>7, :name=>'??', :pi=>5)], []]
@@ -116,10 +116,10 @@ describe Sequel::Model, "rcte_tree" do
116
116
 
117
117
  it "should eagerly load ancestors" do
118
118
  @c.plugin :rcte_tree
119
- @ds._fetch = [[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}, {:id=>9, :parent_id=>nil, :name=>'E'}],
119
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}, {:id=>9, :parent_id=>nil, :name=>'E'}],
120
120
  [{:id=>2, :name=>'AA', :parent_id=>1, :x_root_x=>2},
121
121
  {:id=>1, :name=>'00', :parent_id=>8, :x_root_x=>1}, {:id=>1, :name=>'00', :parent_id=>8, :x_root_x=>2},
122
- {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>2}, {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>1}]]
122
+ {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>2}, {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>1}]])
123
123
  os = @ds.eager(:ancestors).all
124
124
  sqls = @db.sqls
125
125
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -138,10 +138,10 @@ describe Sequel::Model, "rcte_tree" do
138
138
 
139
139
  it "should eagerly load ancestors when giving options" do
140
140
  @c.plugin :rcte_tree, :primary_key=>:i, :key=>:pi, :key_alias=>:kal, :cte_name=>:cte, :ancestors=>{:name=>:as}, :parent=>{:name=>:p}
141
- @ds._fetch = [[{:i=>2, :pi=>1, :name=>'AA'}, {:i=>6, :pi=>2, :name=>'C'}, {:i=>7, :pi=>1, :name=>'D'}, {:i=>9, :pi=>nil, :name=>'E'}],
141
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:i=>2, :pi=>1, :name=>'AA'}, {:i=>6, :pi=>2, :name=>'C'}, {:i=>7, :pi=>1, :name=>'D'}, {:i=>9, :pi=>nil, :name=>'E'}],
142
142
  [{:i=>2, :name=>'AA', :pi=>1, :kal=>2},
143
143
  {:i=>1, :name=>'00', :pi=>8, :kal=>1}, {:i=>1, :name=>'00', :pi=>8, :kal=>2},
144
- {:i=>8, :name=>'?', :pi=>nil, :kal=>2}, {:i=>8, :name=>'?', :pi=>nil, :kal=>1}]]
144
+ {:i=>8, :name=>'?', :pi=>nil, :kal=>2}, {:i=>8, :name=>'?', :pi=>nil, :kal=>1}]])
145
145
  os = @ds.eager(:as).all
146
146
  sqls = @db.sqls
147
147
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -159,10 +159,10 @@ describe Sequel::Model, "rcte_tree" do
159
159
 
160
160
  it "should eagerly load ancestors respecting association option :conditions" do
161
161
  @c.plugin :rcte_tree, :conditions => {:i => 1}
162
- @ds._fetch = [[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}, {:id=>9, :parent_id=>nil, :name=>'E'}],
162
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}, {:id=>9, :parent_id=>nil, :name=>'E'}],
163
163
  [{:id=>2, :name=>'AA', :parent_id=>1, :x_root_x=>2},
164
164
  {:id=>1, :name=>'00', :parent_id=>8, :x_root_x=>1}, {:id=>1, :name=>'00', :parent_id=>8, :x_root_x=>2},
165
- {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>2}, {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>1}]]
165
+ {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>2}, {:id=>8, :name=>'?', :parent_id=>nil, :x_root_x=>1}]])
166
166
  @ds.eager(:ancestors).all
167
167
  sqls = @db.sqls
168
168
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -171,10 +171,10 @@ describe Sequel::Model, "rcte_tree" do
171
171
 
172
172
  it "should eagerly load descendants" do
173
173
  @c.plugin :rcte_tree
174
- @ds._fetch = [[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}],
174
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}],
175
175
  [{:id=>6, :parent_id=>2, :name=>'C', :x_root_x=>2}, {:id=>9, :parent_id=>2, :name=>'E', :x_root_x=>2},
176
176
  {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>6}, {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>2},
177
- {:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7}]]
177
+ {:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7}]])
178
178
  os = @ds.eager(:descendants).all
179
179
  sqls = @db.sqls
180
180
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -193,10 +193,10 @@ describe Sequel::Model, "rcte_tree" do
193
193
 
194
194
  it "should eagerly load descendants when giving options" do
195
195
  @c.plugin :rcte_tree, :primary_key=>:i, :key=>:pi, :key_alias=>:kal, :cte_name=>:cte, :children=>{:name=>:cs}, :descendants=>{:name=>:ds}
196
- @ds._fetch = [[{:i=>2, :pi=>1, :name=>'AA'}, {:i=>6, :pi=>2, :name=>'C'}, {:i=>7, :pi=>1, :name=>'D'}],
196
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:i=>2, :pi=>1, :name=>'AA'}, {:i=>6, :pi=>2, :name=>'C'}, {:i=>7, :pi=>1, :name=>'D'}],
197
197
  [{:i=>6, :pi=>2, :name=>'C', :kal=>2}, {:i=>9, :pi=>2, :name=>'E', :kal=>2},
198
198
  {:i=>3, :name=>'00', :pi=>6, :kal=>6}, {:i=>3, :name=>'00', :pi=>6, :kal=>2},
199
- {:i=>4, :name=>'?', :pi=>7, :kal=>7}, {:i=>5, :name=>'?', :pi=>4, :kal=>7}]]
199
+ {:i=>4, :name=>'?', :pi=>7, :kal=>7}, {:i=>5, :name=>'?', :pi=>4, :kal=>7}]])
200
200
  os = @ds.eager(:ds).all
201
201
  sqls = @db.sqls
202
202
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -213,10 +213,10 @@ describe Sequel::Model, "rcte_tree" do
213
213
 
214
214
  it "should eagerly load descendants to a given level" do
215
215
  @c.plugin :rcte_tree
216
- @ds._fetch = [[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}],
216
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}],
217
217
  [{:id=>6, :parent_id=>2, :name=>'C', :x_root_x=>2, :x_level_x=>0}, {:id=>9, :parent_id=>2, :name=>'E', :x_root_x=>2, :x_level_x=>0},
218
218
  {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>6, :x_level_x=>0}, {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>2, :x_level_x=>1},
219
- {:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7, :x_level_x=>0}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7, :x_level_x=>1}]]
219
+ {:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7, :x_level_x=>0}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7, :x_level_x=>1}]])
220
220
  os = @ds.eager(:descendants=>2).all
221
221
  sqls = @db.sqls
222
222
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -233,10 +233,10 @@ describe Sequel::Model, "rcte_tree" do
233
233
 
234
234
  it "should eagerly load descendants to a given level when giving options" do
235
235
  @c.plugin :rcte_tree, :primary_key=>:i, :key=>:pi, :key_alias=>:kal, :level_alias=>:lal, :cte_name=>:cte, :children=>{:name=>:cs}, :descendants=>{:name=>:ds}
236
- @ds._fetch = [[{:i=>2, :pi=>1, :name=>'AA'}, {:i=>6, :pi=>2, :name=>'C'}, {:i=>7, :pi=>1, :name=>'D'}],
236
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:i=>2, :pi=>1, :name=>'AA'}, {:i=>6, :pi=>2, :name=>'C'}, {:i=>7, :pi=>1, :name=>'D'}],
237
237
  [{:i=>6, :pi=>2, :name=>'C', :kal=>2, :lal=>0}, {:i=>9, :pi=>2, :name=>'E', :kal=>2, :lal=>0},
238
238
  {:i=>3, :name=>'00', :pi=>6, :kal=>6, :lal=>0}, {:i=>3, :name=>'00', :pi=>6, :kal=>2, :lal=>1},
239
- {:i=>4, :name=>'?', :pi=>7, :kal=>7, :lal=>0}, {:i=>5, :name=>'?', :pi=>4, :kal=>7, :lal=>1}]]
239
+ {:i=>4, :name=>'?', :pi=>7, :kal=>7, :lal=>0}, {:i=>5, :name=>'?', :pi=>4, :kal=>7, :lal=>1}]])
240
240
  os = @ds.eager(:ds=>2).all
241
241
  sqls = @db.sqls
242
242
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -253,10 +253,10 @@ describe Sequel::Model, "rcte_tree" do
253
253
 
254
254
  it "should eagerly load descendants respecting association option :conditions" do
255
255
  @c.plugin :rcte_tree, :conditions => {:i => 1}
256
- @ds._fetch = [[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}],
256
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:id=>2, :parent_id=>1, :name=>'AA'}, {:id=>6, :parent_id=>2, :name=>'C'}, {:id=>7, :parent_id=>1, :name=>'D'}],
257
257
  [{:id=>6, :parent_id=>2, :name=>'C', :x_root_x=>2}, {:id=>9, :parent_id=>2, :name=>'E', :x_root_x=>2},
258
258
  {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>6}, {:id=>3, :name=>'00', :parent_id=>6, :x_root_x=>2},
259
- {:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7}]]
259
+ {:id=>4, :name=>'?', :parent_id=>7, :x_root_x=>7}, {:id=>5, :name=>'?', :parent_id=>4, :x_root_x=>7}]])
260
260
  @ds.eager(:descendants).all
261
261
  sqls = @db.sqls
262
262
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -290,37 +290,37 @@ describe Sequel::Model, "rcte_tree with composite keys" do
290
290
  end
291
291
 
292
292
  it "should use the correct SQL for lazy associations when recursive CTEs require column aliases" do
293
- @c.dataset.meta_def(:recursive_cte_requires_column_aliases?){true}
293
+ @c.dataset = @c.dataset.with_extend{def recursive_cte_requires_column_aliases?; true end}
294
294
  @c.plugin :rcte_tree, :key=>[:parent_id, :parent_id2]
295
295
  @o.ancestors_dataset.sql.must_equal 'WITH t(id, id2, name, parent_id, parent_id2, i, pi) AS (SELECT id, id2, name, parent_id, parent_id2, i, pi FROM nodes WHERE ((id = 1) AND (id2 = 6)) UNION ALL SELECT nodes.id, nodes.id2, nodes.name, nodes.parent_id, nodes.parent_id2, nodes.i, nodes.pi FROM nodes INNER JOIN t ON ((t.parent_id = nodes.id) AND (t.parent_id2 = nodes.id2))) SELECT * FROM t AS nodes'
296
296
  @o.descendants_dataset.sql.must_equal 'WITH t(id, id2, name, parent_id, parent_id2, i, pi) AS (SELECT id, id2, name, parent_id, parent_id2, i, pi FROM nodes WHERE ((parent_id = 2) AND (parent_id2 = 5)) UNION ALL SELECT nodes.id, nodes.id2, nodes.name, nodes.parent_id, nodes.parent_id2, nodes.i, nodes.pi FROM nodes INNER JOIN t ON ((t.id = nodes.parent_id) AND (t.id2 = nodes.parent_id2))) SELECT * FROM t AS nodes'
297
297
  end
298
298
 
299
299
  it "should use the correct SQL for eager loading when recursive CTEs require column aliases" do
300
- @c.dataset.meta_def(:recursive_cte_requires_column_aliases?){true}
300
+ @c.dataset = @c.dataset.with_extend{def recursive_cte_requires_column_aliases?; true end}
301
301
  @c.plugin :rcte_tree, :key=>[:parent_id, :parent_id2]
302
- @ds._fetch = [[{:id=>1, :id2=>2, :name=>'A', :parent_id=>3, :parent_id2=>4}]]
302
+ @c.dataset = @c.dataset.with_fetch([[{:id=>1, :id2=>2, :name=>'A', :parent_id=>3, :parent_id2=>4}]])
303
303
  @c.eager(:ancestors).all
304
304
  @db.sqls.must_equal ["SELECT * FROM nodes", "WITH t(x_root_x_0, x_root_x_1, id, id2, name, parent_id, parent_id2, i, pi) AS (SELECT id AS x_root_x_0, id2 AS x_root_x_1, nodes.id, nodes.id2, nodes.name, nodes.parent_id, nodes.parent_id2, nodes.i, nodes.pi FROM nodes WHERE ((id, id2) IN ((3, 4))) UNION ALL SELECT t.x_root_x_0, t.x_root_x_1, nodes.id, nodes.id2, nodes.name, nodes.parent_id, nodes.parent_id2, nodes.i, nodes.pi FROM nodes INNER JOIN t ON ((t.parent_id = nodes.id) AND (t.parent_id2 = nodes.id2))) SELECT * FROM t AS nodes"]
305
305
 
306
- @ds._fetch = [[{:id=>1, :id2=>2, :name=>'A', :parent_id=>3, :parent_id2=>4}]]
306
+ @c.dataset = @c.dataset.with_fetch([[{:id=>1, :id2=>2, :name=>'A', :parent_id=>3, :parent_id2=>4}]])
307
307
  @c.eager(:descendants).all
308
308
  @db.sqls.must_equal ["SELECT * FROM nodes", "WITH t(x_root_x_0, x_root_x_1, id, id2, name, parent_id, parent_id2, i, pi) AS (SELECT parent_id AS x_root_x_0, parent_id2 AS x_root_x_1, nodes.id, nodes.id2, nodes.name, nodes.parent_id, nodes.parent_id2, nodes.i, nodes.pi FROM nodes WHERE ((parent_id, parent_id2) IN ((1, 2))) UNION ALL SELECT t.x_root_x_0, t.x_root_x_1, nodes.id, nodes.id2, nodes.name, nodes.parent_id, nodes.parent_id2, nodes.i, nodes.pi FROM nodes INNER JOIN t ON ((t.id = nodes.parent_id) AND (t.id2 = nodes.parent_id2))) SELECT * FROM t AS nodes"]
309
309
  end
310
310
 
311
311
  it "should add all parent associations when lazily loading ancestors" do
312
312
  @c.plugin :rcte_tree, :key=>[:parent_id, :parent_id2]
313
- @ds._fetch = [[{:id=>1, :id2=>6, :name=>'A', :parent_id=>3, :parent_id2=>5}, {:id=>4, :id2=>8, :name=>'B', :parent_id=>nil, :parent_id2=>nil}, {:id=>3, :id2=>5, :name=>'?', :parent_id=>4, :parent_id2=>8}]]
313
+ @c.dataset = @c.dataset.with_fetch([[{:id=>1, :id2=>6, :name=>'A', :parent_id=>3, :parent_id2=>5}, {:id=>4, :id2=>8, :name=>'B', :parent_id=>nil, :parent_id2=>nil}, {:id=>3, :id2=>5, :name=>'?', :parent_id=>4, :parent_id2=>8}]])
314
314
  @o.ancestors.must_equal [@c.load(:id=>1, :id2=>6, :name=>'A', :parent_id=>3, :parent_id2=>5), @c.load(:id=>4, :id2=>8, :name=>'B', :parent_id=>nil, :parent_id2=>nil), @c.load(:id=>3, :id2=>5, :name=>'?', :parent_id=>4, :parent_id2=>8)]
315
315
  @o.associations[:parent].must_equal @c.load(:id=>1, :id2=>6, :name=>'A', :parent_id=>3, :parent_id2=>5)
316
316
  @o.associations[:parent].associations[:parent].must_equal @c.load(:id=>3, :id2=>5, :name=>'?', :parent_id=>4, :parent_id2=>8)
317
317
  @o.associations[:parent].associations[:parent].associations[:parent].must_equal @c.load(:id=>4, :id2=>8, :name=>'B', :parent_id=>nil, :parent_id2=>nil)
318
- @o.associations[:parent].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_equal nil
318
+ @o.associations[:parent].associations[:parent].associations[:parent].associations.fetch(:parent, 1).must_be_nil
319
319
  end
320
320
 
321
321
  it "should add all children associations when lazily loading descendants" do
322
322
  @c.plugin :rcte_tree, :key=>[:parent_id, :parent_id2]
323
- @ds._fetch = [[{:id=>3, :id2=>4, :name=>'??', :parent_id=>1, :parent_id2=>2}, {:id=>1, :id2=>2, :name=>'A', :parent_id=>2, :parent_id2=>5}, {:id=>4, :id2=>5, :name=>'B', :parent_id=>2, :parent_id2=>5}, {:id=>5, :id2=>7, :name=>'?', :parent_id=>3, :parent_id2=>4}]]
323
+ @c.dataset = @c.dataset.with_fetch([[{:id=>3, :id2=>4, :name=>'??', :parent_id=>1, :parent_id2=>2}, {:id=>1, :id2=>2, :name=>'A', :parent_id=>2, :parent_id2=>5}, {:id=>4, :id2=>5, :name=>'B', :parent_id=>2, :parent_id2=>5}, {:id=>5, :id2=>7, :name=>'?', :parent_id=>3, :parent_id2=>4}]])
324
324
  @o.descendants.must_equal [@c.load(:id=>3, :id2=>4, :name=>'??', :parent_id=>1, :parent_id2=>2), @c.load(:id=>1, :id2=>2, :name=>'A', :parent_id=>2, :parent_id2=>5), @c.load(:id=>4, :id2=>5, :name=>'B', :parent_id=>2, :parent_id2=>5), @c.load(:id=>5, :id2=>7, :name=>'?', :parent_id=>3, :parent_id2=>4)]
325
325
  @o.associations[:children].must_equal [@c.load(:id=>1, :id2=>2, :name=>'A', :parent_id=>2, :parent_id2=>5), @c.load(:id=>4, :id2=>5, :name=>'B', :parent_id=>2, :parent_id2=>5)]
326
326
  @o.associations[:children].map{|c1| c1.associations[:children]}.must_equal [[@c.load(:id=>3, :id2=>4, :name=>'??', :parent_id=>1, :parent_id2=>2)], []]
@@ -330,10 +330,10 @@ describe Sequel::Model, "rcte_tree with composite keys" do
330
330
 
331
331
  it "should eagerly load ancestors" do
332
332
  @c.plugin :rcte_tree, :key=>[:parent_id, :parent_id2]
333
- @ds._fetch = [[{:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'}, {:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'}, {:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D'}, {:id=>9, :id2=>10, :parent_id=>nil, :parent_id2=>nil, :name=>'E'}],
333
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'}, {:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'}, {:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D'}, {:id=>9, :id2=>10, :parent_id=>nil, :parent_id2=>nil, :name=>'E'}],
334
334
  [{:id=>2, :id2=>3, :name=>'AA', :parent_id=>1, :parent_id2=>2, :x_root_x_0=>2, :x_root_x_1=>3},
335
335
  {:id=>1, :id2=>2, :name=>'00', :parent_id=>8, :parent_id2=>9, :x_root_x_0=>1, :x_root_x_1=>2}, {:id=>1, :id2=>2, :name=>'00', :parent_id=>8, :parent_id2=>9, :x_root_x_0=>2, :x_root_x_1=>3},
336
- {:id=>8, :id2=>9, :name=>'?', :parent_id=>nil, :parent_id2=>nil, :x_root_x_0=>2, :x_root_x_1=>3}, {:id=>8, :id2=>9, :name=>'?', :parent_id=>nil, :parent_id2=>nil, :x_root_x_0=>1, :x_root_x_1=>2}]]
336
+ {:id=>8, :id2=>9, :name=>'?', :parent_id=>nil, :parent_id2=>nil, :x_root_x_0=>2, :x_root_x_1=>3}, {:id=>8, :id2=>9, :name=>'?', :parent_id=>nil, :parent_id2=>nil, :x_root_x_0=>1, :x_root_x_1=>2}]])
337
337
  os = @ds.eager(:ancestors).all
338
338
  sqls = @db.sqls
339
339
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -352,10 +352,10 @@ describe Sequel::Model, "rcte_tree with composite keys" do
352
352
 
353
353
  it "should eagerly load descendants" do
354
354
  @c.plugin :rcte_tree, :key=>[:parent_id, :parent_id2]
355
- @ds._fetch = [[{:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'}, {:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'}, {:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D'}],
355
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'}, {:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'}, {:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D'}],
356
356
  [{:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C', :x_root_x_0=>2, :x_root_x_1=>3}, {:id=>9, :id2=>10, :parent_id=>2, :parent_id2=>3, :name=>'E', :x_root_x_0=>2, :x_root_x_1=>3},
357
357
  {:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7, :x_root_x_0=>6, :x_root_x_1=>7}, {:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7, :x_root_x_0=>2, :x_root_x_1=>3},
358
- {:id=>4, :id2=>5, :name=>'?', :parent_id=>7, :parent_id2=>8, :x_root_x_0=>7, :x_root_x_1=>8}, {:id=>5, :id2=>6, :name=>'?', :parent_id=>4, :parent_id2=>5, :x_root_x_0=>7, :x_root_x_1=>8}]]
358
+ {:id=>4, :id2=>5, :name=>'?', :parent_id=>7, :parent_id2=>8, :x_root_x_0=>7, :x_root_x_1=>8}, {:id=>5, :id2=>6, :name=>'?', :parent_id=>4, :parent_id2=>5, :x_root_x_0=>7, :x_root_x_1=>8}]])
359
359
  os = @ds.eager(:descendants).all
360
360
  sqls = @db.sqls
361
361
  sqls.first.must_equal "SELECT * FROM nodes"
@@ -372,10 +372,10 @@ describe Sequel::Model, "rcte_tree with composite keys" do
372
372
 
373
373
  it "should eagerly load descendants to a given level" do
374
374
  @c.plugin :rcte_tree, :key=>[:parent_id, :parent_id2]
375
- @ds._fetch = [[{:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'}, {:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'}, {:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D'}],
375
+ @ds = @c.dataset = @c.dataset.with_fetch([[{:id=>2, :id2=>3, :parent_id=>1, :parent_id2=>2, :name=>'AA'}, {:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C'}, {:id=>7, :id2=>8, :parent_id=>1, :parent_id2=>2, :name=>'D'}],
376
376
  [{:id=>6, :id2=>7, :parent_id=>2, :parent_id2=>3, :name=>'C', :x_root_x_0=>2, :x_root_x_1=>3, :x_level_x=>0}, {:id=>9, :id2=>10, :parent_id=>2, :parent_id2=>3, :name=>'E', :x_root_x_0=>2, :x_root_x_1=>3, :x_level_x=>0},
377
377
  {:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7, :x_root_x_0=>6, :x_root_x_1=>7, :x_level_x=>0}, {:id=>3, :id2=>4, :name=>'00', :parent_id=>6, :parent_id2=>7, :x_root_x_0=>2, :x_root_x_1=>3, :x_level_x=>1},
378
- {:id=>4, :id2=>5, :name=>'?', :parent_id=>7, :parent_id2=>8, :x_root_x_0=>7, :x_root_x_1=>8, :x_level_x=>0}, {:id=>5, :id2=>6, :name=>'?', :parent_id=>4, :parent_id2=>5, :x_root_x_0=>7, :x_root_x_1=>8, :x_level_x=>1}]]
378
+ {:id=>4, :id2=>5, :name=>'?', :parent_id=>7, :parent_id2=>8, :x_root_x_0=>7, :x_root_x_1=>8, :x_level_x=>0}, {:id=>5, :id2=>6, :name=>'?', :parent_id=>4, :parent_id2=>5, :x_root_x_0=>7, :x_root_x_1=>8, :x_level_x=>1}]])
379
379
  os = @ds.eager(:descendants=>2).all
380
380
  sqls = @db.sqls
381
381
  sqls.first.must_equal "SELECT * FROM nodes"