sequel 4.49.0 → 5.3.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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +130 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +6 -9
  6. data/doc/advanced_associations.rdoc +91 -168
  7. data/doc/association_basics.rdoc +197 -274
  8. data/doc/bin_sequel.rdoc +5 -3
  9. data/doc/cheat_sheet.rdoc +66 -43
  10. data/doc/code_order.rdoc +1 -8
  11. data/doc/core_extensions.rdoc +81 -56
  12. data/doc/dataset_basics.rdoc +8 -17
  13. data/doc/dataset_filtering.rdoc +81 -86
  14. data/doc/extensions.rdoc +3 -10
  15. data/doc/mass_assignment.rdoc +73 -30
  16. data/doc/migration.rdoc +19 -36
  17. data/doc/model_dataset_method_design.rdoc +14 -17
  18. data/doc/model_hooks.rdoc +15 -25
  19. data/doc/model_plugins.rdoc +10 -10
  20. data/doc/mssql_stored_procedures.rdoc +3 -3
  21. data/doc/object_model.rdoc +52 -70
  22. data/doc/opening_databases.rdoc +39 -32
  23. data/doc/postgresql.rdoc +48 -38
  24. data/doc/prepared_statements.rdoc +27 -22
  25. data/doc/querying.rdoc +173 -150
  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.2.0.txt +33 -0
  30. data/doc/release_notes/5.3.0.txt +121 -0
  31. data/doc/schema_modification.rdoc +78 -64
  32. data/doc/security.rdoc +97 -88
  33. data/doc/sharding.rdoc +43 -30
  34. data/doc/sql.rdoc +53 -65
  35. data/doc/testing.rdoc +4 -5
  36. data/doc/thread_safety.rdoc +2 -4
  37. data/doc/transactions.rdoc +18 -17
  38. data/doc/validations.rdoc +48 -45
  39. data/doc/virtual_rows.rdoc +87 -115
  40. data/lib/sequel/adapters/ado/access.rb +7 -13
  41. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  42. data/lib/sequel/adapters/ado.rb +9 -25
  43. data/lib/sequel/adapters/amalgalite.rb +3 -18
  44. data/lib/sequel/adapters/ibmdb.rb +9 -45
  45. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  46. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  47. data/lib/sequel/adapters/jdbc/h2.rb +6 -26
  48. data/lib/sequel/adapters/jdbc/hsqldb.rb +2 -27
  49. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  50. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  51. data/lib/sequel/adapters/jdbc/mysql.rb +11 -15
  52. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  53. data/lib/sequel/adapters/jdbc/postgresql.rb +23 -33
  54. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  55. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  56. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  57. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  58. data/lib/sequel/adapters/jdbc.rb +18 -74
  59. data/lib/sequel/adapters/mock.rb +4 -30
  60. data/lib/sequel/adapters/mysql.rb +7 -44
  61. data/lib/sequel/adapters/mysql2.rb +5 -23
  62. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  63. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  64. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  65. data/lib/sequel/adapters/odbc.rb +0 -19
  66. data/lib/sequel/adapters/oracle.rb +8 -13
  67. data/lib/sequel/adapters/postgres.rb +28 -150
  68. data/lib/sequel/adapters/postgresql.rb +1 -1
  69. data/lib/sequel/adapters/shared/access.rb +11 -51
  70. data/lib/sequel/adapters/shared/db2.rb +3 -61
  71. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  72. data/lib/sequel/adapters/shared/mysql.rb +61 -227
  73. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  74. data/lib/sequel/adapters/shared/postgres.rb +58 -264
  75. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  76. data/lib/sequel/adapters/shared/sqlite.rb +22 -101
  77. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  78. data/lib/sequel/adapters/sqlite.rb +2 -19
  79. data/lib/sequel/adapters/tinytds.rb +5 -15
  80. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  81. data/lib/sequel/adapters/utils/mysql_mysql2.rb +4 -4
  82. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  83. data/lib/sequel/adapters/utils/replace.rb +0 -5
  84. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  85. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  86. data/lib/sequel/ast_transformer.rb +3 -94
  87. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  88. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  89. data/lib/sequel/connection_pool/single.rb +0 -2
  90. data/lib/sequel/connection_pool/threaded.rb +94 -110
  91. data/lib/sequel/connection_pool.rb +38 -28
  92. data/lib/sequel/core.rb +42 -101
  93. data/lib/sequel/database/connecting.rb +23 -60
  94. data/lib/sequel/database/dataset.rb +6 -9
  95. data/lib/sequel/database/dataset_defaults.rb +4 -48
  96. data/lib/sequel/database/features.rb +5 -4
  97. data/lib/sequel/database/logging.rb +2 -9
  98. data/lib/sequel/database/misc.rb +36 -55
  99. data/lib/sequel/database/query.rb +8 -13
  100. data/lib/sequel/database/schema_generator.rb +93 -64
  101. data/lib/sequel/database/schema_methods.rb +61 -79
  102. data/lib/sequel/database/transactions.rb +4 -24
  103. data/lib/sequel/database.rb +12 -2
  104. data/lib/sequel/dataset/actions.rb +57 -107
  105. data/lib/sequel/dataset/dataset_module.rb +4 -16
  106. data/lib/sequel/dataset/features.rb +35 -30
  107. data/lib/sequel/dataset/graph.rb +40 -49
  108. data/lib/sequel/dataset/misc.rb +12 -37
  109. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  110. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  111. data/lib/sequel/dataset/query.rb +91 -161
  112. data/lib/sequel/dataset/sql.rb +33 -225
  113. data/lib/sequel/dataset.rb +18 -10
  114. data/lib/sequel/deprecated.rb +18 -27
  115. data/lib/sequel/exceptions.rb +1 -17
  116. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  117. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  118. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  119. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  120. data/lib/sequel/extensions/connection_validator.rb +1 -1
  121. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  122. data/lib/sequel/extensions/core_extensions.rb +39 -49
  123. data/lib/sequel/extensions/core_refinements.rb +39 -45
  124. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  125. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  126. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  127. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  128. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  129. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  130. data/lib/sequel/extensions/from_block.rb +1 -35
  131. data/lib/sequel/extensions/graph_each.rb +2 -2
  132. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  133. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  134. data/lib/sequel/extensions/inflector.rb +4 -4
  135. data/lib/sequel/extensions/migration.rb +27 -43
  136. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  137. data/lib/sequel/extensions/null_dataset.rb +2 -8
  138. data/lib/sequel/extensions/pagination.rb +1 -17
  139. data/lib/sequel/extensions/pg_array.rb +20 -189
  140. data/lib/sequel/extensions/pg_extended_date_support.rb +230 -0
  141. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  142. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  143. data/lib/sequel/extensions/pg_inet.rb +3 -16
  144. data/lib/sequel/extensions/pg_interval.rb +1 -20
  145. data/lib/sequel/extensions/pg_json.rb +7 -27
  146. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  147. data/lib/sequel/extensions/pg_range.rb +6 -121
  148. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  149. data/lib/sequel/extensions/pg_row.rb +5 -77
  150. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  151. data/lib/sequel/extensions/query.rb +3 -4
  152. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  153. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  154. data/lib/sequel/extensions/select_remove.rb +3 -3
  155. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  156. data/lib/sequel/extensions/sql_comments.rb +2 -2
  157. data/lib/sequel/extensions/string_agg.rb +11 -8
  158. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  159. data/lib/sequel/extensions/synchronize_sql.rb +45 -0
  160. data/lib/sequel/model/associations.rb +129 -131
  161. data/lib/sequel/model/base.rb +133 -731
  162. data/lib/sequel/model/default_inflections.rb +1 -1
  163. data/lib/sequel/model/errors.rb +0 -3
  164. data/lib/sequel/model/exceptions.rb +2 -6
  165. data/lib/sequel/model/inflections.rb +1 -26
  166. data/lib/sequel/model/plugins.rb +1 -0
  167. data/lib/sequel/model.rb +27 -62
  168. data/lib/sequel/plugins/active_model.rb +2 -5
  169. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  170. data/lib/sequel/plugins/association_pks.rb +14 -28
  171. data/lib/sequel/plugins/association_proxies.rb +6 -7
  172. data/lib/sequel/plugins/auto_validations.rb +4 -4
  173. data/lib/sequel/plugins/before_after_save.rb +0 -43
  174. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  175. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  176. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  177. data/lib/sequel/plugins/caching.rb +5 -5
  178. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  179. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  180. data/lib/sequel/plugins/column_select.rb +2 -2
  181. data/lib/sequel/plugins/composition.rb +15 -24
  182. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  183. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  184. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  185. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  186. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  187. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  188. data/lib/sequel/plugins/finder.rb +16 -10
  189. data/lib/sequel/plugins/force_encoding.rb +1 -7
  190. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  191. data/lib/sequel/plugins/input_transformer.rb +10 -11
  192. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  193. data/lib/sequel/plugins/instance_filters.rb +5 -5
  194. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  195. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  196. data/lib/sequel/plugins/json_serializer.rb +19 -19
  197. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  198. data/lib/sequel/plugins/list.rb +6 -6
  199. data/lib/sequel/plugins/many_through_many.rb +11 -8
  200. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  201. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  202. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  203. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  204. data/lib/sequel/plugins/pg_row.rb +2 -11
  205. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  206. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  207. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  208. data/lib/sequel/plugins/serialization.rb +15 -33
  209. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  210. data/lib/sequel/plugins/sharding.rb +2 -8
  211. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  212. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  213. data/lib/sequel/plugins/static_cache.rb +8 -9
  214. data/lib/sequel/plugins/string_stripper.rb +3 -3
  215. data/lib/sequel/plugins/subclasses.rb +1 -1
  216. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  217. data/lib/sequel/plugins/table_select.rb +2 -2
  218. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  219. data/lib/sequel/plugins/timestamps.rb +6 -7
  220. data/lib/sequel/plugins/touch.rb +4 -8
  221. data/lib/sequel/plugins/tree.rb +3 -3
  222. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  223. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  224. data/lib/sequel/plugins/update_or_create.rb +3 -3
  225. data/lib/sequel/plugins/update_refresh.rb +3 -3
  226. data/lib/sequel/plugins/uuid.rb +7 -11
  227. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  228. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  229. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  230. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  231. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  232. data/lib/sequel/sql.rb +145 -276
  233. data/lib/sequel/timezones.rb +8 -23
  234. data/lib/sequel/version.rb +2 -2
  235. data/lib/sequel.rb +1 -1
  236. data/spec/adapter_spec.rb +1 -1
  237. data/spec/adapters/db2_spec.rb +2 -103
  238. data/spec/adapters/mssql_spec.rb +89 -68
  239. data/spec/adapters/mysql_spec.rb +111 -478
  240. data/spec/adapters/oracle_spec.rb +1 -9
  241. data/spec/adapters/postgres_spec.rb +459 -664
  242. data/spec/adapters/spec_helper.rb +12 -31
  243. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  244. data/spec/adapters/sqlite_spec.rb +8 -146
  245. data/spec/bin_spec.rb +11 -16
  246. data/spec/core/connection_pool_spec.rb +173 -74
  247. data/spec/core/database_spec.rb +96 -244
  248. data/spec/core/dataset_spec.rb +99 -414
  249. data/spec/core/deprecated_spec.rb +3 -3
  250. data/spec/core/expression_filters_spec.rb +37 -144
  251. data/spec/core/mock_adapter_spec.rb +241 -4
  252. data/spec/core/object_graph_spec.rb +11 -60
  253. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  254. data/spec/core/schema_generator_spec.rb +51 -40
  255. data/spec/core/schema_spec.rb +88 -77
  256. data/spec/core/spec_helper.rb +6 -24
  257. data/spec/core/version_spec.rb +1 -1
  258. data/spec/core_extensions_spec.rb +7 -83
  259. data/spec/core_model_spec.rb +2 -2
  260. data/spec/deprecation_helper.rb +2 -14
  261. data/spec/extensions/accessed_columns_spec.rb +1 -1
  262. data/spec/extensions/active_model_spec.rb +3 -3
  263. data/spec/extensions/after_initialize_spec.rb +1 -1
  264. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  265. data/spec/extensions/association_dependencies_spec.rb +1 -1
  266. data/spec/extensions/association_pks_spec.rb +30 -92
  267. data/spec/extensions/association_proxies_spec.rb +1 -1
  268. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  269. data/spec/extensions/auto_validations_spec.rb +1 -1
  270. data/spec/extensions/blacklist_security_spec.rb +1 -1
  271. data/spec/extensions/blank_spec.rb +1 -1
  272. data/spec/extensions/boolean_readers_spec.rb +1 -1
  273. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  274. data/spec/extensions/caching_spec.rb +1 -1
  275. data/spec/extensions/class_table_inheritance_spec.rb +53 -1118
  276. data/spec/extensions/column_conflicts_spec.rb +1 -1
  277. data/spec/extensions/column_select_spec.rb +4 -4
  278. data/spec/extensions/columns_introspection_spec.rb +1 -1
  279. data/spec/extensions/columns_updated_spec.rb +1 -1
  280. data/spec/extensions/composition_spec.rb +8 -30
  281. data/spec/extensions/connection_expiration_spec.rb +3 -3
  282. data/spec/extensions/connection_validator_spec.rb +3 -3
  283. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  284. data/spec/extensions/constraint_validations_spec.rb +1 -1
  285. data/spec/extensions/core_refinements_spec.rb +1 -3
  286. data/spec/extensions/csv_serializer_spec.rb +4 -9
  287. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  288. data/spec/extensions/dataset_associations_spec.rb +2 -1
  289. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  290. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  291. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  292. data/spec/extensions/defaults_setter_spec.rb +2 -2
  293. data/spec/extensions/delay_add_association_spec.rb +8 -9
  294. data/spec/extensions/dirty_spec.rb +1 -1
  295. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  296. data/spec/extensions/eager_each_spec.rb +2 -2
  297. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  298. data/spec/extensions/error_splitter_spec.rb +1 -1
  299. data/spec/extensions/error_sql_spec.rb +1 -1
  300. data/spec/extensions/eval_inspect_spec.rb +1 -1
  301. data/spec/extensions/finder_spec.rb +1 -1
  302. data/spec/extensions/force_encoding_spec.rb +2 -5
  303. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  304. data/spec/extensions/graph_each_spec.rb +5 -5
  305. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  306. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  307. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  308. data/spec/extensions/inflector_spec.rb +1 -1
  309. data/spec/extensions/input_transformer_spec.rb +7 -2
  310. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  311. data/spec/extensions/instance_filters_spec.rb +1 -1
  312. data/spec/extensions/instance_hooks_spec.rb +1 -95
  313. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  314. data/spec/extensions/json_serializer_spec.rb +1 -1
  315. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  316. data/spec/extensions/list_spec.rb +5 -6
  317. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  318. data/spec/extensions/many_through_many_spec.rb +25 -33
  319. data/spec/extensions/migration_spec.rb +12 -2
  320. data/spec/extensions/modification_detection_spec.rb +1 -1
  321. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  322. data/spec/extensions/named_timezones_spec.rb +3 -3
  323. data/spec/extensions/nested_attributes_spec.rb +1 -29
  324. data/spec/extensions/null_dataset_spec.rb +1 -11
  325. data/spec/extensions/optimistic_locking_spec.rb +2 -2
  326. data/spec/extensions/pagination_spec.rb +1 -1
  327. data/spec/extensions/pg_array_associations_spec.rb +22 -26
  328. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_array_spec.rb +3 -48
  330. data/spec/extensions/pg_enum_spec.rb +1 -1
  331. data/spec/extensions/pg_extended_date_support_spec.rb +122 -0
  332. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  333. data/spec/extensions/pg_hstore_spec.rb +22 -31
  334. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_inet_spec.rb +1 -14
  336. data/spec/extensions/pg_interval_spec.rb +3 -13
  337. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  338. data/spec/extensions/pg_json_spec.rb +1 -13
  339. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  340. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  341. data/spec/extensions/pg_range_spec.rb +3 -88
  342. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  343. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  344. data/spec/extensions/pg_row_spec.rb +1 -44
  345. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  346. data/spec/extensions/prepared_statements_safe_spec.rb +7 -7
  347. data/spec/extensions/prepared_statements_spec.rb +13 -48
  348. data/spec/extensions/pretty_table_spec.rb +40 -9
  349. data/spec/extensions/query_spec.rb +1 -12
  350. data/spec/extensions/rcte_tree_spec.rb +23 -34
  351. data/spec/extensions/round_timestamps_spec.rb +1 -5
  352. data/spec/extensions/s_spec.rb +1 -1
  353. data/spec/extensions/schema_caching_spec.rb +1 -1
  354. data/spec/extensions/schema_dumper_spec.rb +43 -32
  355. data/spec/extensions/select_remove_spec.rb +1 -1
  356. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  357. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  358. data/spec/extensions/serialization_spec.rb +5 -17
  359. data/spec/extensions/server_block_spec.rb +1 -1
  360. data/spec/extensions/server_logging_spec.rb +2 -2
  361. data/spec/extensions/sharding_spec.rb +1 -1
  362. data/spec/extensions/shared_caching_spec.rb +1 -28
  363. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  364. data/spec/extensions/singular_table_names_spec.rb +1 -1
  365. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  366. data/spec/extensions/spec_helper.rb +5 -27
  367. data/spec/extensions/split_array_nil_spec.rb +1 -1
  368. data/spec/extensions/split_values_spec.rb +1 -1
  369. data/spec/extensions/sql_comments_spec.rb +1 -1
  370. data/spec/extensions/sql_expr_spec.rb +1 -1
  371. data/spec/extensions/static_cache_spec.rb +1 -1
  372. data/spec/extensions/string_agg_spec.rb +2 -2
  373. data/spec/extensions/string_date_time_spec.rb +1 -1
  374. data/spec/extensions/string_stripper_spec.rb +1 -1
  375. data/spec/extensions/subclasses_spec.rb +1 -1
  376. data/spec/extensions/subset_conditions_spec.rb +1 -1
  377. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  378. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  379. data/spec/extensions/synchronize_sql_spec.rb +124 -0
  380. data/spec/extensions/table_select_spec.rb +4 -4
  381. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  382. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  383. data/spec/extensions/timestamps_spec.rb +5 -7
  384. data/spec/extensions/to_dot_spec.rb +1 -1
  385. data/spec/extensions/touch_spec.rb +1 -1
  386. data/spec/extensions/tree_spec.rb +1 -1
  387. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  388. data/spec/extensions/unlimited_update_spec.rb +1 -1
  389. data/spec/extensions/update_or_create_spec.rb +12 -16
  390. data/spec/extensions/update_primary_key_spec.rb +4 -3
  391. data/spec/extensions/update_refresh_spec.rb +1 -1
  392. data/spec/extensions/uuid_spec.rb +10 -13
  393. data/spec/extensions/validate_associated_spec.rb +1 -1
  394. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  395. data/spec/extensions/validation_contexts_spec.rb +1 -1
  396. data/spec/extensions/validation_helpers_spec.rb +10 -44
  397. data/spec/extensions/whitelist_security_spec.rb +5 -5
  398. data/spec/extensions/xml_serializer_spec.rb +8 -13
  399. data/spec/guards_helper.rb +2 -1
  400. data/spec/integration/associations_test.rb +1 -23
  401. data/spec/integration/database_test.rb +7 -7
  402. data/spec/integration/dataset_test.rb +12 -47
  403. data/spec/integration/eager_loader_test.rb +1 -1
  404. data/spec/integration/migrator_test.rb +1 -1
  405. data/spec/integration/model_test.rb +4 -82
  406. data/spec/integration/plugin_test.rb +7 -23
  407. data/spec/integration/prepared_statement_test.rb +8 -88
  408. data/spec/integration/schema_test.rb +10 -10
  409. data/spec/integration/spec_helper.rb +17 -21
  410. data/spec/integration/timezone_test.rb +5 -5
  411. data/spec/integration/transaction_test.rb +3 -55
  412. data/spec/integration/type_test.rb +9 -9
  413. data/spec/model/association_reflection_spec.rb +24 -9
  414. data/spec/model/associations_spec.rb +124 -303
  415. data/spec/model/base_spec.rb +43 -137
  416. data/spec/model/class_dataset_methods_spec.rb +2 -20
  417. data/spec/model/dataset_methods_spec.rb +1 -20
  418. data/spec/model/eager_loading_spec.rb +48 -17
  419. data/spec/model/hooks_spec.rb +5 -300
  420. data/spec/model/inflector_spec.rb +1 -1
  421. data/spec/model/model_spec.rb +29 -339
  422. data/spec/model/plugins_spec.rb +2 -16
  423. data/spec/model/record_spec.rb +33 -129
  424. data/spec/model/spec_helper.rb +5 -15
  425. data/spec/model/validations_spec.rb +1 -1
  426. data/spec/sequel_warning.rb +1 -12
  427. metadata +19 -65
  428. data/doc/active_record.rdoc +0 -927
  429. data/lib/sequel/adapters/cubrid.rb +0 -160
  430. data/lib/sequel/adapters/do/mysql.rb +0 -69
  431. data/lib/sequel/adapters/do/postgres.rb +0 -46
  432. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  433. data/lib/sequel/adapters/do.rb +0 -166
  434. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  435. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  436. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  437. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  438. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  439. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  440. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  441. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  442. data/lib/sequel/adapters/shared/informix.rb +0 -63
  443. data/lib/sequel/adapters/shared/progress.rb +0 -40
  444. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  445. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  446. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  447. data/lib/sequel/adapters/swift.rb +0 -169
  448. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  449. data/lib/sequel/dataset/mutation.rb +0 -98
  450. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  451. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  452. data/lib/sequel/extensions/filter_having.rb +0 -65
  453. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  454. data/lib/sequel/extensions/meta_def.rb +0 -37
  455. data/lib/sequel/extensions/query_literals.rb +0 -86
  456. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  457. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  458. data/lib/sequel/extensions/set_overrides.rb +0 -82
  459. data/lib/sequel/no_core_ext.rb +0 -4
  460. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  461. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  462. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  463. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  464. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  465. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  466. data/lib/sequel/plugins/schema.rb +0 -84
  467. data/lib/sequel/plugins/scissors.rb +0 -37
  468. data/spec/core/dataset_mutation_spec.rb +0 -253
  469. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  470. data/spec/extensions/before_after_save_spec.rb +0 -40
  471. data/spec/extensions/filter_having_spec.rb +0 -42
  472. data/spec/extensions/from_block_spec.rb +0 -21
  473. data/spec/extensions/hash_aliases_spec.rb +0 -26
  474. data/spec/extensions/identifier_columns_spec.rb +0 -19
  475. data/spec/extensions/meta_def_spec.rb +0 -35
  476. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  477. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  478. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  479. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  480. data/spec/extensions/query_literals_spec.rb +0 -185
  481. data/spec/extensions/schema_spec.rb +0 -123
  482. data/spec/extensions/scissors_spec.rb +0 -27
  483. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  484. data/spec/extensions/set_overrides_spec.rb +0 -75
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "InstanceHooks plugin" do
4
4
  def r(x=nil)
@@ -25,17 +25,6 @@ describe "InstanceHooks plugin" do
25
25
  @r.must_equal [4, 2, 1, 3]
26
26
  end
27
27
 
28
- deprecated "should cancel the save if before_create_hook block returns false" do
29
- @o.after_create_hook{r 1}
30
- @o.before_create_hook{r false}
31
- @o.before_create_hook{r 4}
32
- @o.save.must_be_nil
33
- @r.must_equal [4, false]
34
- @r.clear
35
- @o.save.must_be_nil
36
- @r.must_equal [4, false]
37
- end
38
-
39
28
  it "should cancel the save if before_create_hook block calls cancel_action" do
40
29
  @o.after_create_hook{r 1}
41
30
  @o.before_create_hook{r{@o.cancel_action}}
@@ -58,17 +47,6 @@ describe "InstanceHooks plugin" do
58
47
  @r.must_equal [4, 2, 1, 3]
59
48
  end
60
49
 
61
- deprecated "should cancel the save if before_update_hook block returns false" do
62
- @x.after_update_hook{r 1}
63
- @x.before_update_hook{r false}
64
- @x.before_update_hook{r 4}
65
- @x.save.must_be_nil
66
- @r.must_equal [4, false]
67
- @r.clear
68
- @x.save.must_be_nil
69
- @r.must_equal [4, false]
70
- end
71
-
72
50
  it "should cancel the save if before_update_hook block calls cancel_action" do
73
51
  @x.after_update_hook{r 1}
74
52
  @x.before_update_hook{r{@x.cancel_action}}
@@ -99,24 +77,6 @@ describe "InstanceHooks plugin" do
99
77
  @r.must_equal [4, 2, 1, 3]
100
78
  end
101
79
 
102
- deprecated "should cancel the save if before_save_hook block returns false" do
103
- @x.after_save_hook{r 1}
104
- @x.before_save_hook{r false}
105
- @x.before_save_hook{r 4}
106
- @x.save.must_be_nil
107
- @r.must_equal [4, false]
108
- @r.clear
109
-
110
- @x.after_save_hook{r 1}
111
- @x.before_save_hook{r false}
112
- @x.before_save_hook{r 4}
113
- @x.save.must_be_nil
114
- @r.must_equal [4, false]
115
- @r.clear
116
- @x.save.must_be_nil
117
- @r.must_equal [4, false]
118
- end
119
-
120
80
  it "should cancel the save if before_save_hook block calls cancel_action" do
121
81
  @x.after_save_hook{r 1}
122
82
  @x.before_save_hook{r{@x.cancel_action}}
@@ -144,14 +104,6 @@ describe "InstanceHooks plugin" do
144
104
  @r.must_equal [4, 2, 1, 3]
145
105
  end
146
106
 
147
- deprecated "should cancel the destroy if before_destroy_hook block returns false" do
148
- @x.after_destroy_hook{r 1}
149
- @x.before_destroy_hook{r false}
150
- @x.before_destroy_hook{r 4}
151
- @x.destroy.must_be_nil
152
- @r.must_equal [4, false]
153
- end
154
-
155
107
  it "should cancel the destroy if before_destroy_hook block calls cancel_action" do
156
108
  @x.after_destroy_hook{r 1}
157
109
  @x.before_destroy_hook{r{@x.cancel_action}}
@@ -169,17 +121,6 @@ describe "InstanceHooks plugin" do
169
121
  @r.must_equal [4, 2, 1, 3]
170
122
  end
171
123
 
172
- deprecated "should cancel the save if before_validation_hook block returns false" do
173
- @o.after_validation_hook{r 1}
174
- @o.before_validation_hook{r false}
175
- @o.before_validation_hook{r 4}
176
- @o.valid?.must_equal false
177
- @r.must_equal [4, false]
178
- @r.clear
179
- @o.valid?.must_equal false
180
- @r.must_equal [4, false]
181
- end
182
-
183
124
  it "should cancel the save if before_validation_hook block calls cancel_action" do
184
125
  @o.after_validation_hook{r 1}
185
126
  @o.before_validation_hook{r{@o.cancel_action}}
@@ -289,34 +230,6 @@ describe "InstanceHooks plugin with transactions" do
289
230
  @db.sqls
290
231
  end
291
232
 
292
- deprecated "should support after_commit_hook" do
293
- @o.after_commit_hook{@db.execute('ac1')}
294
- @o.after_commit_hook{@db.execute('ac2')}
295
- @o.save.wont_equal nil
296
- @db.sqls.must_equal ['BEGIN', 'as', 'COMMIT', 'ac1', 'ac2']
297
- end
298
-
299
- deprecated "should support after_rollback_hook" do
300
- @or.after_rollback_hook{@db.execute('ar1')}
301
- @or.after_rollback_hook{@db.execute('ar2')}
302
- @or.save.must_be_nil
303
- @db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK', 'ar1', 'ar2']
304
- end
305
-
306
- deprecated "should support after_destroy_commit_hook" do
307
- @o.after_destroy_commit_hook{@db.execute('adc1')}
308
- @o.after_destroy_commit_hook{@db.execute('adc2')}
309
- @o.destroy.wont_equal nil
310
- @db.sqls.must_equal ['BEGIN', "DELETE FROM items WHERE (id = 1)", 'ad', 'COMMIT', 'adc1', 'adc2']
311
- end
312
-
313
- deprecated "should support after_destroy_rollback_hook" do
314
- @or.after_destroy_rollback_hook{@db.execute('adr1')}
315
- @or.after_destroy_rollback_hook{@db.execute('adr2')}
316
- @or.destroy.must_be_nil
317
- @db.sqls.must_equal ['BEGIN', "DELETE FROM items WHERE (id = 1)", 'ad', 'ROLLBACK', 'adr1', 'adr2']
318
- end
319
-
320
233
  it "should have *_hook methods return self "do
321
234
  @o.before_destroy_hook{r 1}.must_be_same_as(@o)
322
235
  @o.before_validation_hook{r 1}.must_be_same_as(@o)
@@ -329,12 +242,5 @@ describe "InstanceHooks plugin with transactions" do
329
242
  @o.after_save_hook{r 1}.must_be_same_as(@o)
330
243
  @o.after_update_hook{r 1}.must_be_same_as(@o)
331
244
  @o.after_create_hook{r 1}.must_be_same_as(@o)
332
- deprecated do
333
- @o.after_commit_hook{r 1}.must_be_same_as(@o)
334
- @o.after_rollback_hook{r 1}.must_be_same_as(@o)
335
- @o.after_destroy_commit_hook{r 1}.must_be_same_as(@o)
336
- @o.after_destroy_rollback_hook{r 1}.must_be_same_as(@o)
337
- end
338
245
  end
339
-
340
246
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Sequel::Plugins::InvertedSubsets" do
4
4
  it "should add an inverted subset method which inverts the condition" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "Sequel::Plugins::JsonSerializer" do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
  require 'yaml'
3
3
 
4
4
  describe "Sequel::Plugins::LazyAttributes" do
@@ -42,12 +42,6 @@ describe "Sequel::Plugins::LazyAttributes" do
42
42
  Object.send(:remove_const, :LazyAttributesModel)
43
43
  end
44
44
 
45
- deprecated "should allow access to lazy_attributes_module" do
46
- @c.lazy_attributes_module.must_be_kind_of Module
47
- @c.lazy_attributes_module = v = Module.new
48
- @c.lazy_attributes_module.must_equal v
49
- end
50
-
51
45
  it "should allowing adding additional lazy attributes via plugin :lazy_attributes" do
52
46
  @c.set_dataset(@ds.select(:id, :blah))
53
47
  @c.dataset.sql.must_equal 'SELECT id, blah FROM la'
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "List plugin" do
4
4
  def klass(opts={})
@@ -92,15 +92,14 @@ describe "List plugin" do
92
92
  @sc.create(:scope_id=>1).values.must_equal(:id=>1, :scope_id=>1, :position=>1)
93
93
  @sc.create(:scope_id=>1).values.must_equal(:id=>2, :scope_id=>1, :position=>2)
94
94
  @sc.create(:scope_id=>2).values.must_equal(:id=>3, :scope_id=>2, :position=>1)
95
- sqls = @db.sqls
96
- sqls.slice!(7).must_match(/INSERT INTO items \((scope_id|position), (scope_id|position)\) VALUES \([12], [12]\)/)
97
- sqls.slice!(4).must_match(/INSERT INTO items \((scope_id|position), (scope_id|position)\) VALUES \([12], [12]\)/)
98
- sqls.slice!(1).must_match(/INSERT INTO items \((scope_id|position), (scope_id|position)\) VALUES \(1, 1\)/)
99
- sqls.must_equal ["SELECT max(position) AS max FROM items WHERE (scope_id = 1) LIMIT 1",
95
+ @db.sqls.must_equal ["SELECT max(position) AS max FROM items WHERE (scope_id = 1) LIMIT 1",
96
+ 'INSERT INTO items (scope_id, position) VALUES (1, 1)',
100
97
  "SELECT * FROM items WHERE (id = 1) ORDER BY scope_id, position LIMIT 1",
101
98
  "SELECT max(position) AS max FROM items WHERE (scope_id = 1) LIMIT 1",
99
+ 'INSERT INTO items (scope_id, position) VALUES (1, 2)',
102
100
  "SELECT * FROM items WHERE (id = 2) ORDER BY scope_id, position LIMIT 1",
103
101
  "SELECT max(position) AS max FROM items WHERE (scope_id = 2) LIMIT 1",
102
+ 'INSERT INTO items (scope_id, position) VALUES (2, 1)',
104
103
  "SELECT * FROM items WHERE (id = 3) ORDER BY scope_id, position LIMIT 1"]
105
104
  end
106
105
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "LooserTypecasting Extension" do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe Sequel::Model, "many_through_many" do
4
4
  before do
@@ -462,12 +462,12 @@ describe Sequel::Model, "many_through_many" do
462
462
 
463
463
  it "should not add associations methods directly to class" do
464
464
  @c1.many_through_many :tags, [[:albums_artists, :artist_id, :album_id], [:albums, :id, :id], [:albums_tags, :album_id, :tag_id]]
465
- im = @c1.instance_methods.collect{|x| x.to_s}
466
- im.must_include('tags')
467
- im.must_include('tags_dataset')
468
- im2 = @c1.instance_methods(false).collect{|x| x.to_s}
469
- im2.wont_include('tags')
470
- im2.wont_include('tags_dataset')
465
+ im = @c1.instance_methods
466
+ im.must_include(:tags)
467
+ im.must_include(:tags_dataset)
468
+ im2 = @c1.instance_methods(false)
469
+ im2.wont_include(:tags)
470
+ im2.wont_include(:tags_dataset)
471
471
  end
472
472
 
473
473
  it "should support after_load association callback" do
@@ -603,11 +603,9 @@ describe "many_through_many eager loading methods" do
603
603
  it "should eagerly load multiple associations in a single call" do
604
604
  a = @c1.eager(:tags, :albums).all
605
605
  a.must_equal [@c1.load(:id=>1)]
606
- sqls = DB.sqls
607
- sqls.length.must_equal 3
608
- sqls[0].must_equal 'SELECT * FROM artists'
609
- sqls[1..-1].must_include('SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
610
- sqls[1..-1].must_include('SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
606
+ DB.sqls.must_equal ['SELECT * FROM artists',
607
+ 'SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))',
608
+ 'SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))']
611
609
  a = a.first
612
610
  a.tags.must_equal [Tag.load(:id=>2)]
613
611
  a.albums.must_equal [Album.load(:id=>3)]
@@ -617,11 +615,9 @@ describe "many_through_many eager loading methods" do
617
615
  it "should eagerly load multiple associations in separate" do
618
616
  a = @c1.eager(:tags).eager(:albums).all
619
617
  a.must_equal [@c1.load(:id=>1)]
620
- sqls = DB.sqls
621
- sqls.length.must_equal 3
622
- sqls[0].must_equal 'SELECT * FROM artists'
623
- sqls[1..-1].must_include('SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
624
- sqls[1..-1].must_include('SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
618
+ DB.sqls.must_equal ['SELECT * FROM artists',
619
+ 'SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))',
620
+ 'SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))']
625
621
  a = a.first
626
622
  a.tags.must_equal [Tag.load(:id=>2)]
627
623
  a.albums.must_equal [Album.load(:id=>3)]
@@ -1585,12 +1581,12 @@ describe Sequel::Model, "one_through_many" do
1585
1581
 
1586
1582
  it "should not add associations methods directly to class" do
1587
1583
  @c1.one_through_many :tag, [[:albums_artists, :artist_id, :album_id], [:albums, :id, :id], [:albums_tags, :album_id, :tag_id]]
1588
- im = @c1.instance_methods.collect{|x| x.to_s}
1589
- im.must_include('tag')
1590
- im.must_include('tag_dataset')
1591
- im2 = @c1.instance_methods(false).collect{|x| x.to_s}
1592
- im2.wont_include('tag')
1593
- im2.wont_include('tag_dataset')
1584
+ im = @c1.instance_methods
1585
+ im.must_include(:tag)
1586
+ im.must_include(:tag_dataset)
1587
+ im2 = @c1.instance_methods(false)
1588
+ im2.wont_include(:tag)
1589
+ im2.wont_include(:tag_dataset)
1594
1590
  end
1595
1591
 
1596
1592
  it "should support after_load association callback" do
@@ -1681,11 +1677,9 @@ describe "one_through_many eager loading methods" do
1681
1677
  it "should eagerly load multiple associations in a single call" do
1682
1678
  a = @c1.eager(:tag, :album).all
1683
1679
  a.must_equal [@c1.load(:id=>1)]
1684
- sqls = DB.sqls
1685
- sqls.length.must_equal 3
1686
- sqls[0].must_equal 'SELECT * FROM artists'
1687
- sqls[1..-1].must_include('SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
1688
- sqls[1..-1].must_include('SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
1680
+ DB.sqls.must_equal ['SELECT * FROM artists',
1681
+ 'SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))',
1682
+ 'SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))']
1689
1683
  a = a.first
1690
1684
  a.tag.must_equal Tag.load(:id=>2)
1691
1685
  a.album.must_equal Album.load(:id=>3)
@@ -1695,11 +1689,9 @@ describe "one_through_many eager loading methods" do
1695
1689
  it "should eagerly load multiple associations in separate" do
1696
1690
  a = @c1.eager(:tag).eager(:album).all
1697
1691
  a.must_equal [@c1.load(:id=>1)]
1698
- sqls = DB.sqls
1699
- sqls.length.must_equal 3
1700
- sqls[0].must_equal 'SELECT * FROM artists'
1701
- sqls[1..-1].must_include('SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
1702
- sqls[1..-1].must_include('SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))')
1692
+ DB.sqls.must_equal ['SELECT * FROM artists',
1693
+ 'SELECT tags.*, albums_artists.artist_id AS x_foreign_key_x FROM tags INNER JOIN albums_tags ON (albums_tags.tag_id = tags.id) INNER JOIN albums ON (albums.id = albums_tags.album_id) INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))',
1694
+ 'SELECT albums.*, albums_artists.artist_id AS x_foreign_key_x FROM albums INNER JOIN albums_artists ON (albums_artists.album_id = albums.id) WHERE (albums_artists.artist_id IN (1))']
1703
1695
  a = a.first
1704
1696
  a.tag.must_equal Tag.load(:id=>2)
1705
1697
  a.album.must_equal Album.load(:id=>3)
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :migration
4
4
 
@@ -62,7 +62,7 @@ describe "Migration.apply" do
62
62
  m = Sequel::Migration.new(Sequel.mock)
63
63
  m.respond_to?(:foo).must_equal false
64
64
  m.respond_to?(:execute).must_equal true
65
- end if RUBY_VERSION >= '1.9'
65
+ end
66
66
  end
67
67
 
68
68
  describe "SimpleMigration#apply" do
@@ -195,6 +195,16 @@ describe "Reversible Migrations with Sequel.migration{change{}}" do
195
195
  [:drop_table, :a, {:foo=>:bar}]]
196
196
  end
197
197
 
198
+ it "should reverse add_foreign_key with :foreign_key_constraint_name option" do
199
+ Sequel.migration{change{alter_table(:t){add_foreign_key :b, :c, :foreign_key_constraint_name=>:f}}}.apply(@db, :down)
200
+ actions = @db.actions
201
+ actions.must_equal [[:alter_table, [[:drop_foreign_key, :b, {:foreign_key_constraint_name=>:f}]]]]
202
+ @db.sqls
203
+ db = Sequel.mock
204
+ db.alter_table(:t){send(*actions[0][1][0])}
205
+ db.sqls.must_equal ["ALTER TABLE t DROP CONSTRAINT f", "ALTER TABLE t DROP COLUMN b"]
206
+ end
207
+
198
208
  it "should raise in the down direction if migration uses unsupported method" do
199
209
  m = Sequel.migration{change{run 'SQL'}}
200
210
  m.apply(@db, :up)
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
  require 'yaml'
3
3
 
4
4
  describe "serialization_modification_detection plugin" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "MSSSQL optimistic locking plugin" do
4
4
  before do
@@ -1,9 +1,9 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  begin
4
4
  require 'tzinfo'
5
- rescue LoadError => e
6
- skip_warn "named_timezones_spec: can't load tzinfo (#{e.class}: #{e})"
5
+ rescue LoadError
6
+ warn "Skipping test of named_timezones extension: can't load tzinfo"
7
7
  else
8
8
  Sequel.extension :thread_local_timezones
9
9
  Sequel.extension :named_timezones
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "NestedAttributes plugin" do
4
4
  def check_sqls(should, is)
@@ -49,12 +49,6 @@ describe "NestedAttributes plugin" do
49
49
  @db.sqls
50
50
  end
51
51
 
52
- deprecated "should allow access to nested_attributes_module" do
53
- @Artist.nested_attributes_module.must_be_kind_of Module
54
- @Artist.nested_attributes_module = v = Module.new
55
- @Artist.nested_attributes_module.must_equal v
56
- end
57
-
58
52
  it "should support creating new many_to_one objects" do
59
53
  a = @Album.new({:name=>'Al', :artist_attributes=>{:name=>'Ar'}})
60
54
  @db.sqls.must_equal []
@@ -462,17 +456,6 @@ describe "NestedAttributes plugin" do
462
456
  ar.set(:albums_attributes=>[{:id=>10, :_delete=>'t'}])
463
457
  end
464
458
 
465
- deprecated "should not raise an Error if an unmatched primary key is given, if the :strict=>false option is used" do
466
- @Artist.nested_attributes :albums, :strict=>false
467
- al = @Album.load(:id=>10, :name=>'Al')
468
- ar = @Artist.load(:id=>20, :name=>'Ar')
469
- ar.associations[:albums] = [al]
470
- ar.set(:albums_attributes=>[{:id=>30, :_delete=>'t'}])
471
- @db.sqls.must_equal []
472
- ar.save
473
- @db.sqls.must_equal ["UPDATE artists SET name = 'Ar' WHERE (id = 20)"]
474
- end
475
-
476
459
  it "should not raise an Error if an unmatched primary key is given, if the :unmatched_pk=>:ignore option is used" do
477
460
  @Artist.nested_attributes :albums, :unmatched_pk=>:ignore
478
461
  al = @Album.load(:id=>10, :name=>'Al')
@@ -492,17 +475,6 @@ describe "NestedAttributes plugin" do
492
475
  ar.set(:concerts_attributes=>[{:tour=>'To', :date=>'2004-04-05', :_delete=>'t'}])
493
476
  end
494
477
 
495
- deprecated "should not raise an Error if an unmatched composite primary key is given, if the :strict=>false option is used" do
496
- @Artist.nested_attributes :concerts, :strict=>false
497
- ar = @Artist.load(:id=>10, :name=>'Ar')
498
- co = @Concert.load(:tour=>'To', :date=>'2004-04-05', :playlist=>'Pl')
499
- ar.associations[:concerts] = [co]
500
- ar.set(:concerts_attributes=>[{:tour=>'To', :date=>'2004-04-06', :_delete=>'t'}])
501
- @db.sqls.must_equal []
502
- ar.save
503
- @db.sqls.must_equal ["UPDATE artists SET name = 'Ar' WHERE (id = 10)"]
504
- end
505
-
506
478
  it "should not raise an Error if an unmatched composite primary key is given, if the :unmatched_pk=>:ignore option is used" do
507
479
  @Artist.nested_attributes :concerts, :unmatched_pk=>:ignore
508
480
  ar = @Artist.load(:id=>10, :name=>'Ar')
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "null_dataset extension" do
4
4
  before do
@@ -73,16 +73,6 @@ describe "null_dataset extension" do
73
73
  @i.must_equal 1
74
74
  end
75
75
 
76
- deprecated "should have nullify! method modify receiver" do
77
- ds = @db[:table]
78
- # SEQUEL5: Remove
79
- unless ds.frozen?
80
- ds.nullify!.must_be_same_as(ds)
81
- ds.each(&@pr)
82
- @i.must_equal 0
83
- end
84
- end
85
-
86
76
  it "should work with method chaining" do
87
77
  @ds.where(:a=>1).select(:b).each(&@pr)
88
78
  @i.must_equal 0
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "optimistic_locking plugin" do
4
4
  before do
@@ -105,7 +105,7 @@ describe "optimistic_locking plugin" do
105
105
  @c.db.sqls
106
106
  p2.update(:name=>'Bob')
107
107
  end
108
- @c.db.sqls.first.must_match(/UPDATE people SET (name = 'Bob', lock_version = 4|lock_version = 4, name = 'Bob') WHERE \(\(id = 1\) AND \(lock_version = 3\)\)/)
108
+ @c.db.sqls.must_equal ["UPDATE people SET name = 'Bob', lock_version = 4 WHERE ((id = 1) AND (lock_version = 3))"]
109
109
  end
110
110
 
111
111
  it "should increment the lock column when #modified! even if no columns are changed" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe "A paginated dataset" do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  describe Sequel::Model, "pg_array_associations" do
4
4
  before do
@@ -248,9 +248,8 @@ describe Sequel::Model, "pg_array_associations" do
248
248
  it "should eagerly load correctly" do
249
249
  a = @c1.eager(:tags).all
250
250
  a.must_equal [@o1]
251
- sqls = @db.sqls
252
- sqls.pop.must_match(/SELECT \* FROM tags WHERE \(tags\.id IN \([123], [123], [123]\)\)/)
253
- sqls.must_equal ["SELECT * FROM artists"]
251
+ @db.sqls.must_equal ["SELECT * FROM artists",
252
+ 'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
254
253
  a.first.tags.must_equal [@o2]
255
254
  @db.sqls.must_equal []
256
255
 
@@ -268,9 +267,8 @@ describe Sequel::Model, "pg_array_associations" do
268
267
 
269
268
  a = @c1.eager(:tags).all
270
269
  a.must_equal [@o1]
271
- sqls = @db.sqls
272
- sqls.pop.must_match(/SELECT \* FROM tags WHERE \(\(tags\.id \* 3\) IN \([369], [369], [369]\)\)/)
273
- sqls.must_equal ["SELECT * FROM artists"]
270
+ @db.sqls.must_equal ["SELECT * FROM artists",
271
+ 'SELECT * FROM tags WHERE ((tags.id * 3) IN (3, 6, 9))']
274
272
  a.first.tags.must_equal [@o2]
275
273
  @db.sqls.must_equal []
276
274
 
@@ -284,9 +282,9 @@ describe Sequel::Model, "pg_array_associations" do
284
282
  it "should allow cascading of eager loading for associations of associated models" do
285
283
  a = @c1.eager(:tags=>:artists).all
286
284
  a.must_equal [@o1]
287
- sqls = @db.sqls
288
- sqls.slice!(1).must_match(/SELECT \* FROM tags WHERE \(tags\.id IN \([123], [123], [123]\)\)/)
289
- sqls.must_equal ['SELECT * FROM artists', "SELECT * FROM artists WHERE (artists.tag_ids && ARRAY[2]::integer[])"]
285
+ @db.sqls.must_equal ["SELECT * FROM artists",
286
+ 'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))',
287
+ "SELECT * FROM artists WHERE (artists.tag_ids && ARRAY[2]::integer[])"]
290
288
  a.first.tags.must_equal [@o2]
291
289
  a.first.tags.first.artists.must_equal [@o1]
292
290
  @db.sqls.must_equal []
@@ -302,9 +300,8 @@ describe Sequel::Model, "pg_array_associations" do
302
300
  @db.sqls.must_equal []
303
301
 
304
302
  @o2.artists2.must_equal [@o1]
305
- sqls = @db.sqls
306
- sqls.pop.must_match(/SELECT \* FROM tags WHERE \(tags\.id IN \([123], [123], [123]\)\)/)
307
- sqls.must_equal ["SELECT * FROM artists WHERE (artists.tag_ids @> ARRAY[2]::integer[])"]
303
+ @db.sqls.must_equal ["SELECT * FROM artists WHERE (artists.tag_ids @> ARRAY[2]::integer[])",
304
+ 'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
308
305
  @o2.artists2.first.tags.must_equal [@o2]
309
306
  @db.sqls.must_equal []
310
307
  end
@@ -318,7 +315,7 @@ describe Sequel::Model, "pg_array_associations" do
318
315
  @db.sqls
319
316
 
320
317
  @o1.tags2.must_equal [@o2]
321
- @db.sqls.first.must_match(/SELECT tags\.id, artists\.id AS artists_id, artists\.tag_ids FROM tags LEFT OUTER JOIN artists ON \(artists.tag_ids @> ARRAY\[tags.id\]\) WHERE \(tags\.id IN \([123], [123], [123]\)\)/)
318
+ @db.sqls.must_equal ['SELECT tags.id, artists.id AS artists_id, artists.tag_ids FROM tags LEFT OUTER JOIN artists ON (artists.tag_ids @> ARRAY[tags.id]) WHERE (tags.id IN (1, 2, 3))']
322
319
  @o1.tags2.first.artists.must_equal [@o1]
323
320
  @db.sqls.must_equal []
324
321
 
@@ -332,9 +329,8 @@ describe Sequel::Model, "pg_array_associations" do
332
329
  @db.sqls
333
330
 
334
331
  a = @c1.eager(:tags2).all
335
- sqls = @db.sqls
336
- sqls.pop.must_match(/SELECT tags\.id, artists\.id AS artists_id, artists\.tag_ids FROM tags LEFT OUTER JOIN artists ON \(artists.tag_ids @> ARRAY\[tags.id\]\) WHERE \(tags\.id IN \([123], [123], [123]\)\)/)
337
- sqls.must_equal ["SELECT * FROM artists"]
332
+ @db.sqls.must_equal ["SELECT * FROM artists",
333
+ 'SELECT tags.id, artists.id AS artists_id, artists.tag_ids FROM tags LEFT OUTER JOIN artists ON (artists.tag_ids @> ARRAY[tags.id]) WHERE (tags.id IN (1, 2, 3))']
338
334
  a.must_equal [@o1]
339
335
  a.first.tags2.must_equal [@o2]
340
336
  a.first.tags2.first.artists.must_equal [@o1]
@@ -359,27 +355,24 @@ describe Sequel::Model, "pg_array_associations" do
359
355
  @c1.pg_array_to_many :tags, :clone=>:tags, :limit=>2
360
356
  a = @c1.eager(:tags).all
361
357
  a.must_equal [@o1]
362
- sqls = @db.sqls
363
- sqls.pop.must_match(/SELECT \* FROM tags WHERE \(tags\.id IN \([123], [123], [123]\)\)/)
364
- sqls.must_equal ["SELECT * FROM artists"]
358
+ @db.sqls.must_equal ["SELECT * FROM artists",
359
+ 'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
365
360
  a.first.tags.must_equal [@c2.load(:id=>1), @c2.load(:id=>2)]
366
361
  @db.sqls.must_equal []
367
362
 
368
363
  @c1.pg_array_to_many :tags, :clone=>:tags, :limit=>[1, 1]
369
364
  a = @c1.eager(:tags).all
370
365
  a.must_equal [@o1]
371
- sqls = @db.sqls
372
- sqls.pop.must_match(/SELECT \* FROM tags WHERE \(tags\.id IN \([123], [123], [123]\)\)/)
373
- sqls.must_equal ["SELECT * FROM artists"]
366
+ @db.sqls.must_equal ["SELECT * FROM artists",
367
+ 'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
374
368
  a.first.tags.must_equal [@c2.load(:id=>2)]
375
369
  @db.sqls.must_equal []
376
370
 
377
371
  @c1.pg_array_to_many :tags, :clone=>:tags, :limit=>[nil, 1]
378
372
  a = @c1.eager(:tags).all
379
373
  a.must_equal [@o1]
380
- sqls = @db.sqls
381
- sqls.pop.must_match(/SELECT \* FROM tags WHERE \(tags\.id IN \([123], [123], [123]\)\)/)
382
- sqls.must_equal ["SELECT * FROM artists"]
374
+ @db.sqls.must_equal ["SELECT * FROM artists",
375
+ 'SELECT * FROM tags WHERE (tags.id IN (1, 2, 3))']
383
376
  a.first.tags.must_equal [@c2.load(:id=>2), @c2.load(:id=>3)]
384
377
  @db.sqls.length.must_equal 0
385
378
 
@@ -748,6 +741,9 @@ end
748
741
  describe "Sequel::Model.finalize_associations" do
749
742
  before do
750
743
  @db = Sequel.mock(:host=>'postgres', :numrows=>1)
744
+ @db.extend_datasets do
745
+ def quote_identifiers?; false end
746
+ end
751
747
  class ::Foo < Sequel::Model(@db)
752
748
  plugin :pg_array_associations
753
749
  many_to_pg_array :items
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), "spec_helper")
1
+ require_relative "spec_helper"
2
2
 
3
3
  Sequel.extension :pg_array, :pg_array_ops, :pg_hstore, :pg_hstore_ops
4
4