sequel 4.26.0 → 5.37.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 (692) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG +405 -5656
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +232 -157
  5. data/bin/sequel +32 -9
  6. data/doc/advanced_associations.rdoc +252 -188
  7. data/doc/association_basics.rdoc +231 -273
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +75 -48
  10. data/doc/code_order.rdoc +28 -10
  11. data/doc/core_extensions.rdoc +104 -63
  12. data/doc/dataset_basics.rdoc +12 -21
  13. data/doc/dataset_filtering.rdoc +99 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +74 -31
  16. data/doc/migration.rdoc +72 -46
  17. data/doc/model_dataset_method_design.rdoc +129 -0
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +12 -12
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +59 -69
  22. data/doc/opening_databases.rdoc +84 -94
  23. data/doc/postgresql.rdoc +268 -38
  24. data/doc/prepared_statements.rdoc +29 -24
  25. data/doc/querying.rdoc +184 -164
  26. data/doc/reflection.rdoc +5 -6
  27. data/doc/release_notes/5.0.0.txt +159 -0
  28. data/doc/release_notes/5.1.0.txt +31 -0
  29. data/doc/release_notes/5.10.0.txt +84 -0
  30. data/doc/release_notes/5.11.0.txt +83 -0
  31. data/doc/release_notes/5.12.0.txt +141 -0
  32. data/doc/release_notes/5.13.0.txt +27 -0
  33. data/doc/release_notes/5.14.0.txt +63 -0
  34. data/doc/release_notes/5.15.0.txt +39 -0
  35. data/doc/release_notes/5.16.0.txt +110 -0
  36. data/doc/release_notes/5.17.0.txt +31 -0
  37. data/doc/release_notes/5.18.0.txt +69 -0
  38. data/doc/release_notes/5.19.0.txt +28 -0
  39. data/doc/release_notes/5.2.0.txt +33 -0
  40. data/doc/release_notes/5.20.0.txt +89 -0
  41. data/doc/release_notes/5.21.0.txt +87 -0
  42. data/doc/release_notes/5.22.0.txt +48 -0
  43. data/doc/release_notes/5.23.0.txt +56 -0
  44. data/doc/release_notes/5.24.0.txt +56 -0
  45. data/doc/release_notes/5.25.0.txt +32 -0
  46. data/doc/release_notes/5.26.0.txt +35 -0
  47. data/doc/release_notes/5.27.0.txt +21 -0
  48. data/doc/release_notes/5.28.0.txt +16 -0
  49. data/doc/release_notes/5.29.0.txt +22 -0
  50. data/doc/release_notes/5.3.0.txt +121 -0
  51. data/doc/release_notes/5.30.0.txt +20 -0
  52. data/doc/release_notes/5.31.0.txt +148 -0
  53. data/doc/release_notes/5.32.0.txt +46 -0
  54. data/doc/release_notes/5.33.0.txt +24 -0
  55. data/doc/release_notes/5.34.0.txt +40 -0
  56. data/doc/release_notes/5.35.0.txt +56 -0
  57. data/doc/release_notes/5.36.0.txt +60 -0
  58. data/doc/release_notes/5.37.0.txt +30 -0
  59. data/doc/release_notes/5.4.0.txt +80 -0
  60. data/doc/release_notes/5.5.0.txt +61 -0
  61. data/doc/release_notes/5.6.0.txt +31 -0
  62. data/doc/release_notes/5.7.0.txt +108 -0
  63. data/doc/release_notes/5.8.0.txt +170 -0
  64. data/doc/release_notes/5.9.0.txt +99 -0
  65. data/doc/schema_modification.rdoc +102 -77
  66. data/doc/security.rdoc +160 -87
  67. data/doc/sharding.rdoc +74 -47
  68. data/doc/sql.rdoc +135 -122
  69. data/doc/testing.rdoc +34 -18
  70. data/doc/thread_safety.rdoc +2 -4
  71. data/doc/transactions.rdoc +101 -19
  72. data/doc/validations.rdoc +64 -51
  73. data/doc/virtual_rows.rdoc +90 -109
  74. data/lib/sequel.rb +3 -1
  75. data/lib/sequel/adapters/ado.rb +154 -22
  76. data/lib/sequel/adapters/ado/access.rb +21 -21
  77. data/lib/sequel/adapters/ado/mssql.rb +8 -15
  78. data/lib/sequel/adapters/amalgalite.rb +17 -25
  79. data/lib/sequel/adapters/ibmdb.rb +52 -58
  80. data/lib/sequel/adapters/jdbc.rb +149 -127
  81. data/lib/sequel/adapters/jdbc/db2.rb +32 -40
  82. data/lib/sequel/adapters/jdbc/derby.rb +56 -58
  83. data/lib/sequel/adapters/jdbc/h2.rb +40 -30
  84. data/lib/sequel/adapters/jdbc/hsqldb.rb +22 -33
  85. data/lib/sequel/adapters/jdbc/jtds.rb +4 -10
  86. data/lib/sequel/adapters/jdbc/mssql.rb +6 -12
  87. data/lib/sequel/adapters/jdbc/mysql.rb +17 -18
  88. data/lib/sequel/adapters/jdbc/oracle.rb +25 -19
  89. data/lib/sequel/adapters/jdbc/postgresql.rb +90 -69
  90. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +14 -24
  91. data/lib/sequel/adapters/jdbc/sqlite.rb +50 -12
  92. data/lib/sequel/adapters/jdbc/sqlserver.rb +36 -9
  93. data/lib/sequel/adapters/jdbc/transactions.rb +25 -39
  94. data/lib/sequel/adapters/mock.rb +104 -113
  95. data/lib/sequel/adapters/mysql.rb +42 -61
  96. data/lib/sequel/adapters/mysql2.rb +126 -35
  97. data/lib/sequel/adapters/odbc.rb +21 -28
  98. data/lib/sequel/adapters/odbc/db2.rb +3 -1
  99. data/lib/sequel/adapters/odbc/mssql.rb +11 -15
  100. data/lib/sequel/adapters/odbc/oracle.rb +11 -0
  101. data/lib/sequel/adapters/oracle.rb +62 -68
  102. data/lib/sequel/adapters/postgres.rb +257 -311
  103. data/lib/sequel/adapters/postgresql.rb +3 -1
  104. data/lib/sequel/adapters/shared/access.rb +75 -79
  105. data/lib/sequel/adapters/shared/db2.rb +96 -74
  106. data/lib/sequel/adapters/shared/mssql.rb +258 -213
  107. data/lib/sequel/adapters/shared/mysql.rb +284 -216
  108. data/lib/sequel/adapters/shared/oracle.rb +175 -60
  109. data/lib/sequel/adapters/shared/postgres.rb +829 -383
  110. data/lib/sequel/adapters/shared/sqlanywhere.rb +105 -127
  111. data/lib/sequel/adapters/shared/sqlite.rb +382 -159
  112. data/lib/sequel/adapters/sqlanywhere.rb +53 -38
  113. data/lib/sequel/adapters/sqlite.rb +111 -105
  114. data/lib/sequel/adapters/tinytds.rb +38 -46
  115. data/lib/sequel/adapters/utils/emulate_offset_with_reverse_and_count.rb +8 -9
  116. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +7 -5
  117. data/lib/sequel/adapters/utils/mysql_mysql2.rb +87 -0
  118. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +56 -0
  119. data/lib/sequel/adapters/utils/replace.rb +3 -4
  120. data/lib/sequel/adapters/utils/split_alter_table.rb +2 -0
  121. data/lib/sequel/adapters/utils/stored_procedures.rb +9 -22
  122. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +28 -0
  123. data/lib/sequel/ast_transformer.rb +13 -89
  124. data/lib/sequel/connection_pool.rb +54 -26
  125. data/lib/sequel/connection_pool/sharded_single.rb +19 -12
  126. data/lib/sequel/connection_pool/sharded_threaded.rb +160 -111
  127. data/lib/sequel/connection_pool/single.rb +21 -12
  128. data/lib/sequel/connection_pool/threaded.rb +137 -119
  129. data/lib/sequel/core.rb +352 -320
  130. data/lib/sequel/database.rb +19 -2
  131. data/lib/sequel/database/connecting.rb +70 -55
  132. data/lib/sequel/database/dataset.rb +15 -5
  133. data/lib/sequel/database/dataset_defaults.rb +20 -102
  134. data/lib/sequel/database/features.rb +20 -4
  135. data/lib/sequel/database/logging.rb +25 -7
  136. data/lib/sequel/database/misc.rb +132 -118
  137. data/lib/sequel/database/query.rb +51 -28
  138. data/lib/sequel/database/schema_generator.rb +188 -75
  139. data/lib/sequel/database/schema_methods.rb +161 -92
  140. data/lib/sequel/database/transactions.rb +260 -58
  141. data/lib/sequel/dataset.rb +28 -12
  142. data/lib/sequel/dataset/actions.rb +354 -170
  143. data/lib/sequel/dataset/dataset_module.rb +46 -0
  144. data/lib/sequel/dataset/features.rb +81 -34
  145. data/lib/sequel/dataset/graph.rb +82 -58
  146. data/lib/sequel/dataset/misc.rb +139 -47
  147. data/lib/sequel/dataset/placeholder_literalizer.rb +66 -26
  148. data/lib/sequel/dataset/prepared_statements.rb +188 -85
  149. data/lib/sequel/dataset/query.rb +428 -214
  150. data/lib/sequel/dataset/sql.rb +446 -339
  151. data/lib/sequel/deprecated.rb +14 -2
  152. data/lib/sequel/exceptions.rb +48 -16
  153. data/lib/sequel/extensions/_model_constraint_validations.rb +16 -0
  154. data/lib/sequel/extensions/_model_pg_row.rb +43 -0
  155. data/lib/sequel/extensions/_pretty_table.rb +10 -9
  156. data/lib/sequel/extensions/any_not_empty.rb +45 -0
  157. data/lib/sequel/extensions/arbitrary_servers.rb +15 -11
  158. data/lib/sequel/extensions/auto_literal_strings.rb +74 -0
  159. data/lib/sequel/extensions/blank.rb +2 -0
  160. data/lib/sequel/extensions/caller_logging.rb +79 -0
  161. data/lib/sequel/extensions/columns_introspection.rb +9 -4
  162. data/lib/sequel/extensions/connection_expiration.rb +99 -0
  163. data/lib/sequel/extensions/connection_validator.rb +26 -13
  164. data/lib/sequel/extensions/constant_sql_override.rb +65 -0
  165. data/lib/sequel/extensions/constraint_validations.rb +93 -38
  166. data/lib/sequel/extensions/core_extensions.rb +45 -53
  167. data/lib/sequel/extensions/core_refinements.rb +44 -46
  168. data/lib/sequel/extensions/current_datetime_timestamp.rb +5 -4
  169. data/lib/sequel/extensions/dataset_source_alias.rb +4 -0
  170. data/lib/sequel/extensions/date_arithmetic.rb +42 -16
  171. data/lib/sequel/extensions/datetime_parse_to_time.rb +37 -0
  172. data/lib/sequel/extensions/duplicate_columns_handler.rb +94 -0
  173. data/lib/sequel/extensions/empty_array_consider_nulls.rb +7 -3
  174. data/lib/sequel/extensions/error_sql.rb +7 -3
  175. data/lib/sequel/extensions/escaped_like.rb +100 -0
  176. data/lib/sequel/extensions/eval_inspect.rb +14 -15
  177. data/lib/sequel/extensions/exclude_or_null.rb +68 -0
  178. data/lib/sequel/extensions/fiber_concurrency.rb +24 -0
  179. data/lib/sequel/extensions/freeze_datasets.rb +3 -0
  180. data/lib/sequel/extensions/from_block.rb +2 -31
  181. data/lib/sequel/extensions/graph_each.rb +19 -6
  182. data/lib/sequel/extensions/identifier_mangling.rb +180 -0
  183. data/lib/sequel/extensions/implicit_subquery.rb +48 -0
  184. data/lib/sequel/extensions/index_caching.rb +109 -0
  185. data/lib/sequel/extensions/inflector.rb +8 -4
  186. data/lib/sequel/extensions/integer64.rb +32 -0
  187. data/lib/sequel/extensions/looser_typecasting.rb +19 -9
  188. data/lib/sequel/extensions/migration.rb +132 -80
  189. data/lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb +4 -0
  190. data/lib/sequel/extensions/named_timezones.rb +88 -23
  191. data/lib/sequel/extensions/no_auto_literal_strings.rb +4 -0
  192. data/lib/sequel/extensions/null_dataset.rb +12 -8
  193. data/lib/sequel/extensions/pagination.rb +35 -28
  194. data/lib/sequel/extensions/pg_array.rb +227 -316
  195. data/lib/sequel/extensions/pg_array_ops.rb +19 -7
  196. data/lib/sequel/extensions/pg_enum.rb +69 -24
  197. data/lib/sequel/extensions/pg_extended_date_support.rb +250 -0
  198. data/lib/sequel/extensions/pg_hstore.rb +50 -59
  199. data/lib/sequel/extensions/pg_hstore_ops.rb +9 -3
  200. data/lib/sequel/extensions/pg_inet.rb +34 -15
  201. data/lib/sequel/extensions/pg_inet_ops.rb +5 -1
  202. data/lib/sequel/extensions/pg_interval.rb +26 -26
  203. data/lib/sequel/extensions/pg_json.rb +422 -141
  204. data/lib/sequel/extensions/pg_json_ops.rb +248 -9
  205. data/lib/sequel/extensions/pg_loose_count.rb +5 -1
  206. data/lib/sequel/extensions/pg_range.rb +162 -146
  207. data/lib/sequel/extensions/pg_range_ops.rb +10 -5
  208. data/lib/sequel/extensions/pg_row.rb +53 -87
  209. data/lib/sequel/extensions/pg_row_ops.rb +36 -13
  210. data/lib/sequel/extensions/pg_static_cache_updater.rb +6 -2
  211. data/lib/sequel/extensions/pg_timestamptz.rb +28 -0
  212. data/lib/sequel/extensions/pretty_table.rb +4 -0
  213. data/lib/sequel/extensions/query.rb +12 -7
  214. data/lib/sequel/extensions/round_timestamps.rb +6 -9
  215. data/lib/sequel/extensions/run_transaction_hooks.rb +72 -0
  216. data/lib/sequel/extensions/s.rb +59 -0
  217. data/lib/sequel/extensions/schema_caching.rb +14 -1
  218. data/lib/sequel/extensions/schema_dumper.rb +83 -55
  219. data/lib/sequel/extensions/select_remove.rb +8 -4
  220. data/lib/sequel/extensions/sequel_4_dataset_methods.rb +85 -0
  221. data/lib/sequel/extensions/server_block.rb +50 -17
  222. data/lib/sequel/extensions/server_logging.rb +61 -0
  223. data/lib/sequel/extensions/split_array_nil.rb +8 -4
  224. data/lib/sequel/extensions/sql_comments.rb +96 -0
  225. data/lib/sequel/extensions/sql_expr.rb +4 -1
  226. data/lib/sequel/extensions/string_agg.rb +181 -0
  227. data/lib/sequel/extensions/string_date_time.rb +2 -0
  228. data/lib/sequel/extensions/symbol_aref.rb +53 -0
  229. data/lib/sequel/extensions/symbol_aref_refinement.rb +43 -0
  230. data/lib/sequel/extensions/symbol_as.rb +23 -0
  231. data/lib/sequel/extensions/symbol_as_refinement.rb +37 -0
  232. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  233. data/lib/sequel/extensions/thread_local_timezones.rb +4 -0
  234. data/lib/sequel/extensions/to_dot.rb +15 -5
  235. data/lib/sequel/extensions/virtual_row_method_block.rb +44 -0
  236. data/lib/sequel/model.rb +36 -126
  237. data/lib/sequel/model/associations.rb +850 -257
  238. data/lib/sequel/model/base.rb +652 -764
  239. data/lib/sequel/model/dataset_module.rb +13 -10
  240. data/lib/sequel/model/default_inflections.rb +3 -1
  241. data/lib/sequel/model/errors.rb +3 -3
  242. data/lib/sequel/model/exceptions.rb +12 -12
  243. data/lib/sequel/model/inflections.rb +8 -19
  244. data/lib/sequel/model/plugins.rb +111 -0
  245. data/lib/sequel/plugins/accessed_columns.rb +2 -0
  246. data/lib/sequel/plugins/active_model.rb +32 -7
  247. data/lib/sequel/plugins/after_initialize.rb +3 -1
  248. data/lib/sequel/plugins/association_dependencies.rb +27 -18
  249. data/lib/sequel/plugins/association_lazy_eager_option.rb +66 -0
  250. data/lib/sequel/plugins/association_multi_add_remove.rb +85 -0
  251. data/lib/sequel/plugins/association_pks.rb +181 -83
  252. data/lib/sequel/plugins/association_proxies.rb +33 -9
  253. data/lib/sequel/plugins/auto_validations.rb +58 -23
  254. data/lib/sequel/plugins/before_after_save.rb +8 -0
  255. data/lib/sequel/plugins/blacklist_security.rb +23 -12
  256. data/lib/sequel/plugins/boolean_readers.rb +9 -6
  257. data/lib/sequel/plugins/boolean_subsets.rb +64 -0
  258. data/lib/sequel/plugins/caching.rb +27 -16
  259. data/lib/sequel/plugins/class_table_inheritance.rb +192 -94
  260. data/lib/sequel/plugins/column_conflicts.rb +18 -3
  261. data/lib/sequel/plugins/column_select.rb +9 -5
  262. data/lib/sequel/plugins/columns_updated.rb +42 -0
  263. data/lib/sequel/plugins/composition.rb +36 -24
  264. data/lib/sequel/plugins/constraint_validations.rb +37 -16
  265. data/lib/sequel/plugins/csv_serializer.rb +58 -35
  266. data/lib/sequel/plugins/dataset_associations.rb +60 -18
  267. data/lib/sequel/plugins/def_dataset_method.rb +90 -0
  268. data/lib/sequel/plugins/defaults_setter.rb +74 -13
  269. data/lib/sequel/plugins/delay_add_association.rb +4 -1
  270. data/lib/sequel/plugins/dirty.rb +65 -24
  271. data/lib/sequel/plugins/eager_each.rb +27 -3
  272. data/lib/sequel/plugins/eager_graph_eager.rb +139 -0
  273. data/lib/sequel/plugins/empty_failure_backtraces.rb +38 -0
  274. data/lib/sequel/plugins/error_splitter.rb +19 -12
  275. data/lib/sequel/plugins/finder.rb +246 -0
  276. data/lib/sequel/plugins/forbid_lazy_load.rb +216 -0
  277. data/lib/sequel/plugins/force_encoding.rb +9 -12
  278. data/lib/sequel/plugins/hook_class_methods.rb +39 -54
  279. data/lib/sequel/plugins/input_transformer.rb +20 -10
  280. data/lib/sequel/plugins/insert_conflict.rb +72 -0
  281. data/lib/sequel/plugins/insert_returning_select.rb +4 -2
  282. data/lib/sequel/plugins/instance_filters.rb +12 -8
  283. data/lib/sequel/plugins/instance_hooks.rb +36 -17
  284. data/lib/sequel/plugins/instance_specific_default.rb +113 -0
  285. data/lib/sequel/plugins/inverted_subsets.rb +24 -13
  286. data/lib/sequel/plugins/json_serializer.rb +123 -47
  287. data/lib/sequel/plugins/lazy_attributes.rb +20 -14
  288. data/lib/sequel/plugins/list.rb +40 -26
  289. data/lib/sequel/plugins/many_through_many.rb +28 -12
  290. data/lib/sequel/plugins/modification_detection.rb +17 -5
  291. data/lib/sequel/plugins/mssql_optimistic_locking.rb +8 -5
  292. data/lib/sequel/plugins/nested_attributes.rb +55 -28
  293. data/lib/sequel/plugins/optimistic_locking.rb +5 -3
  294. data/lib/sequel/plugins/pg_array_associations.rb +52 -18
  295. data/lib/sequel/plugins/pg_auto_constraint_validations.rb +348 -0
  296. data/lib/sequel/plugins/pg_row.rb +7 -51
  297. data/lib/sequel/plugins/prepared_statements.rb +53 -72
  298. data/lib/sequel/plugins/prepared_statements_safe.rb +13 -5
  299. data/lib/sequel/plugins/rcte_tree.rb +43 -63
  300. data/lib/sequel/plugins/serialization.rb +37 -44
  301. data/lib/sequel/plugins/serialization_modification_detection.rb +3 -1
  302. data/lib/sequel/plugins/sharding.rb +17 -10
  303. data/lib/sequel/plugins/single_table_inheritance.rb +62 -28
  304. data/lib/sequel/plugins/singular_table_names.rb +2 -0
  305. data/lib/sequel/plugins/skip_create_refresh.rb +5 -3
  306. data/lib/sequel/plugins/skip_saving_columns.rb +108 -0
  307. data/lib/sequel/plugins/split_values.rb +13 -6
  308. data/lib/sequel/plugins/static_cache.rb +79 -53
  309. data/lib/sequel/plugins/static_cache_cache.rb +53 -0
  310. data/lib/sequel/plugins/string_stripper.rb +5 -3
  311. data/lib/sequel/plugins/subclasses.rb +20 -2
  312. data/lib/sequel/plugins/subset_conditions.rb +48 -0
  313. data/lib/sequel/plugins/table_select.rb +4 -2
  314. data/lib/sequel/plugins/tactical_eager_loading.rb +120 -6
  315. data/lib/sequel/plugins/throw_failures.rb +110 -0
  316. data/lib/sequel/plugins/timestamps.rb +22 -8
  317. data/lib/sequel/plugins/touch.rb +21 -8
  318. data/lib/sequel/plugins/tree.rb +57 -30
  319. data/lib/sequel/plugins/typecast_on_load.rb +14 -4
  320. data/lib/sequel/plugins/unlimited_update.rb +3 -7
  321. data/lib/sequel/plugins/update_or_create.rb +6 -4
  322. data/lib/sequel/plugins/update_primary_key.rb +3 -1
  323. data/lib/sequel/plugins/update_refresh.rb +28 -15
  324. data/lib/sequel/plugins/uuid.rb +70 -0
  325. data/lib/sequel/plugins/validate_associated.rb +20 -0
  326. data/lib/sequel/plugins/validation_class_methods.rb +40 -19
  327. data/lib/sequel/plugins/validation_contexts.rb +49 -0
  328. data/lib/sequel/plugins/validation_helpers.rb +49 -31
  329. data/lib/sequel/plugins/whitelist_security.rb +122 -0
  330. data/lib/sequel/plugins/xml_serializer.rb +31 -30
  331. data/lib/sequel/sql.rb +479 -329
  332. data/lib/sequel/timezones.rb +62 -32
  333. data/lib/sequel/version.rb +10 -3
  334. metadata +177 -477
  335. data/Rakefile +0 -165
  336. data/doc/active_record.rdoc +0 -912
  337. data/doc/release_notes/1.0.txt +0 -38
  338. data/doc/release_notes/1.1.txt +0 -143
  339. data/doc/release_notes/1.3.txt +0 -101
  340. data/doc/release_notes/1.4.0.txt +0 -53
  341. data/doc/release_notes/1.5.0.txt +0 -155
  342. data/doc/release_notes/2.0.0.txt +0 -298
  343. data/doc/release_notes/2.1.0.txt +0 -271
  344. data/doc/release_notes/2.10.0.txt +0 -328
  345. data/doc/release_notes/2.11.0.txt +0 -215
  346. data/doc/release_notes/2.12.0.txt +0 -534
  347. data/doc/release_notes/2.2.0.txt +0 -253
  348. data/doc/release_notes/2.3.0.txt +0 -88
  349. data/doc/release_notes/2.4.0.txt +0 -106
  350. data/doc/release_notes/2.5.0.txt +0 -137
  351. data/doc/release_notes/2.6.0.txt +0 -157
  352. data/doc/release_notes/2.7.0.txt +0 -166
  353. data/doc/release_notes/2.8.0.txt +0 -171
  354. data/doc/release_notes/2.9.0.txt +0 -97
  355. data/doc/release_notes/3.0.0.txt +0 -221
  356. data/doc/release_notes/3.1.0.txt +0 -406
  357. data/doc/release_notes/3.10.0.txt +0 -286
  358. data/doc/release_notes/3.11.0.txt +0 -254
  359. data/doc/release_notes/3.12.0.txt +0 -304
  360. data/doc/release_notes/3.13.0.txt +0 -210
  361. data/doc/release_notes/3.14.0.txt +0 -118
  362. data/doc/release_notes/3.15.0.txt +0 -78
  363. data/doc/release_notes/3.16.0.txt +0 -45
  364. data/doc/release_notes/3.17.0.txt +0 -58
  365. data/doc/release_notes/3.18.0.txt +0 -120
  366. data/doc/release_notes/3.19.0.txt +0 -67
  367. data/doc/release_notes/3.2.0.txt +0 -268
  368. data/doc/release_notes/3.20.0.txt +0 -41
  369. data/doc/release_notes/3.21.0.txt +0 -87
  370. data/doc/release_notes/3.22.0.txt +0 -39
  371. data/doc/release_notes/3.23.0.txt +0 -172
  372. data/doc/release_notes/3.24.0.txt +0 -420
  373. data/doc/release_notes/3.25.0.txt +0 -88
  374. data/doc/release_notes/3.26.0.txt +0 -88
  375. data/doc/release_notes/3.27.0.txt +0 -82
  376. data/doc/release_notes/3.28.0.txt +0 -304
  377. data/doc/release_notes/3.29.0.txt +0 -459
  378. data/doc/release_notes/3.3.0.txt +0 -192
  379. data/doc/release_notes/3.30.0.txt +0 -135
  380. data/doc/release_notes/3.31.0.txt +0 -146
  381. data/doc/release_notes/3.32.0.txt +0 -202
  382. data/doc/release_notes/3.33.0.txt +0 -157
  383. data/doc/release_notes/3.34.0.txt +0 -671
  384. data/doc/release_notes/3.35.0.txt +0 -144
  385. data/doc/release_notes/3.36.0.txt +0 -245
  386. data/doc/release_notes/3.37.0.txt +0 -338
  387. data/doc/release_notes/3.38.0.txt +0 -234
  388. data/doc/release_notes/3.39.0.txt +0 -237
  389. data/doc/release_notes/3.4.0.txt +0 -325
  390. data/doc/release_notes/3.40.0.txt +0 -73
  391. data/doc/release_notes/3.41.0.txt +0 -155
  392. data/doc/release_notes/3.42.0.txt +0 -74
  393. data/doc/release_notes/3.43.0.txt +0 -105
  394. data/doc/release_notes/3.44.0.txt +0 -152
  395. data/doc/release_notes/3.45.0.txt +0 -179
  396. data/doc/release_notes/3.46.0.txt +0 -122
  397. data/doc/release_notes/3.47.0.txt +0 -270
  398. data/doc/release_notes/3.48.0.txt +0 -477
  399. data/doc/release_notes/3.5.0.txt +0 -510
  400. data/doc/release_notes/3.6.0.txt +0 -366
  401. data/doc/release_notes/3.7.0.txt +0 -179
  402. data/doc/release_notes/3.8.0.txt +0 -151
  403. data/doc/release_notes/3.9.0.txt +0 -233
  404. data/doc/release_notes/4.0.0.txt +0 -262
  405. data/doc/release_notes/4.1.0.txt +0 -85
  406. data/doc/release_notes/4.10.0.txt +0 -226
  407. data/doc/release_notes/4.11.0.txt +0 -147
  408. data/doc/release_notes/4.12.0.txt +0 -105
  409. data/doc/release_notes/4.13.0.txt +0 -169
  410. data/doc/release_notes/4.14.0.txt +0 -68
  411. data/doc/release_notes/4.15.0.txt +0 -56
  412. data/doc/release_notes/4.16.0.txt +0 -36
  413. data/doc/release_notes/4.17.0.txt +0 -38
  414. data/doc/release_notes/4.18.0.txt +0 -36
  415. data/doc/release_notes/4.19.0.txt +0 -45
  416. data/doc/release_notes/4.2.0.txt +0 -129
  417. data/doc/release_notes/4.20.0.txt +0 -79
  418. data/doc/release_notes/4.21.0.txt +0 -94
  419. data/doc/release_notes/4.22.0.txt +0 -72
  420. data/doc/release_notes/4.23.0.txt +0 -65
  421. data/doc/release_notes/4.24.0.txt +0 -99
  422. data/doc/release_notes/4.25.0.txt +0 -181
  423. data/doc/release_notes/4.26.0.txt +0 -44
  424. data/doc/release_notes/4.3.0.txt +0 -40
  425. data/doc/release_notes/4.4.0.txt +0 -92
  426. data/doc/release_notes/4.5.0.txt +0 -34
  427. data/doc/release_notes/4.6.0.txt +0 -30
  428. data/doc/release_notes/4.7.0.txt +0 -103
  429. data/doc/release_notes/4.8.0.txt +0 -175
  430. data/doc/release_notes/4.9.0.txt +0 -190
  431. data/lib/sequel/adapters/cubrid.rb +0 -142
  432. data/lib/sequel/adapters/do.rb +0 -156
  433. data/lib/sequel/adapters/do/mysql.rb +0 -64
  434. data/lib/sequel/adapters/do/postgres.rb +0 -42
  435. data/lib/sequel/adapters/do/sqlite3.rb +0 -40
  436. data/lib/sequel/adapters/jdbc/as400.rb +0 -82
  437. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -62
  438. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -34
  439. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -31
  440. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -31
  441. data/lib/sequel/adapters/odbc/progress.rb +0 -8
  442. data/lib/sequel/adapters/shared/cubrid.rb +0 -243
  443. data/lib/sequel/adapters/shared/firebird.rb +0 -245
  444. data/lib/sequel/adapters/shared/informix.rb +0 -52
  445. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +0 -150
  446. data/lib/sequel/adapters/shared/progress.rb +0 -38
  447. data/lib/sequel/adapters/swift.rb +0 -158
  448. data/lib/sequel/adapters/swift/mysql.rb +0 -47
  449. data/lib/sequel/adapters/swift/postgres.rb +0 -45
  450. data/lib/sequel/adapters/swift/sqlite.rb +0 -47
  451. data/lib/sequel/adapters/utils/pg_types.rb +0 -68
  452. data/lib/sequel/dataset/mutation.rb +0 -109
  453. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -3
  454. data/lib/sequel/extensions/filter_having.rb +0 -59
  455. data/lib/sequel/extensions/hash_aliases.rb +0 -45
  456. data/lib/sequel/extensions/meta_def.rb +0 -31
  457. data/lib/sequel/extensions/query_literals.rb +0 -80
  458. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -22
  459. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -118
  460. data/lib/sequel/extensions/set_overrides.rb +0 -72
  461. data/lib/sequel/no_core_ext.rb +0 -1
  462. data/lib/sequel/plugins/association_autoreloading.rb +0 -7
  463. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -7
  464. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -78
  465. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -117
  466. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -59
  467. data/lib/sequel/plugins/schema.rb +0 -80
  468. data/lib/sequel/plugins/scissors.rb +0 -33
  469. data/spec/adapters/db2_spec.rb +0 -160
  470. data/spec/adapters/firebird_spec.rb +0 -411
  471. data/spec/adapters/informix_spec.rb +0 -100
  472. data/spec/adapters/mssql_spec.rb +0 -706
  473. data/spec/adapters/mysql_spec.rb +0 -1287
  474. data/spec/adapters/oracle_spec.rb +0 -313
  475. data/spec/adapters/postgres_spec.rb +0 -3725
  476. data/spec/adapters/spec_helper.rb +0 -43
  477. data/spec/adapters/sqlanywhere_spec.rb +0 -170
  478. data/spec/adapters/sqlite_spec.rb +0 -653
  479. data/spec/bin_spec.rb +0 -254
  480. data/spec/core/connection_pool_spec.rb +0 -1016
  481. data/spec/core/database_spec.rb +0 -2531
  482. data/spec/core/dataset_spec.rb +0 -5098
  483. data/spec/core/deprecated_spec.rb +0 -70
  484. data/spec/core/expression_filters_spec.rb +0 -1243
  485. data/spec/core/mock_adapter_spec.rb +0 -462
  486. data/spec/core/object_graph_spec.rb +0 -303
  487. data/spec/core/placeholder_literalizer_spec.rb +0 -163
  488. data/spec/core/schema_generator_spec.rb +0 -179
  489. data/spec/core/schema_spec.rb +0 -1659
  490. data/spec/core/spec_helper.rb +0 -34
  491. data/spec/core/version_spec.rb +0 -7
  492. data/spec/core_extensions_spec.rb +0 -699
  493. data/spec/extensions/accessed_columns_spec.rb +0 -51
  494. data/spec/extensions/active_model_spec.rb +0 -123
  495. data/spec/extensions/after_initialize_spec.rb +0 -24
  496. data/spec/extensions/arbitrary_servers_spec.rb +0 -109
  497. data/spec/extensions/association_dependencies_spec.rb +0 -117
  498. data/spec/extensions/association_pks_spec.rb +0 -365
  499. data/spec/extensions/association_proxies_spec.rb +0 -86
  500. data/spec/extensions/auto_validations_spec.rb +0 -192
  501. data/spec/extensions/blacklist_security_spec.rb +0 -88
  502. data/spec/extensions/blank_spec.rb +0 -69
  503. data/spec/extensions/boolean_readers_spec.rb +0 -93
  504. data/spec/extensions/caching_spec.rb +0 -270
  505. data/spec/extensions/class_table_inheritance_spec.rb +0 -420
  506. data/spec/extensions/column_conflicts_spec.rb +0 -60
  507. data/spec/extensions/column_select_spec.rb +0 -108
  508. data/spec/extensions/columns_introspection_spec.rb +0 -91
  509. data/spec/extensions/composition_spec.rb +0 -242
  510. data/spec/extensions/connection_validator_spec.rb +0 -120
  511. data/spec/extensions/constraint_validations_plugin_spec.rb +0 -274
  512. data/spec/extensions/constraint_validations_spec.rb +0 -325
  513. data/spec/extensions/core_refinements_spec.rb +0 -519
  514. data/spec/extensions/csv_serializer_spec.rb +0 -173
  515. data/spec/extensions/current_datetime_timestamp_spec.rb +0 -27
  516. data/spec/extensions/dataset_associations_spec.rb +0 -311
  517. data/spec/extensions/dataset_source_alias_spec.rb +0 -51
  518. data/spec/extensions/date_arithmetic_spec.rb +0 -150
  519. data/spec/extensions/defaults_setter_spec.rb +0 -101
  520. data/spec/extensions/delay_add_association_spec.rb +0 -52
  521. data/spec/extensions/dirty_spec.rb +0 -180
  522. data/spec/extensions/eager_each_spec.rb +0 -42
  523. data/spec/extensions/empty_array_consider_nulls_spec.rb +0 -24
  524. data/spec/extensions/error_splitter_spec.rb +0 -18
  525. data/spec/extensions/error_sql_spec.rb +0 -20
  526. data/spec/extensions/eval_inspect_spec.rb +0 -73
  527. data/spec/extensions/filter_having_spec.rb +0 -40
  528. data/spec/extensions/force_encoding_spec.rb +0 -114
  529. data/spec/extensions/from_block_spec.rb +0 -21
  530. data/spec/extensions/graph_each_spec.rb +0 -109
  531. data/spec/extensions/hash_aliases_spec.rb +0 -24
  532. data/spec/extensions/hook_class_methods_spec.rb +0 -429
  533. data/spec/extensions/inflector_spec.rb +0 -183
  534. data/spec/extensions/input_transformer_spec.rb +0 -54
  535. data/spec/extensions/insert_returning_select_spec.rb +0 -46
  536. data/spec/extensions/instance_filters_spec.rb +0 -79
  537. data/spec/extensions/instance_hooks_spec.rb +0 -276
  538. data/spec/extensions/inverted_subsets_spec.rb +0 -33
  539. data/spec/extensions/json_serializer_spec.rb +0 -291
  540. data/spec/extensions/lazy_attributes_spec.rb +0 -170
  541. data/spec/extensions/list_spec.rb +0 -267
  542. data/spec/extensions/looser_typecasting_spec.rb +0 -43
  543. data/spec/extensions/many_through_many_spec.rb +0 -2172
  544. data/spec/extensions/meta_def_spec.rb +0 -21
  545. data/spec/extensions/migration_spec.rb +0 -712
  546. data/spec/extensions/modification_detection_spec.rb +0 -80
  547. data/spec/extensions/mssql_optimistic_locking_spec.rb +0 -91
  548. data/spec/extensions/named_timezones_spec.rb +0 -108
  549. data/spec/extensions/nested_attributes_spec.rb +0 -697
  550. data/spec/extensions/null_dataset_spec.rb +0 -85
  551. data/spec/extensions/optimistic_locking_spec.rb +0 -128
  552. data/spec/extensions/pagination_spec.rb +0 -118
  553. data/spec/extensions/pg_array_associations_spec.rb +0 -736
  554. data/spec/extensions/pg_array_ops_spec.rb +0 -143
  555. data/spec/extensions/pg_array_spec.rb +0 -395
  556. data/spec/extensions/pg_enum_spec.rb +0 -92
  557. data/spec/extensions/pg_hstore_ops_spec.rb +0 -236
  558. data/spec/extensions/pg_hstore_spec.rb +0 -206
  559. data/spec/extensions/pg_inet_ops_spec.rb +0 -101
  560. data/spec/extensions/pg_inet_spec.rb +0 -52
  561. data/spec/extensions/pg_interval_spec.rb +0 -76
  562. data/spec/extensions/pg_json_ops_spec.rb +0 -229
  563. data/spec/extensions/pg_json_spec.rb +0 -218
  564. data/spec/extensions/pg_loose_count_spec.rb +0 -17
  565. data/spec/extensions/pg_range_ops_spec.rb +0 -58
  566. data/spec/extensions/pg_range_spec.rb +0 -404
  567. data/spec/extensions/pg_row_ops_spec.rb +0 -60
  568. data/spec/extensions/pg_row_plugin_spec.rb +0 -62
  569. data/spec/extensions/pg_row_spec.rb +0 -360
  570. data/spec/extensions/pg_static_cache_updater_spec.rb +0 -92
  571. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -63
  572. data/spec/extensions/prepared_statements_associations_spec.rb +0 -159
  573. data/spec/extensions/prepared_statements_safe_spec.rb +0 -61
  574. data/spec/extensions/prepared_statements_spec.rb +0 -103
  575. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -31
  576. data/spec/extensions/pretty_table_spec.rb +0 -92
  577. data/spec/extensions/query_literals_spec.rb +0 -183
  578. data/spec/extensions/query_spec.rb +0 -102
  579. data/spec/extensions/rcte_tree_spec.rb +0 -392
  580. data/spec/extensions/round_timestamps_spec.rb +0 -43
  581. data/spec/extensions/schema_caching_spec.rb +0 -41
  582. data/spec/extensions/schema_dumper_spec.rb +0 -789
  583. data/spec/extensions/schema_spec.rb +0 -117
  584. data/spec/extensions/scissors_spec.rb +0 -26
  585. data/spec/extensions/select_remove_spec.rb +0 -38
  586. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -101
  587. data/spec/extensions/serialization_modification_detection_spec.rb +0 -98
  588. data/spec/extensions/serialization_spec.rb +0 -362
  589. data/spec/extensions/server_block_spec.rb +0 -90
  590. data/spec/extensions/set_overrides_spec.rb +0 -61
  591. data/spec/extensions/sharding_spec.rb +0 -198
  592. data/spec/extensions/shared_caching_spec.rb +0 -175
  593. data/spec/extensions/single_table_inheritance_spec.rb +0 -297
  594. data/spec/extensions/singular_table_names_spec.rb +0 -22
  595. data/spec/extensions/skip_create_refresh_spec.rb +0 -17
  596. data/spec/extensions/spec_helper.rb +0 -71
  597. data/spec/extensions/split_array_nil_spec.rb +0 -24
  598. data/spec/extensions/split_values_spec.rb +0 -22
  599. data/spec/extensions/sql_expr_spec.rb +0 -60
  600. data/spec/extensions/static_cache_spec.rb +0 -361
  601. data/spec/extensions/string_date_time_spec.rb +0 -95
  602. data/spec/extensions/string_stripper_spec.rb +0 -68
  603. data/spec/extensions/subclasses_spec.rb +0 -66
  604. data/spec/extensions/table_select_spec.rb +0 -71
  605. data/spec/extensions/tactical_eager_loading_spec.rb +0 -82
  606. data/spec/extensions/thread_local_timezones_spec.rb +0 -67
  607. data/spec/extensions/timestamps_spec.rb +0 -175
  608. data/spec/extensions/to_dot_spec.rb +0 -154
  609. data/spec/extensions/touch_spec.rb +0 -203
  610. data/spec/extensions/tree_spec.rb +0 -274
  611. data/spec/extensions/typecast_on_load_spec.rb +0 -80
  612. data/spec/extensions/unlimited_update_spec.rb +0 -20
  613. data/spec/extensions/update_or_create_spec.rb +0 -87
  614. data/spec/extensions/update_primary_key_spec.rb +0 -100
  615. data/spec/extensions/update_refresh_spec.rb +0 -53
  616. data/spec/extensions/validate_associated_spec.rb +0 -52
  617. data/spec/extensions/validation_class_methods_spec.rb +0 -1027
  618. data/spec/extensions/validation_helpers_spec.rb +0 -541
  619. data/spec/extensions/xml_serializer_spec.rb +0 -207
  620. data/spec/files/bad_down_migration/001_create_alt_basic.rb +0 -4
  621. data/spec/files/bad_down_migration/002_create_alt_advanced.rb +0 -4
  622. data/spec/files/bad_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  623. data/spec/files/bad_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  624. data/spec/files/bad_timestamped_migrations/1273253853_3_create_users.rb +0 -3
  625. data/spec/files/bad_up_migration/001_create_alt_basic.rb +0 -4
  626. data/spec/files/bad_up_migration/002_create_alt_advanced.rb +0 -3
  627. data/spec/files/convert_to_timestamp_migrations/001_create_sessions.rb +0 -9
  628. data/spec/files/convert_to_timestamp_migrations/002_create_nodes.rb +0 -9
  629. data/spec/files/convert_to_timestamp_migrations/003_3_create_users.rb +0 -4
  630. data/spec/files/convert_to_timestamp_migrations/1273253850_create_artists.rb +0 -9
  631. data/spec/files/convert_to_timestamp_migrations/1273253852_create_albums.rb +0 -9
  632. data/spec/files/duplicate_integer_migrations/001_create_alt_advanced.rb +0 -4
  633. data/spec/files/duplicate_integer_migrations/001_create_alt_basic.rb +0 -4
  634. data/spec/files/duplicate_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  635. data/spec/files/duplicate_timestamped_migrations/1273253853_create_nodes.rb +0 -9
  636. data/spec/files/duplicate_timestamped_migrations/1273253853_create_users.rb +0 -4
  637. data/spec/files/integer_migrations/001_create_sessions.rb +0 -9
  638. data/spec/files/integer_migrations/002_create_nodes.rb +0 -9
  639. data/spec/files/integer_migrations/003_3_create_users.rb +0 -4
  640. data/spec/files/interleaved_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  641. data/spec/files/interleaved_timestamped_migrations/1273253850_create_artists.rb +0 -9
  642. data/spec/files/interleaved_timestamped_migrations/1273253851_create_nodes.rb +0 -9
  643. data/spec/files/interleaved_timestamped_migrations/1273253852_create_albums.rb +0 -9
  644. data/spec/files/interleaved_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  645. data/spec/files/missing_integer_migrations/001_create_alt_basic.rb +0 -4
  646. data/spec/files/missing_integer_migrations/003_create_alt_advanced.rb +0 -4
  647. data/spec/files/missing_timestamped_migrations/1273253849_create_sessions.rb +0 -9
  648. data/spec/files/missing_timestamped_migrations/1273253853_3_create_users.rb +0 -4
  649. data/spec/files/reversible_migrations/001_reversible.rb +0 -5
  650. data/spec/files/reversible_migrations/002_reversible.rb +0 -5
  651. data/spec/files/reversible_migrations/003_reversible.rb +0 -5
  652. data/spec/files/reversible_migrations/004_reversible.rb +0 -5
  653. data/spec/files/reversible_migrations/005_reversible.rb +0 -10
  654. data/spec/files/timestamped_migrations/1273253849_create_sessions.rb +0 -9
  655. data/spec/files/timestamped_migrations/1273253851_create_nodes.rb +0 -9
  656. data/spec/files/timestamped_migrations/1273253853_3_create_users.rb +0 -4
  657. data/spec/files/transaction_specified_migrations/001_create_alt_basic.rb +0 -4
  658. data/spec/files/transaction_specified_migrations/002_create_basic.rb +0 -4
  659. data/spec/files/transaction_unspecified_migrations/001_create_alt_basic.rb +0 -3
  660. data/spec/files/transaction_unspecified_migrations/002_create_basic.rb +0 -3
  661. data/spec/files/uppercase_timestamped_migrations/1273253849_CREATE_SESSIONS.RB +0 -9
  662. data/spec/files/uppercase_timestamped_migrations/1273253851_CREATE_NODES.RB +0 -9
  663. data/spec/files/uppercase_timestamped_migrations/1273253853_3_CREATE_USERS.RB +0 -4
  664. data/spec/guards_helper.rb +0 -55
  665. data/spec/integration/associations_test.rb +0 -2454
  666. data/spec/integration/database_test.rb +0 -113
  667. data/spec/integration/dataset_test.rb +0 -1808
  668. data/spec/integration/eager_loader_test.rb +0 -687
  669. data/spec/integration/migrator_test.rb +0 -240
  670. data/spec/integration/model_test.rb +0 -226
  671. data/spec/integration/plugin_test.rb +0 -2240
  672. data/spec/integration/prepared_statement_test.rb +0 -467
  673. data/spec/integration/schema_test.rb +0 -817
  674. data/spec/integration/spec_helper.rb +0 -48
  675. data/spec/integration/timezone_test.rb +0 -86
  676. data/spec/integration/transaction_test.rb +0 -374
  677. data/spec/integration/type_test.rb +0 -133
  678. data/spec/model/association_reflection_spec.rb +0 -525
  679. data/spec/model/associations_spec.rb +0 -4426
  680. data/spec/model/base_spec.rb +0 -759
  681. data/spec/model/class_dataset_methods_spec.rb +0 -146
  682. data/spec/model/dataset_methods_spec.rb +0 -149
  683. data/spec/model/eager_loading_spec.rb +0 -2137
  684. data/spec/model/hooks_spec.rb +0 -604
  685. data/spec/model/inflector_spec.rb +0 -26
  686. data/spec/model/model_spec.rb +0 -982
  687. data/spec/model/plugins_spec.rb +0 -299
  688. data/spec/model/record_spec.rb +0 -2147
  689. data/spec/model/spec_helper.rb +0 -46
  690. data/spec/model/validations_spec.rb +0 -193
  691. data/spec/sequel_coverage.rb +0 -15
  692. data/spec/spec_config.rb +0 -10
@@ -1,133 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
2
-
3
- describe "Supported types" do
4
- def create_items_table_with_column(name, type, opts={})
5
- DB.create_table!(:items){column name, type, opts}
6
- DB[:items]
7
- end
8
-
9
- after(:all) do
10
- DB.drop_table?(:items)
11
- end
12
-
13
- it "should support casting correctly" do
14
- ds = create_items_table_with_column(:number, Integer)
15
- ds.insert(:number => 1)
16
- ds.select(Sequel.cast(:number, String).as(:n)).map(:n).must_equal %w'1'
17
- ds = create_items_table_with_column(:name, String)
18
- ds.insert(:name=> '1')
19
- ds.select(Sequel.cast(:name, Integer).as(:n)).map(:n).must_equal [1]
20
- end
21
-
22
- it "should support NULL correctly" do
23
- ds = create_items_table_with_column(:number, Integer)
24
- ds.insert(:number => nil)
25
- ds.all.must_equal [{:number=>nil}]
26
- end
27
-
28
- it "should support generic integer type" do
29
- ds = create_items_table_with_column(:number, Integer)
30
- ds.insert(:number => 2)
31
- ds.all.must_equal [{:number=>2}]
32
- end
33
-
34
- it "should support generic fixnum type" do
35
- ds = create_items_table_with_column(:number, Fixnum)
36
- ds.insert(:number => 2)
37
- ds.all.must_equal [{:number=>2}]
38
- end
39
-
40
- it "should support generic bignum type" do
41
- ds = create_items_table_with_column(:number, Bignum)
42
- ds.insert(:number => 2**34)
43
- ds.all.must_equal [{:number=>2**34}]
44
- end
45
-
46
- cspecify "should support generic float type", [:swift, :sqlite] do
47
- ds = create_items_table_with_column(:number, Float)
48
- ds.insert(:number => 2.1)
49
- ds.all.must_equal [{:number=>2.1}]
50
- end
51
-
52
- cspecify "should support generic numeric type", [:odbc, :mssql], [:swift, :sqlite] do
53
- ds = create_items_table_with_column(:number, Numeric, :size=>[15, 10])
54
- ds.insert(:number => BigDecimal.new('2.123456789'))
55
- ds.all.must_equal [{:number=>BigDecimal.new('2.123456789')}]
56
- ds = create_items_table_with_column(:number, BigDecimal, :size=>[15, 10])
57
- ds.insert(:number => BigDecimal.new('2.123456789'))
58
- ds.all.must_equal [{:number=>BigDecimal.new('2.123456789')}]
59
- end
60
-
61
- it "should support generic string type" do
62
- ds = create_items_table_with_column(:name, String)
63
- ds.insert(:name => 'Test User')
64
- ds.all.must_equal [{:name=>'Test User'}]
65
- end
66
-
67
- it "should support generic text type" do
68
- ds = create_items_table_with_column(:name, String, :text=>true)
69
- ds.insert(:name => 'Test User'*100)
70
- ds.all.must_equal [{:name=>'Test User'*100}]
71
-
72
- ds.update(:name=>ds.get(:name))
73
- ds.all.must_equal [{:name=>'Test User'*100}]
74
- end
75
-
76
- cspecify "should support generic date type", [:do, :sqlite], [:jdbc, :sqlite], [:tinytds], [:jdbc, :mssql], :oracle do
77
- ds = create_items_table_with_column(:dat, Date)
78
- d = Date.today
79
- ds.insert(:dat => d)
80
- ds.first[:dat].must_be_kind_of(Date)
81
- ds.first[:dat].to_s.must_equal d.to_s
82
- end
83
-
84
- cspecify "should support generic time type", [:do], [:swift], [:odbc], [:jdbc, :mssql], [:jdbc, :sqlite], [:mysql2], [:tinytds], :oracle do
85
- ds = create_items_table_with_column(:tim, Time, :only_time=>true)
86
- t = Sequel::SQLTime.now
87
- ds.insert(:tim => t)
88
- v = ds.first[:tim]
89
- ds.literal(v).must_equal ds.literal(t)
90
- v.must_be_kind_of(Sequel::SQLTime)
91
- ds.delete
92
- ds.insert(:tim => v)
93
- v2 = ds.first[:tim]
94
- ds.literal(v2).must_equal ds.literal(t)
95
- v2.must_be_kind_of(Sequel::SQLTime)
96
- end
97
-
98
- cspecify "should support generic datetime type", [:do, :sqlite], [:jdbc, :sqlite] do
99
- ds = create_items_table_with_column(:tim, DateTime)
100
- t = DateTime.now
101
- ds.insert(:tim => t)
102
- ds.first[:tim].strftime('%Y%m%d%H%M%S').must_equal t.strftime('%Y%m%d%H%M%S')
103
- ds = create_items_table_with_column(:tim, Time)
104
- t = Time.now
105
- ds.insert(:tim => t)
106
- ds.first[:tim].strftime('%Y%m%d%H%M%S').must_equal t.strftime('%Y%m%d%H%M%S')
107
- end
108
-
109
- cspecify "should support generic file type", [:do], [:odbc, :mssql], [:mysql2], [:tinytds] do
110
- ds = create_items_table_with_column(:name, File)
111
- ds.insert(:name =>Sequel.blob("a\0"*300))
112
- ds.all.must_equal [{:name=>Sequel.blob("a\0"*300)}]
113
- ds.first[:name].must_be_kind_of(::Sequel::SQL::Blob)
114
- end
115
-
116
- cspecify "should support generic boolean type", [:do, :sqlite], [:jdbc, :sqlite], [:jdbc, :db2], :oracle do
117
- ds = create_items_table_with_column(:number, TrueClass)
118
- ds.insert(:number => true)
119
- ds.all.must_equal [{:number=>true}]
120
- ds = create_items_table_with_column(:number, FalseClass)
121
- ds.insert(:number => true)
122
- ds.all.must_equal [{:number=>true}]
123
- end
124
-
125
- cspecify "should support generic boolean type with defaults", [:do, :sqlite], [:jdbc, :sqlite], [:jdbc, :db2], :oracle do
126
- ds = create_items_table_with_column(:number, TrueClass, :default=>true)
127
- ds.insert
128
- ds.all.must_equal [{:number=>true}]
129
- ds = create_items_table_with_column(:number, FalseClass, :default=>false)
130
- ds.insert
131
- ds.all.must_equal [{:number=>false}]
132
- end
133
- end
@@ -1,525 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
2
-
3
- describe Sequel::Model::Associations::AssociationReflection, "#associated_class" do
4
- before do
5
- @c = Class.new(Sequel::Model(:foo))
6
- class ::ParParent < Sequel::Model; end
7
- end
8
- after do
9
- Object.send(:remove_const, :ParParent)
10
- end
11
-
12
- it "should use the :class value if present" do
13
- @c.many_to_one :c, :class=>ParParent
14
- @c.association_reflection(:c).keys.must_include(:class)
15
- @c.association_reflection(:c).associated_class.must_equal ParParent
16
- end
17
-
18
- it "should figure out the class if the :class value is not present" do
19
- @c.many_to_one :c, :class=>'ParParent'
20
- @c.association_reflection(:c).keys.wont_include(:class)
21
- @c.association_reflection(:c).associated_class.must_equal ParParent
22
- end
23
- end
24
-
25
- describe Sequel::Model::Associations::AssociationReflection, "#primary_key" do
26
- before do
27
- @c = Class.new(Sequel::Model(:foo))
28
- class ::ParParent < Sequel::Model; end
29
- end
30
- after do
31
- Object.send(:remove_const, :ParParent)
32
- end
33
-
34
- it "should use the :primary_key value if present" do
35
- @c.many_to_one :c, :class=>ParParent, :primary_key=>:blah__blah
36
- @c.association_reflection(:c).keys.must_include(:primary_key)
37
- @c.association_reflection(:c).primary_key.must_equal :blah__blah
38
- end
39
-
40
- it "should use the associated table's primary key if :primary_key is not present" do
41
- @c.many_to_one :c, :class=>'ParParent'
42
- @c.association_reflection(:c).keys.wont_include(:primary_key)
43
- @c.association_reflection(:c).primary_key.must_equal :id
44
- end
45
- end
46
-
47
- describe Sequel::Model::Associations::AssociationReflection, "#reciprocal_type" do
48
- it "should include a specific type if only one matches" do
49
- c = Class.new(Sequel::Model(:a))
50
- c.one_to_many :cs, :class=>c, :key=>:c_id
51
- c.many_to_one :c, :class=>c, :key=>:c_id
52
- c.association_reflection(:c).send(:reciprocal_type).must_equal :one_to_many
53
- end
54
- end
55
-
56
- describe Sequel::Model::Associations::AssociationReflection, "#reciprocal" do
57
- before do
58
- class ::ParParent < Sequel::Model; end
59
- class ::ParParentTwo < Sequel::Model; end
60
- class ::ParParentThree < Sequel::Model; end
61
- end
62
- after do
63
- Object.send(:remove_const, :ParParent)
64
- Object.send(:remove_const, :ParParentTwo)
65
- Object.send(:remove_const, :ParParentThree)
66
- end
67
-
68
- it "should use the :reciprocal value if present" do
69
- @c = Class.new(Sequel::Model(:foo))
70
- @d = Class.new(Sequel::Model(:foo))
71
- @c.many_to_one :c, :class=>@d, :reciprocal=>:xx
72
- @c.association_reflection(:c).keys.must_include(:reciprocal)
73
- @c.association_reflection(:c).reciprocal.must_equal :xx
74
- end
75
-
76
- it "should not raise an error if some reciprocal associations have invalid associated classes" do
77
- @c = Class.new(Sequel::Model(:foo))
78
- @c.one_to_many :sadfakloasdfioas
79
- @c.many_to_one :c, :class=>@c
80
- @c.association_reflection(:c).reciprocal
81
- end
82
-
83
- it "should require the associated class is the current class to be a reciprocal" do
84
- ParParent.many_to_one :par_parent_two, :key=>:blah
85
- ParParent.many_to_one :par_parent_three, :key=>:blah
86
- ParParentTwo.one_to_many :par_parents, :key=>:blah
87
- ParParentThree.one_to_many :par_parents, :key=>:blah
88
-
89
- ParParentTwo.association_reflection(:par_parents).reciprocal.must_equal :par_parent_two
90
- ParParentThree.association_reflection(:par_parents).reciprocal.must_equal :par_parent_three
91
-
92
- ParParent.many_to_many :par_parent_twos, :left_key=>:l, :right_key=>:r, :join_table=>:jt
93
- ParParent.many_to_many :par_parent_threes, :left_key=>:l, :right_key=>:r, :join_table=>:jt
94
- ParParentTwo.many_to_many :par_parents, :right_key=>:l, :left_key=>:r, :join_table=>:jt
95
- ParParentThree.many_to_many :par_parents, :right_key=>:l, :left_key=>:r, :join_table=>:jt
96
-
97
- ParParentTwo.association_reflection(:par_parents).reciprocal.must_equal :par_parent_twos
98
- ParParentThree.association_reflection(:par_parents).reciprocal.must_equal :par_parent_threes
99
- end
100
-
101
- it "should handle composite keys" do
102
- ParParent.many_to_one :par_parent_two, :key=>[:a, :b], :primary_key=>[:c, :b]
103
- ParParent.many_to_one :par_parent_three, :key=>[:d, :e], :primary_key=>[:c, :b]
104
- ParParentTwo.one_to_many :par_parents, :primary_key=>[:c, :b], :key=>[:a, :b]
105
- ParParentThree.one_to_many :par_parents, :primary_key=>[:c, :b], :key=>[:d, :e]
106
-
107
- ParParentTwo.association_reflection(:par_parents).reciprocal.must_equal :par_parent_two
108
- ParParentThree.association_reflection(:par_parents).reciprocal.must_equal :par_parent_three
109
-
110
- ParParent.many_to_many :par_parent_twos, :left_key=>[:l1, :l2], :right_key=>[:r1, :r2], :left_primary_key=>[:pl1, :pl2], :right_primary_key=>[:pr1, :pr2], :join_table=>:jt
111
- ParParent.many_to_many :par_parent_threes, :right_key=>[:l1, :l2], :left_key=>[:r1, :r2], :left_primary_key=>[:pl1, :pl2], :right_primary_key=>[:pr1, :pr2], :join_table=>:jt
112
- ParParentTwo.many_to_many :par_parents, :right_key=>[:l1, :l2], :left_key=>[:r1, :r2], :right_primary_key=>[:pl1, :pl2], :left_primary_key=>[:pr1, :pr2], :join_table=>:jt
113
- ParParentThree.many_to_many :par_parents, :left_key=>[:l1, :l2], :right_key=>[:r1, :r2], :right_primary_key=>[:pl1, :pl2], :left_primary_key=>[:pr1, :pr2], :join_table=>:jt
114
-
115
- ParParentTwo.association_reflection(:par_parents).reciprocal.must_equal :par_parent_twos
116
- ParParentThree.association_reflection(:par_parents).reciprocal.must_equal :par_parent_threes
117
- end
118
-
119
- it "should figure out the reciprocal if the :reciprocal value is not present" do
120
- ParParent.many_to_one :par_parent_two
121
- ParParentTwo.one_to_many :par_parents
122
- ParParent.many_to_many :par_parent_threes
123
- ParParentThree.many_to_many :par_parents
124
-
125
- ParParent.association_reflection(:par_parent_two).keys.wont_include(:reciprocal)
126
- ParParent.association_reflection(:par_parent_two).reciprocal.must_equal :par_parents
127
- ParParentTwo.association_reflection(:par_parents).keys.wont_include(:reciprocal)
128
- ParParentTwo.association_reflection(:par_parents).reciprocal.must_equal :par_parent_two
129
- ParParent.association_reflection(:par_parent_threes).keys.wont_include(:reciprocal)
130
- ParParent.association_reflection(:par_parent_threes).reciprocal.must_equal :par_parents
131
- ParParentThree.association_reflection(:par_parents).keys.wont_include(:reciprocal)
132
- ParParentThree.association_reflection(:par_parents).reciprocal.must_equal :par_parent_threes
133
- end
134
-
135
- it "should handle ambiguous reciprocals where only one doesn't have conditions/blocks" do
136
- ParParent.many_to_one :par_parent_two, :class=>ParParentTwo, :key=>:par_parent_two_id
137
- ParParent.many_to_one :par_parent_two2, :clone=>:par_parent_two, :conditions=>{:id=>:id}
138
- ParParentTwo.one_to_many :par_parents
139
- ParParent.many_to_many :par_parent_threes, :class=>ParParentThree, :right_key=>:par_parent_three_id
140
- ParParent.many_to_many :par_parent_threes2, :clone=>:par_parent_threes do |ds|
141
- ds
142
- end
143
- ParParentThree.many_to_many :par_parents
144
-
145
- ParParentTwo.association_reflection(:par_parents).reciprocal.must_equal :par_parent_two
146
- ParParentThree.association_reflection(:par_parents).reciprocal.must_equal :par_parent_threes
147
- end
148
-
149
- it "should handle ambiguous reciprocals where only one has matching primary keys" do
150
- ParParent.many_to_one :par_parent_two, :class=>ParParentTwo, :key=>:par_parent_two_id
151
- ParParent.many_to_one :par_parent_two2, :clone=>:par_parent_two, :primary_key=>:foo
152
- ParParentTwo.one_to_many :par_parents, :class=>ParParent, :key=>:par_parent_two_id
153
- ParParentTwo.one_to_many :par_parents2, :clone=>:par_parents, :primary_key=>:foo
154
- ParParent.many_to_many :par_parent_threes, :class=>ParParentThree, :right_key=>:par_parent_three_id
155
- ParParent.many_to_many :par_parent_threes2, :clone=>:par_parent_threes, :right_primary_key=>:foo
156
- ParParent.many_to_many :par_parent_threes3, :clone=>:par_parent_threes, :left_primary_key=>:foo
157
- ParParentThree.many_to_many :par_parents
158
-
159
- ParParent.association_reflection(:par_parent_two).reciprocal.must_equal :par_parents
160
- ParParent.association_reflection(:par_parent_two2).reciprocal.must_equal :par_parents2
161
- ParParentTwo.association_reflection(:par_parents).reciprocal.must_equal :par_parent_two
162
- ParParentTwo.association_reflection(:par_parents2).reciprocal.must_equal :par_parent_two2
163
- ParParentThree.association_reflection(:par_parents).reciprocal.must_equal :par_parent_threes
164
- end
165
-
166
- it "should handle reciprocals where current association has conditions/block" do
167
- ParParent.many_to_one :par_parent_two, :conditions=>{:id=>:id}
168
- ParParentTwo.one_to_many :par_parents
169
- ParParent.many_to_many :par_parent_threes do |ds|
170
- ds
171
- end
172
- ParParentThree.many_to_many :par_parents
173
-
174
- ParParent.association_reflection(:par_parent_two).reciprocal.must_equal :par_parents
175
- ParParent.association_reflection(:par_parent_threes).reciprocal.must_equal :par_parents
176
- end
177
- end
178
-
179
- describe Sequel::Model::Associations::AssociationReflection, "#select" do
180
- before do
181
- @c = Class.new(Sequel::Model(:foo))
182
- class ::ParParent < Sequel::Model; end
183
- end
184
- after do
185
- Object.send(:remove_const, :ParParent)
186
- end
187
-
188
- it "should use the :select value if present" do
189
- @c.many_to_one :c, :class=>ParParent, :select=>[:par_parents__id]
190
- @c.association_reflection(:c).keys.must_include(:select)
191
- @c.association_reflection(:c).select.must_equal [:par_parents__id]
192
- end
193
- it "should be the associated_table.* if :select is not present for a many_to_many associaiton" do
194
- @c.many_to_many :cs, :class=>'ParParent'
195
- @c.association_reflection(:cs).keys.wont_include(:select)
196
- @c.association_reflection(:cs).select.must_equal Sequel::SQL::ColumnAll.new(:par_parents)
197
- end
198
- it "should be blank if :select is not present for a many_to_one and one_to_many associaiton" do
199
- @c.one_to_many :cs, :class=>'ParParent'
200
- @c.association_reflection(:cs).keys.wont_include(:select)
201
- @c.association_reflection(:cs).select.must_equal nil
202
- @c.many_to_one :c, :class=>'ParParent'
203
- @c.association_reflection(:c).keys.wont_include(:select)
204
- @c.association_reflection(:c).select.must_equal nil
205
- end
206
- end
207
-
208
- describe Sequel::Model::Associations::AssociationReflection, "#can_have_associated_objects?" do
209
- it "should be true for any given object (for backward compatibility)" do
210
- Sequel::Model::Associations::AssociationReflection.new.can_have_associated_objects?(Object.new).must_equal true
211
- end
212
- end
213
-
214
- describe Sequel::Model::Associations::AssociationReflection, "#associated_object_keys" do
215
- before do
216
- @c = Class.new(Sequel::Model(:foo))
217
- class ::ParParent < Sequel::Model; end
218
- end
219
- after do
220
- Object.send(:remove_const, :ParParent)
221
- end
222
-
223
- it "should use the primary keys for a many_to_one association" do
224
- @c.many_to_one :c, :class=>ParParent
225
- @c.association_reflection(:c).associated_object_keys.must_equal [:id]
226
- @c.many_to_one :c, :class=>ParParent, :primary_key=>:d_id
227
- @c.association_reflection(:c).associated_object_keys.must_equal [:d_id]
228
- @c.many_to_one :c, :class=>ParParent, :key=>[:c_id1, :c_id2], :primary_key=>[:id1, :id2]
229
- @c.association_reflection(:c).associated_object_keys.must_equal [:id1, :id2]
230
- end
231
- it "should use the keys for a one_to_many association" do
232
- ParParent.one_to_many :cs, :class=>ParParent
233
- ParParent.association_reflection(:cs).associated_object_keys.must_equal [:par_parent_id]
234
- @c.one_to_many :cs, :class=>ParParent, :key=>:d_id
235
- @c.association_reflection(:cs).associated_object_keys.must_equal [:d_id]
236
- @c.one_to_many :cs, :class=>ParParent, :key=>[:c_id1, :c_id2], :primary_key=>[:id1, :id2]
237
- @c.association_reflection(:cs).associated_object_keys.must_equal [:c_id1, :c_id2]
238
- end
239
- it "should use the right primary keys for a many_to_many association" do
240
- @c.many_to_many :cs, :class=>ParParent
241
- @c.association_reflection(:cs).associated_object_keys.must_equal [:id]
242
- @c.many_to_many :cs, :class=>ParParent, :right_primary_key=>:d_id
243
- @c.association_reflection(:cs).associated_object_keys.must_equal [:d_id]
244
- @c.many_to_many :cs, :class=>ParParent, :right_key=>[:c_id1, :c_id2], :right_primary_key=>[:id1, :id2]
245
- @c.association_reflection(:cs).associated_object_keys.must_equal [:id1, :id2]
246
- end
247
- end
248
-
249
- describe Sequel::Model::Associations::AssociationReflection do
250
- before do
251
- @c = Class.new(Sequel::Model(:foo))
252
- def @c.name() "C" end
253
- end
254
-
255
- it "#eager_loading_predicate_key should be an alias of predicate_key for backwards compatibility" do
256
- @c.one_to_many :cs, :class=>@c
257
- @c.dataset.literal(@c.association_reflection(:cs).eager_loading_predicate_key).must_equal 'foo.c_id'
258
- end
259
-
260
- it "one_to_many #qualified_primary_key should be a qualified version of the primary key" do
261
- @c.one_to_many :cs, :class=>@c
262
- @c.dataset.literal(@c.association_reflection(:cs).qualified_primary_key).must_equal 'foo.id'
263
- end
264
-
265
- it "many_to_many #associated_key_column should be the left key" do
266
- @c.many_to_many :cs, :class=>@c
267
- @c.association_reflection(:cs).associated_key_column.must_equal :c_id
268
- end
269
-
270
- it "many_to_many #qualified_right_key should be a qualified version of the primary key" do
271
- @c.many_to_many :cs, :class=>@c, :right_key=>:c2_id
272
- @c.dataset.literal(@c.association_reflection(:cs).qualified_right_key).must_equal 'cs_cs.c2_id'
273
- end
274
-
275
- it "many_to_many #qualified_right_primary_key should be a qualified version of the primary key" do
276
- @c.many_to_many :cs, :class=>@c
277
- @c.dataset.literal(@c.association_reflection(:cs).qualified_right_primary_key).must_equal 'foo.id'
278
- end
279
- end
280
-
281
- describe Sequel::Model::Associations::AssociationReflection, "#remove_before_destroy?" do
282
- before do
283
- @c = Class.new(Sequel::Model(:foo))
284
- end
285
-
286
- it "should be true for many_to_one and many_to_many associations" do
287
- @c.many_to_one :c, :class=>@c
288
- @c.association_reflection(:c).remove_before_destroy?.must_equal true
289
- @c.many_to_many :cs, :class=>@c
290
- @c.association_reflection(:cs).remove_before_destroy?.must_equal true
291
- end
292
-
293
- it "should be false for one_to_one and one_to_many associations" do
294
- @c.one_to_one :c, :class=>@c
295
- @c.association_reflection(:c).remove_before_destroy?.must_equal false
296
- @c.one_to_many :cs, :class=>@c
297
- @c.association_reflection(:cs).remove_before_destroy?.must_equal false
298
- end
299
- end
300
-
301
- describe Sequel::Model::Associations::AssociationReflection, "#filter_by_associations_limit_strategy" do
302
- before do
303
- @db = Sequel.mock
304
- @c = Class.new(Sequel::Model(@db[:a]))
305
- end
306
- after do
307
- Sequel::Model.default_eager_limit_strategy = true
308
- end
309
-
310
- it "should be nil by default for *_one associations" do
311
- @c.many_to_one :c, :class=>@c
312
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal nil
313
- @c.one_to_one :c, :class=>@c
314
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal nil
315
- @c.one_through_one :c, :class=>@c
316
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal nil
317
- end
318
-
319
- it "should be :correlated_subquery by default for one_to_many and one_to_one with :order associations" do
320
- @c.one_to_one :c, :class=>@c, :order=>:a
321
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal :correlated_subquery
322
- @c.one_to_many :cs, :class=>@c, :limit=>1
323
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :correlated_subquery
324
- end
325
-
326
- it "should be :ruby by default for many_to_many and one_through_one with :order associations" do
327
- @c.one_through_one :c, :class=>@c, :order=>:a
328
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal :ruby
329
- @c.many_to_many :cs, :class=>@c, :limit=>1
330
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :ruby
331
- end
332
-
333
- it "should be nil for many_to_one associations even if :eager_limit_strategy or :filter_limit_strategy is used" do
334
- @c.many_to_one :c, :class=>@c, :eager_limit_strategy=>true
335
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal nil
336
- @c.many_to_one :c, :class=>@c, :eager_limit_strategy=>:distinct_on
337
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal nil
338
- @c.many_to_one :c, :class=>@c, :filter_limit_strategy=>true
339
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal nil
340
- end
341
-
342
- it "should be a symbol for other associations if given a symbol" do
343
- @c.one_to_one :c, :class=>@c, :eager_limit_strategy=>:distinct_on
344
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal :distinct_on
345
- @c.one_to_many :cs, :class=>@c, :eager_limit_strategy=>:window_function, :limit=>1
346
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :window_function
347
- end
348
-
349
- it "should use :distinct_on for one_to_one associations if picking and the association dataset supports ordered distinct on" do
350
- def (@c.dataset).supports_ordered_distinct_on?() true end
351
- @c.one_to_one :c, :class=>@c, :eager_limit_strategy=>true
352
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal :distinct_on
353
- end
354
-
355
- it "should use :window_function for associations if picking and the association dataset supports window functions" do
356
- def (@c.dataset).supports_window_functions?() true end
357
- @c.one_to_one :c, :class=>@c, :eager_limit_strategy=>true
358
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal :window_function
359
- @c.one_to_many :cs, :class=>@c, :eager_limit_strategy=>true, :limit=>1
360
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :window_function
361
- @c.many_to_many :cs, :class=>@c, :eager_limit_strategy=>true, :limit=>1
362
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :window_function
363
- end
364
-
365
- it "should use :ruby for one_to_many associations if the database doesn't support limits in subqueries" do
366
- def (@c.dataset).supports_limits_in_correlated_subqueries?; false; end
367
- @c.one_to_many :cs, :class=>@c, :eager_limit_strategy=>true, :limit=>1
368
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :ruby
369
- end
370
-
371
- it "should use :ruby for one_to_many associations if offset doesn't work in correlated subqueries and an offset is used" do
372
- def (@c.dataset).supports_offsets_in_correlated_subqueries?; false; end
373
- @c.one_to_many :cs, :class=>@c, :eager_limit_strategy=>true, :limit=>1
374
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :correlated_subquery
375
- @c.one_to_many :cs, :class=>@c, :eager_limit_strategy=>true, :limit=>[1, 1]
376
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :ruby
377
- end
378
-
379
- it "should use :ruby for one_to_many associations if composite primary key is used and database does not multiple columns in IN" do
380
- def (@c.dataset).supports_multiple_column_in?; false; end
381
- @c.set_primary_key [:id, :id2]
382
- @c.one_to_many :cs, :class=>@c, :eager_limit_strategy=>true, :limit=>1, :key=>[:id, :id2]
383
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :ruby
384
- end
385
-
386
- it "should use :ruby for many_to_many associations if picking and the association dataset doesn't window functions" do
387
- @c.many_to_many :cs, :class=>@c, :eager_limit_strategy=>true, :limit=>1
388
- @c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :ruby
389
- end
390
-
391
- it "should respect Model.default_eager_limit_strategy to *_many associations" do
392
- Sequel::Model.default_eager_limit_strategy = :window_function
393
- Sequel::Model.default_eager_limit_strategy.must_equal :window_function
394
- c = Class.new(Sequel::Model)
395
- c.dataset = :a
396
- c.default_eager_limit_strategy.must_equal :window_function
397
- c.one_to_many :cs, :class=>c, :limit=>1
398
- c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :window_function
399
- c.many_to_many :cs, :class=>c, :limit=>1
400
- c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :window_function
401
-
402
- Sequel::Model.default_eager_limit_strategy = true
403
- c = Class.new(Sequel::Model)
404
- c.dataset = :a
405
- c.one_to_many :cs, :class=>c, :limit=>1
406
- c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :correlated_subquery
407
- def (c.dataset).supports_window_functions?() true end
408
- c.many_to_many :cs, :class=>c, :limit=>1
409
- c.association_reflection(:cs).send(:filter_by_associations_limit_strategy).must_equal :window_function
410
- end
411
-
412
- it "should ignore Model.default_eager_limit_strategy for one_to_one associations" do
413
- @c.default_eager_limit_strategy = :window_function
414
- @c.one_to_one :c, :class=>@c
415
- @c.association_reflection(:c).send(:filter_by_associations_limit_strategy).must_equal nil
416
- end
417
- end
418
-
419
- describe Sequel::Model::Associations::AssociationReflection, "#apply_eager_dataset_changes" do
420
- it "should apply the eager block as well as the association options to the dataset" do
421
- @c = Class.new(Sequel::Model(:foo))
422
- @c.one_to_many :cs, :class=>@c, :select=>:a, :order=>:b do |ds| ds.where(:c) end
423
- @c.association_reflection(:cs).apply_eager_dataset_changes(@c.dataset).sql.must_equal 'SELECT a FROM foo WHERE c ORDER BY b'
424
- end
425
- end
426
-
427
- describe Sequel::Model, " association reflection methods" do
428
- before do
429
- @c1 = Class.new(Sequel::Model(:nodes)) do
430
- def self.name; 'Node'; end
431
- def self.to_s; 'Node'; end
432
- end
433
- DB.reset
434
- end
435
-
436
- it "#all_association_reflections should include all association reflection hashes" do
437
- @c1.all_association_reflections.must_equal []
438
-
439
- @c1.associate :many_to_one, :parent, :class => @c1
440
- @c1.all_association_reflections.collect{|v| v[:name]}.must_equal [:parent]
441
- @c1.all_association_reflections.collect{|v| v[:type]}.must_equal [:many_to_one]
442
- @c1.all_association_reflections.collect{|v| v[:class]}.must_equal [@c1]
443
-
444
- @c1.associate :one_to_many, :children, :class => @c1
445
- @c1.all_association_reflections.sort_by{|x|x[:name].to_s}
446
- @c1.all_association_reflections.sort_by{|x|x[:name].to_s}.collect{|v| v[:name]}.must_equal [:children, :parent]
447
- @c1.all_association_reflections.sort_by{|x|x[:name].to_s}.collect{|v| v[:type]}.must_equal [:one_to_many, :many_to_one]
448
- @c1.all_association_reflections.sort_by{|x|x[:name].to_s}.collect{|v| v[:class]}.must_equal [@c1, @c1]
449
- end
450
-
451
- it "#association_reflection should return nil for nonexistent association" do
452
- @c1.association_reflection(:blah).must_equal nil
453
- end
454
-
455
- it "#association_reflection should return association reflection hash if association exists" do
456
- @c1.associate :many_to_one, :parent, :class => @c1
457
- @c1.association_reflection(:parent).must_be_kind_of(Sequel::Model::Associations::AssociationReflection)
458
- @c1.association_reflection(:parent)[:name].must_equal :parent
459
- @c1.association_reflection(:parent)[:type].must_equal :many_to_one
460
- @c1.association_reflection(:parent)[:class].must_equal @c1
461
-
462
- @c1.associate :one_to_many, :children, :class => @c1
463
- @c1.association_reflection(:children).must_be_kind_of(Sequel::Model::Associations::AssociationReflection)
464
- @c1.association_reflection(:children)[:name].must_equal :children
465
- @c1.association_reflection(:children)[:type].must_equal :one_to_many
466
- @c1.association_reflection(:children)[:class].must_equal @c1
467
- end
468
-
469
- it "#associations should include all association names" do
470
- @c1.associations.must_equal []
471
- @c1.associate :many_to_one, :parent, :class => @c1
472
- @c1.associations.must_equal [:parent]
473
- @c1.associate :one_to_many, :children, :class => @c1
474
- @c1.associations.sort_by{|x|x.to_s}.must_equal [:children, :parent]
475
- end
476
-
477
- it "association reflections should be copied upon subclasing" do
478
- @c1.associate :many_to_one, :parent, :class => @c1
479
- c = Class.new(@c1)
480
- @c1.associations.must_equal [:parent]
481
- c.associations.must_equal [:parent]
482
- c.associate :many_to_one, :parent2, :class => @c1
483
- @c1.associations.must_equal [:parent]
484
- c.associations.sort_by{|x| x.to_s}.must_equal [:parent, :parent2]
485
- c.instance_methods.map{|x| x.to_s}.must_include('parent')
486
- end
487
- end
488
-
489
- describe Sequel::Model::Associations::AssociationReflection, "with caching disabled" do
490
- before do
491
- @db = Sequel.mock
492
- @c = Class.new(Sequel::Model)
493
- @c.dataset = @db[:foo]
494
- @c.cache_associations = false
495
- end
496
-
497
- it "should not cache metadata" do
498
- begin
499
- class ::ParParent < Sequel::Model; end
500
- c = ParParent
501
- @c.many_to_one :c, :class=>:ParParent
502
- @c.association_reflection(:c).associated_class.must_equal c
503
- Object.send(:remove_const, :ParParent)
504
- class ::ParParent < Sequel::Model; end
505
- c = ParParent
506
- @c.association_reflection(:c).associated_class.must_equal c
507
- ensure
508
- Object.send(:remove_const, :ParParent)
509
- end
510
- end
511
-
512
- it "should not used cached schema" do
513
- def @db.supports_schema_parsing?; true end
514
- def @db.schema(table, opts={})
515
- [[opts[:reload] ? :reload : :id, {}]]
516
- end
517
- @c.dataset = @db[:items]
518
- @c.columns.must_equal [:reload]
519
-
520
- @c.cache_associations = true
521
- @c.dataset = @db[:items]
522
- @c.columns.must_equal [:id]
523
- end
524
- end
525
-