sequel 4.49.0 → 5.0.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 (477) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +195 -136
  4. data/Rakefile +26 -42
  5. data/bin/sequel +3 -5
  6. data/doc/advanced_associations.rdoc +86 -163
  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/schema_modification.rdoc +63 -60
  29. data/doc/security.rdoc +97 -88
  30. data/doc/sharding.rdoc +43 -30
  31. data/doc/sql.rdoc +53 -65
  32. data/doc/testing.rdoc +3 -5
  33. data/doc/thread_safety.rdoc +2 -4
  34. data/doc/transactions.rdoc +18 -17
  35. data/doc/validations.rdoc +48 -45
  36. data/doc/virtual_rows.rdoc +87 -115
  37. data/lib/sequel.rb +1 -1
  38. data/lib/sequel/adapters/ado.rb +9 -25
  39. data/lib/sequel/adapters/ado/access.rb +7 -13
  40. data/lib/sequel/adapters/ado/mssql.rb +2 -9
  41. data/lib/sequel/adapters/amalgalite.rb +3 -18
  42. data/lib/sequel/adapters/ibmdb.rb +9 -45
  43. data/lib/sequel/adapters/jdbc.rb +13 -73
  44. data/lib/sequel/adapters/jdbc/db2.rb +8 -37
  45. data/lib/sequel/adapters/jdbc/derby.rb +4 -50
  46. data/lib/sequel/adapters/jdbc/h2.rb +4 -25
  47. data/lib/sequel/adapters/jdbc/hsqldb.rb +1 -26
  48. data/lib/sequel/adapters/jdbc/jtds.rb +2 -9
  49. data/lib/sequel/adapters/jdbc/mssql.rb +1 -11
  50. data/lib/sequel/adapters/jdbc/mysql.rb +1 -15
  51. data/lib/sequel/adapters/jdbc/oracle.rb +4 -26
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +2 -31
  53. data/lib/sequel/adapters/jdbc/sqlanywhere.rb +4 -17
  54. data/lib/sequel/adapters/jdbc/sqlite.rb +1 -7
  55. data/lib/sequel/adapters/jdbc/sqlserver.rb +1 -13
  56. data/lib/sequel/adapters/jdbc/transactions.rb +1 -14
  57. data/lib/sequel/adapters/mock.rb +4 -30
  58. data/lib/sequel/adapters/mysql.rb +7 -44
  59. data/lib/sequel/adapters/mysql2.rb +5 -23
  60. data/lib/sequel/adapters/odbc.rb +0 -19
  61. data/lib/sequel/adapters/odbc/db2.rb +1 -1
  62. data/lib/sequel/adapters/odbc/mssql.rb +4 -12
  63. data/lib/sequel/adapters/odbc/oracle.rb +1 -1
  64. data/lib/sequel/adapters/oracle.rb +7 -13
  65. data/lib/sequel/adapters/postgres.rb +13 -57
  66. data/lib/sequel/adapters/postgresql.rb +1 -1
  67. data/lib/sequel/adapters/shared/access.rb +11 -51
  68. data/lib/sequel/adapters/shared/db2.rb +3 -61
  69. data/lib/sequel/adapters/shared/mssql.rb +21 -157
  70. data/lib/sequel/adapters/shared/mysql.rb +23 -224
  71. data/lib/sequel/adapters/shared/oracle.rb +13 -41
  72. data/lib/sequel/adapters/shared/postgres.rb +44 -259
  73. data/lib/sequel/adapters/shared/sqlanywhere.rb +4 -96
  74. data/lib/sequel/adapters/shared/sqlite.rb +12 -101
  75. data/lib/sequel/adapters/sqlanywhere.rb +4 -23
  76. data/lib/sequel/adapters/sqlite.rb +2 -19
  77. data/lib/sequel/adapters/tinytds.rb +5 -15
  78. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +1 -1
  79. data/lib/sequel/adapters/utils/mysql_mysql2.rb +2 -4
  80. data/lib/sequel/adapters/utils/mysql_prepared_statements.rb +3 -6
  81. data/lib/sequel/adapters/utils/replace.rb +0 -5
  82. data/lib/sequel/adapters/utils/stored_procedures.rb +0 -2
  83. data/lib/sequel/adapters/utils/unmodified_identifiers.rb +2 -0
  84. data/lib/sequel/ast_transformer.rb +3 -94
  85. data/lib/sequel/connection_pool.rb +26 -28
  86. data/lib/sequel/connection_pool/sharded_single.rb +1 -4
  87. data/lib/sequel/connection_pool/sharded_threaded.rb +97 -95
  88. data/lib/sequel/connection_pool/single.rb +0 -2
  89. data/lib/sequel/connection_pool/threaded.rb +94 -110
  90. data/lib/sequel/core.rb +42 -101
  91. data/lib/sequel/database.rb +12 -2
  92. data/lib/sequel/database/connecting.rb +23 -60
  93. data/lib/sequel/database/dataset.rb +6 -9
  94. data/lib/sequel/database/dataset_defaults.rb +4 -48
  95. data/lib/sequel/database/features.rb +5 -4
  96. data/lib/sequel/database/logging.rb +2 -9
  97. data/lib/sequel/database/misc.rb +23 -55
  98. data/lib/sequel/database/query.rb +8 -13
  99. data/lib/sequel/database/schema_generator.rb +89 -64
  100. data/lib/sequel/database/schema_methods.rb +61 -79
  101. data/lib/sequel/database/transactions.rb +4 -24
  102. data/lib/sequel/dataset.rb +18 -10
  103. data/lib/sequel/dataset/actions.rb +53 -107
  104. data/lib/sequel/dataset/dataset_module.rb +3 -15
  105. data/lib/sequel/dataset/features.rb +30 -30
  106. data/lib/sequel/dataset/graph.rb +40 -49
  107. data/lib/sequel/dataset/misc.rb +12 -37
  108. data/lib/sequel/dataset/placeholder_literalizer.rb +4 -4
  109. data/lib/sequel/dataset/prepared_statements.rb +23 -51
  110. data/lib/sequel/dataset/query.rb +71 -155
  111. data/lib/sequel/dataset/sql.rb +30 -225
  112. data/lib/sequel/deprecated.rb +18 -27
  113. data/lib/sequel/exceptions.rb +1 -17
  114. data/lib/sequel/extensions/_model_pg_row.rb +0 -7
  115. data/lib/sequel/extensions/_pretty_table.rb +1 -3
  116. data/lib/sequel/extensions/arbitrary_servers.rb +10 -10
  117. data/lib/sequel/extensions/connection_expiration.rb +1 -1
  118. data/lib/sequel/extensions/connection_validator.rb +1 -1
  119. data/lib/sequel/extensions/constraint_validations.rb +11 -11
  120. data/lib/sequel/extensions/core_extensions.rb +39 -49
  121. data/lib/sequel/extensions/core_refinements.rb +39 -45
  122. data/lib/sequel/extensions/current_datetime_timestamp.rb +0 -4
  123. data/lib/sequel/extensions/date_arithmetic.rb +7 -7
  124. data/lib/sequel/extensions/duplicate_columns_handler.rb +12 -9
  125. data/lib/sequel/extensions/empty_array_consider_nulls.rb +2 -2
  126. data/lib/sequel/extensions/eval_inspect.rb +4 -11
  127. data/lib/sequel/extensions/freeze_datasets.rb +1 -69
  128. data/lib/sequel/extensions/from_block.rb +1 -35
  129. data/lib/sequel/extensions/graph_each.rb +2 -2
  130. data/lib/sequel/extensions/identifier_mangling.rb +9 -19
  131. data/lib/sequel/extensions/implicit_subquery.rb +2 -2
  132. data/lib/sequel/extensions/inflector.rb +4 -4
  133. data/lib/sequel/extensions/migration.rb +23 -40
  134. data/lib/sequel/extensions/no_auto_literal_strings.rb +2 -84
  135. data/lib/sequel/extensions/null_dataset.rb +2 -8
  136. data/lib/sequel/extensions/pagination.rb +1 -17
  137. data/lib/sequel/extensions/pg_array.rb +20 -189
  138. data/lib/sequel/extensions/pg_hstore.rb +11 -50
  139. data/lib/sequel/extensions/pg_hstore_ops.rb +2 -2
  140. data/lib/sequel/extensions/pg_inet.rb +2 -15
  141. data/lib/sequel/extensions/pg_interval.rb +1 -20
  142. data/lib/sequel/extensions/pg_json.rb +7 -27
  143. data/lib/sequel/extensions/pg_loose_count.rb +1 -1
  144. data/lib/sequel/extensions/pg_range.rb +6 -121
  145. data/lib/sequel/extensions/pg_range_ops.rb +1 -3
  146. data/lib/sequel/extensions/pg_row.rb +5 -77
  147. data/lib/sequel/extensions/pg_row_ops.rb +2 -13
  148. data/lib/sequel/extensions/query.rb +3 -4
  149. data/lib/sequel/extensions/round_timestamps.rb +0 -6
  150. data/lib/sequel/extensions/schema_dumper.rb +13 -13
  151. data/lib/sequel/extensions/select_remove.rb +3 -3
  152. data/lib/sequel/extensions/split_array_nil.rb +2 -2
  153. data/lib/sequel/extensions/sql_comments.rb +2 -2
  154. data/lib/sequel/extensions/string_agg.rb +11 -8
  155. data/lib/sequel/extensions/symbol_aref.rb +6 -20
  156. data/lib/sequel/model.rb +27 -62
  157. data/lib/sequel/model/associations.rb +128 -131
  158. data/lib/sequel/model/base.rb +171 -711
  159. data/lib/sequel/model/default_inflections.rb +1 -1
  160. data/lib/sequel/model/errors.rb +0 -3
  161. data/lib/sequel/model/exceptions.rb +2 -6
  162. data/lib/sequel/model/inflections.rb +1 -26
  163. data/lib/sequel/model/plugins.rb +1 -0
  164. data/lib/sequel/plugins/active_model.rb +2 -5
  165. data/lib/sequel/plugins/association_dependencies.rb +15 -15
  166. data/lib/sequel/plugins/association_pks.rb +14 -28
  167. data/lib/sequel/plugins/association_proxies.rb +6 -7
  168. data/lib/sequel/plugins/auto_validations.rb +4 -4
  169. data/lib/sequel/plugins/before_after_save.rb +0 -43
  170. data/lib/sequel/plugins/blacklist_security.rb +9 -8
  171. data/lib/sequel/plugins/boolean_readers.rb +3 -3
  172. data/lib/sequel/plugins/boolean_subsets.rb +2 -2
  173. data/lib/sequel/plugins/caching.rb +5 -5
  174. data/lib/sequel/plugins/class_table_inheritance.rb +71 -102
  175. data/lib/sequel/plugins/column_conflicts.rb +2 -2
  176. data/lib/sequel/plugins/column_select.rb +2 -2
  177. data/lib/sequel/plugins/composition.rb +15 -24
  178. data/lib/sequel/plugins/constraint_validations.rb +4 -3
  179. data/lib/sequel/plugins/csv_serializer.rb +13 -20
  180. data/lib/sequel/plugins/dataset_associations.rb +2 -2
  181. data/lib/sequel/plugins/def_dataset_method.rb +5 -5
  182. data/lib/sequel/plugins/defaults_setter.rb +1 -1
  183. data/lib/sequel/plugins/delay_add_association.rb +1 -1
  184. data/lib/sequel/plugins/finder.rb +16 -10
  185. data/lib/sequel/plugins/force_encoding.rb +1 -7
  186. data/lib/sequel/plugins/hook_class_methods.rb +4 -106
  187. data/lib/sequel/plugins/input_transformer.rb +10 -11
  188. data/lib/sequel/plugins/insert_returning_select.rb +1 -9
  189. data/lib/sequel/plugins/instance_filters.rb +5 -5
  190. data/lib/sequel/plugins/instance_hooks.rb +7 -52
  191. data/lib/sequel/plugins/inverted_subsets.rb +3 -1
  192. data/lib/sequel/plugins/json_serializer.rb +19 -19
  193. data/lib/sequel/plugins/lazy_attributes.rb +1 -10
  194. data/lib/sequel/plugins/list.rb +6 -6
  195. data/lib/sequel/plugins/many_through_many.rb +11 -8
  196. data/lib/sequel/plugins/mssql_optimistic_locking.rb +3 -3
  197. data/lib/sequel/plugins/nested_attributes.rb +18 -31
  198. data/lib/sequel/plugins/optimistic_locking.rb +3 -3
  199. data/lib/sequel/plugins/pg_array_associations.rb +8 -2
  200. data/lib/sequel/plugins/pg_row.rb +2 -11
  201. data/lib/sequel/plugins/prepared_statements.rb +13 -66
  202. data/lib/sequel/plugins/prepared_statements_safe.rb +1 -1
  203. data/lib/sequel/plugins/rcte_tree.rb +7 -7
  204. data/lib/sequel/plugins/serialization.rb +15 -33
  205. data/lib/sequel/plugins/serialization_modification_detection.rb +1 -1
  206. data/lib/sequel/plugins/sharding.rb +2 -8
  207. data/lib/sequel/plugins/single_table_inheritance.rb +10 -13
  208. data/lib/sequel/plugins/skip_create_refresh.rb +3 -3
  209. data/lib/sequel/plugins/static_cache.rb +8 -9
  210. data/lib/sequel/plugins/string_stripper.rb +3 -3
  211. data/lib/sequel/plugins/subclasses.rb +1 -1
  212. data/lib/sequel/plugins/subset_conditions.rb +2 -2
  213. data/lib/sequel/plugins/table_select.rb +2 -2
  214. data/lib/sequel/plugins/tactical_eager_loading.rb +4 -4
  215. data/lib/sequel/plugins/timestamps.rb +6 -7
  216. data/lib/sequel/plugins/touch.rb +4 -8
  217. data/lib/sequel/plugins/tree.rb +3 -3
  218. data/lib/sequel/plugins/typecast_on_load.rb +2 -2
  219. data/lib/sequel/plugins/unlimited_update.rb +1 -7
  220. data/lib/sequel/plugins/update_or_create.rb +3 -3
  221. data/lib/sequel/plugins/update_refresh.rb +3 -3
  222. data/lib/sequel/plugins/uuid.rb +7 -11
  223. data/lib/sequel/plugins/validation_class_methods.rb +10 -9
  224. data/lib/sequel/plugins/validation_contexts.rb +4 -4
  225. data/lib/sequel/plugins/validation_helpers.rb +26 -25
  226. data/lib/sequel/plugins/whitelist_security.rb +13 -9
  227. data/lib/sequel/plugins/xml_serializer.rb +24 -25
  228. data/lib/sequel/sql.rb +145 -276
  229. data/lib/sequel/timezones.rb +8 -22
  230. data/lib/sequel/version.rb +2 -2
  231. data/spec/adapter_spec.rb +1 -1
  232. data/spec/adapters/db2_spec.rb +2 -103
  233. data/spec/adapters/mssql_spec.rb +89 -68
  234. data/spec/adapters/mysql_spec.rb +101 -480
  235. data/spec/adapters/oracle_spec.rb +1 -9
  236. data/spec/adapters/postgres_spec.rb +312 -565
  237. data/spec/adapters/spec_helper.rb +12 -31
  238. data/spec/adapters/sqlanywhere_spec.rb +2 -77
  239. data/spec/adapters/sqlite_spec.rb +8 -146
  240. data/spec/bin_spec.rb +11 -16
  241. data/spec/core/connection_pool_spec.rb +173 -74
  242. data/spec/core/database_spec.rb +64 -244
  243. data/spec/core/dataset_spec.rb +81 -415
  244. data/spec/core/deprecated_spec.rb +3 -3
  245. data/spec/core/expression_filters_spec.rb +37 -144
  246. data/spec/core/mock_adapter_spec.rb +176 -4
  247. data/spec/core/object_graph_spec.rb +11 -60
  248. data/spec/core/placeholder_literalizer_spec.rb +1 -14
  249. data/spec/core/schema_generator_spec.rb +51 -40
  250. data/spec/core/schema_spec.rb +74 -77
  251. data/spec/core/spec_helper.rb +6 -24
  252. data/spec/core/version_spec.rb +1 -1
  253. data/spec/core_extensions_spec.rb +7 -83
  254. data/spec/core_model_spec.rb +2 -2
  255. data/spec/deprecation_helper.rb +2 -14
  256. data/spec/extensions/accessed_columns_spec.rb +1 -1
  257. data/spec/extensions/active_model_spec.rb +3 -3
  258. data/spec/extensions/after_initialize_spec.rb +1 -1
  259. data/spec/extensions/arbitrary_servers_spec.rb +2 -2
  260. data/spec/extensions/association_dependencies_spec.rb +1 -1
  261. data/spec/extensions/association_pks_spec.rb +4 -59
  262. data/spec/extensions/association_proxies_spec.rb +1 -1
  263. data/spec/extensions/auto_literal_strings_spec.rb +1 -12
  264. data/spec/extensions/auto_validations_spec.rb +1 -1
  265. data/spec/extensions/blacklist_security_spec.rb +1 -1
  266. data/spec/extensions/blank_spec.rb +1 -1
  267. data/spec/extensions/boolean_readers_spec.rb +1 -1
  268. data/spec/extensions/boolean_subsets_spec.rb +1 -1
  269. data/spec/extensions/caching_spec.rb +1 -1
  270. data/spec/extensions/class_table_inheritance_spec.rb +35 -1086
  271. data/spec/extensions/column_conflicts_spec.rb +1 -1
  272. data/spec/extensions/column_select_spec.rb +4 -4
  273. data/spec/extensions/columns_introspection_spec.rb +1 -1
  274. data/spec/extensions/columns_updated_spec.rb +1 -1
  275. data/spec/extensions/composition_spec.rb +1 -7
  276. data/spec/extensions/connection_expiration_spec.rb +3 -3
  277. data/spec/extensions/connection_validator_spec.rb +3 -3
  278. data/spec/extensions/constraint_validations_plugin_spec.rb +1 -1
  279. data/spec/extensions/constraint_validations_spec.rb +1 -1
  280. data/spec/extensions/core_refinements_spec.rb +1 -3
  281. data/spec/extensions/csv_serializer_spec.rb +4 -9
  282. data/spec/extensions/current_datetime_timestamp_spec.rb +1 -1
  283. data/spec/extensions/dataset_associations_spec.rb +2 -1
  284. data/spec/extensions/dataset_source_alias_spec.rb +1 -1
  285. data/spec/extensions/date_arithmetic_spec.rb +3 -3
  286. data/spec/extensions/def_dataset_method_spec.rb +1 -1
  287. data/spec/extensions/defaults_setter_spec.rb +2 -2
  288. data/spec/extensions/delay_add_association_spec.rb +8 -9
  289. data/spec/extensions/dirty_spec.rb +1 -1
  290. data/spec/extensions/duplicate_columns_handler_spec.rb +1 -1
  291. data/spec/extensions/eager_each_spec.rb +2 -2
  292. data/spec/extensions/empty_array_consider_nulls_spec.rb +1 -1
  293. data/spec/extensions/error_splitter_spec.rb +1 -1
  294. data/spec/extensions/error_sql_spec.rb +1 -1
  295. data/spec/extensions/eval_inspect_spec.rb +1 -1
  296. data/spec/extensions/finder_spec.rb +1 -1
  297. data/spec/extensions/force_encoding_spec.rb +2 -5
  298. data/spec/extensions/freeze_datasets_spec.rb +1 -1
  299. data/spec/extensions/graph_each_spec.rb +5 -5
  300. data/spec/extensions/hook_class_methods_spec.rb +1 -194
  301. data/spec/extensions/identifier_mangling_spec.rb +17 -170
  302. data/spec/extensions/implicit_subquery_spec.rb +1 -5
  303. data/spec/extensions/inflector_spec.rb +1 -1
  304. data/spec/extensions/input_transformer_spec.rb +7 -2
  305. data/spec/extensions/insert_returning_select_spec.rb +1 -1
  306. data/spec/extensions/instance_filters_spec.rb +1 -1
  307. data/spec/extensions/instance_hooks_spec.rb +1 -95
  308. data/spec/extensions/inverted_subsets_spec.rb +1 -1
  309. data/spec/extensions/json_serializer_spec.rb +1 -1
  310. data/spec/extensions/lazy_attributes_spec.rb +1 -7
  311. data/spec/extensions/list_spec.rb +1 -1
  312. data/spec/extensions/looser_typecasting_spec.rb +1 -1
  313. data/spec/extensions/many_through_many_spec.rb +1 -1
  314. data/spec/extensions/migration_spec.rb +2 -2
  315. data/spec/extensions/modification_detection_spec.rb +1 -1
  316. data/spec/extensions/mssql_optimistic_locking_spec.rb +1 -1
  317. data/spec/extensions/named_timezones_spec.rb +3 -3
  318. data/spec/extensions/nested_attributes_spec.rb +1 -29
  319. data/spec/extensions/null_dataset_spec.rb +1 -11
  320. data/spec/extensions/optimistic_locking_spec.rb +1 -1
  321. data/spec/extensions/pagination_spec.rb +1 -1
  322. data/spec/extensions/pg_array_associations_spec.rb +4 -1
  323. data/spec/extensions/pg_array_ops_spec.rb +1 -1
  324. data/spec/extensions/pg_array_spec.rb +3 -48
  325. data/spec/extensions/pg_enum_spec.rb +1 -1
  326. data/spec/extensions/pg_hstore_ops_spec.rb +1 -1
  327. data/spec/extensions/pg_hstore_spec.rb +23 -32
  328. data/spec/extensions/pg_inet_ops_spec.rb +1 -1
  329. data/spec/extensions/pg_inet_spec.rb +1 -14
  330. data/spec/extensions/pg_interval_spec.rb +3 -13
  331. data/spec/extensions/pg_json_ops_spec.rb +1 -1
  332. data/spec/extensions/pg_json_spec.rb +1 -13
  333. data/spec/extensions/pg_loose_count_spec.rb +1 -1
  334. data/spec/extensions/pg_range_ops_spec.rb +1 -1
  335. data/spec/extensions/pg_range_spec.rb +3 -88
  336. data/spec/extensions/pg_row_ops_spec.rb +1 -1
  337. data/spec/extensions/pg_row_plugin_spec.rb +1 -1
  338. data/spec/extensions/pg_row_spec.rb +1 -44
  339. data/spec/extensions/pg_static_cache_updater_spec.rb +1 -1
  340. data/spec/extensions/prepared_statements_safe_spec.rb +1 -1
  341. data/spec/extensions/prepared_statements_spec.rb +13 -48
  342. data/spec/extensions/pretty_table_spec.rb +1 -1
  343. data/spec/extensions/query_spec.rb +1 -12
  344. data/spec/extensions/rcte_tree_spec.rb +1 -1
  345. data/spec/extensions/round_timestamps_spec.rb +1 -5
  346. data/spec/extensions/s_spec.rb +1 -1
  347. data/spec/extensions/schema_caching_spec.rb +1 -1
  348. data/spec/extensions/schema_dumper_spec.rb +1 -1
  349. data/spec/extensions/select_remove_spec.rb +1 -1
  350. data/spec/extensions/sequel_4_dataset_methods_spec.rb +1 -1
  351. data/spec/extensions/serialization_modification_detection_spec.rb +1 -1
  352. data/spec/extensions/serialization_spec.rb +2 -14
  353. data/spec/extensions/server_block_spec.rb +1 -1
  354. data/spec/extensions/server_logging_spec.rb +2 -2
  355. data/spec/extensions/sharding_spec.rb +1 -1
  356. data/spec/extensions/shared_caching_spec.rb +1 -28
  357. data/spec/extensions/single_table_inheritance_spec.rb +2 -5
  358. data/spec/extensions/singular_table_names_spec.rb +1 -1
  359. data/spec/extensions/skip_create_refresh_spec.rb +1 -1
  360. data/spec/extensions/spec_helper.rb +5 -27
  361. data/spec/extensions/split_array_nil_spec.rb +1 -1
  362. data/spec/extensions/split_values_spec.rb +1 -1
  363. data/spec/extensions/sql_comments_spec.rb +1 -1
  364. data/spec/extensions/sql_expr_spec.rb +1 -1
  365. data/spec/extensions/static_cache_spec.rb +1 -1
  366. data/spec/extensions/string_agg_spec.rb +2 -2
  367. data/spec/extensions/string_date_time_spec.rb +1 -1
  368. data/spec/extensions/string_stripper_spec.rb +1 -1
  369. data/spec/extensions/subclasses_spec.rb +1 -1
  370. data/spec/extensions/subset_conditions_spec.rb +1 -1
  371. data/spec/extensions/symbol_aref_refinement_spec.rb +1 -1
  372. data/spec/extensions/symbol_as_refinement_spec.rb +1 -1
  373. data/spec/extensions/table_select_spec.rb +4 -4
  374. data/spec/extensions/tactical_eager_loading_spec.rb +1 -6
  375. data/spec/extensions/thread_local_timezones_spec.rb +1 -1
  376. data/spec/extensions/timestamps_spec.rb +3 -3
  377. data/spec/extensions/to_dot_spec.rb +1 -1
  378. data/spec/extensions/touch_spec.rb +1 -1
  379. data/spec/extensions/tree_spec.rb +1 -1
  380. data/spec/extensions/typecast_on_load_spec.rb +1 -1
  381. data/spec/extensions/unlimited_update_spec.rb +1 -1
  382. data/spec/extensions/update_or_create_spec.rb +1 -1
  383. data/spec/extensions/update_primary_key_spec.rb +4 -3
  384. data/spec/extensions/update_refresh_spec.rb +1 -1
  385. data/spec/extensions/uuid_spec.rb +10 -12
  386. data/spec/extensions/validate_associated_spec.rb +1 -1
  387. data/spec/extensions/validation_class_methods_spec.rb +3 -3
  388. data/spec/extensions/validation_contexts_spec.rb +1 -1
  389. data/spec/extensions/validation_helpers_spec.rb +10 -44
  390. data/spec/extensions/whitelist_security_spec.rb +5 -5
  391. data/spec/extensions/xml_serializer_spec.rb +3 -3
  392. data/spec/guards_helper.rb +2 -1
  393. data/spec/integration/associations_test.rb +1 -23
  394. data/spec/integration/database_test.rb +7 -7
  395. data/spec/integration/dataset_test.rb +5 -47
  396. data/spec/integration/eager_loader_test.rb +1 -1
  397. data/spec/integration/migrator_test.rb +1 -1
  398. data/spec/integration/model_test.rb +4 -82
  399. data/spec/integration/plugin_test.rb +6 -22
  400. data/spec/integration/prepared_statement_test.rb +8 -88
  401. data/spec/integration/schema_test.rb +6 -6
  402. data/spec/integration/spec_helper.rb +13 -21
  403. data/spec/integration/timezone_test.rb +5 -5
  404. data/spec/integration/transaction_test.rb +3 -55
  405. data/spec/integration/type_test.rb +9 -9
  406. data/spec/model/association_reflection_spec.rb +24 -9
  407. data/spec/model/associations_spec.rb +124 -303
  408. data/spec/model/base_spec.rb +18 -137
  409. data/spec/model/class_dataset_methods_spec.rb +2 -20
  410. data/spec/model/dataset_methods_spec.rb +1 -20
  411. data/spec/model/eager_loading_spec.rb +17 -11
  412. data/spec/model/hooks_spec.rb +5 -300
  413. data/spec/model/inflector_spec.rb +1 -1
  414. data/spec/model/model_spec.rb +15 -320
  415. data/spec/model/plugins_spec.rb +2 -16
  416. data/spec/model/record_spec.rb +29 -121
  417. data/spec/model/spec_helper.rb +5 -15
  418. data/spec/model/validations_spec.rb +1 -1
  419. data/spec/sequel_warning.rb +1 -12
  420. metadata +8 -64
  421. data/doc/active_record.rdoc +0 -927
  422. data/lib/sequel/adapters/cubrid.rb +0 -160
  423. data/lib/sequel/adapters/do.rb +0 -166
  424. data/lib/sequel/adapters/do/mysql.rb +0 -69
  425. data/lib/sequel/adapters/do/postgres.rb +0 -46
  426. data/lib/sequel/adapters/do/sqlite3.rb +0 -41
  427. data/lib/sequel/adapters/jdbc/as400.rb +0 -92
  428. data/lib/sequel/adapters/jdbc/cubrid.rb +0 -65
  429. data/lib/sequel/adapters/jdbc/firebirdsql.rb +0 -37
  430. data/lib/sequel/adapters/jdbc/informix-sqli.rb +0 -34
  431. data/lib/sequel/adapters/jdbc/jdbcprogress.rb +0 -34
  432. data/lib/sequel/adapters/odbc/progress.rb +0 -12
  433. data/lib/sequel/adapters/shared/cubrid.rb +0 -245
  434. data/lib/sequel/adapters/shared/firebird.rb +0 -261
  435. data/lib/sequel/adapters/shared/informix.rb +0 -63
  436. data/lib/sequel/adapters/shared/progress.rb +0 -40
  437. data/lib/sequel/adapters/swift.rb +0 -169
  438. data/lib/sequel/adapters/swift/mysql.rb +0 -50
  439. data/lib/sequel/adapters/swift/postgres.rb +0 -49
  440. data/lib/sequel/adapters/swift/sqlite.rb +0 -48
  441. data/lib/sequel/adapters/utils/pg_types.rb +0 -4
  442. data/lib/sequel/dataset/mutation.rb +0 -98
  443. data/lib/sequel/extensions/_deprecated_identifier_mangling.rb +0 -117
  444. data/lib/sequel/extensions/empty_array_ignore_nulls.rb +0 -8
  445. data/lib/sequel/extensions/filter_having.rb +0 -65
  446. data/lib/sequel/extensions/hash_aliases.rb +0 -51
  447. data/lib/sequel/extensions/meta_def.rb +0 -37
  448. data/lib/sequel/extensions/query_literals.rb +0 -86
  449. data/lib/sequel/extensions/ruby18_symbol_extensions.rb +0 -26
  450. data/lib/sequel/extensions/sequel_3_dataset_methods.rb +0 -133
  451. data/lib/sequel/extensions/set_overrides.rb +0 -82
  452. data/lib/sequel/no_core_ext.rb +0 -4
  453. data/lib/sequel/plugins/association_autoreloading.rb +0 -11
  454. data/lib/sequel/plugins/identifier_columns.rb +0 -49
  455. data/lib/sequel/plugins/many_to_one_pk_lookup.rb +0 -11
  456. data/lib/sequel/plugins/pg_typecast_on_load.rb +0 -90
  457. data/lib/sequel/plugins/prepared_statements_associations.rb +0 -137
  458. data/lib/sequel/plugins/prepared_statements_with_pk.rb +0 -71
  459. data/lib/sequel/plugins/schema.rb +0 -84
  460. data/lib/sequel/plugins/scissors.rb +0 -37
  461. data/spec/core/dataset_mutation_spec.rb +0 -253
  462. data/spec/extensions/_deprecated_identifier_mangling_spec.rb +0 -314
  463. data/spec/extensions/before_after_save_spec.rb +0 -40
  464. data/spec/extensions/filter_having_spec.rb +0 -42
  465. data/spec/extensions/from_block_spec.rb +0 -21
  466. data/spec/extensions/hash_aliases_spec.rb +0 -26
  467. data/spec/extensions/identifier_columns_spec.rb +0 -19
  468. data/spec/extensions/meta_def_spec.rb +0 -35
  469. data/spec/extensions/no_auto_literal_strings_spec.rb +0 -69
  470. data/spec/extensions/pg_typecast_on_load_spec.rb +0 -70
  471. data/spec/extensions/prepared_statements_associations_spec.rb +0 -212
  472. data/spec/extensions/prepared_statements_with_pk_spec.rb +0 -40
  473. data/spec/extensions/query_literals_spec.rb +0 -185
  474. data/spec/extensions/schema_spec.rb +0 -123
  475. data/spec/extensions/scissors_spec.rb +0 -27
  476. data/spec/extensions/sequel_3_dataset_methods_spec.rb +0 -118
  477. 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 "Model attribute setters" do
4
4
  before do
@@ -118,72 +118,6 @@ describe Sequel::Model, "implicit table names" do
118
118
  end
119
119
  end
120
120
 
121
- describe Sequel::Model, ".def_dataset_method" do
122
- before do
123
- @c = Class.new(Sequel::Model(:items))
124
- end
125
-
126
- deprecated "should add a method to the dataset and model if called with a block argument" do
127
- @c.def_dataset_method(:return_3){3}
128
- @c.return_3.must_equal 3
129
- @c.dataset.return_3.must_equal 3
130
- end
131
-
132
- deprecated "should handle weird method names" do
133
- @c.def_dataset_method(:"return 3"){3}
134
- @c.send(:"return 3").must_equal 3
135
- @c.dataset.send(:"return 3").must_equal 3
136
- end
137
-
138
- deprecated "should not add a model method if the model already responds to the method" do
139
- @c.instance_eval do
140
- def foo
141
- 1
142
- end
143
-
144
- private
145
-
146
- def bar
147
- 2
148
- end
149
-
150
- def_dataset_method(:foo){3}
151
- def_dataset_method(:bar){4}
152
- end
153
- @c.foo.must_equal 1
154
- @c.dataset.foo.must_equal 3
155
- @c.send(:bar).must_equal 2
156
- @c.dataset.bar.must_equal 4
157
- end
158
-
159
- deprecated "should add all passed methods to the model if called without a block argument" do
160
- @c.def_dataset_method(:return_3, :return_4)
161
- proc{@c.return_3}.must_raise(NoMethodError)
162
- proc{@c.return_4}.must_raise(NoMethodError)
163
- @c.dataset = @c.dataset.with_extend do
164
- def return_3; 3; end
165
- def return_4; 4; end
166
- end
167
- @c.return_3.must_equal 3
168
- @c.return_4.must_equal 4
169
- end
170
-
171
- deprecated "should cache calls and readd methods if set_dataset is used" do
172
- @c.def_dataset_method(:return_3){3}
173
- @c.set_dataset :items
174
- @c.return_3.must_equal 3
175
- @c.dataset.return_3.must_equal 3
176
- end
177
-
178
- deprecated "should readd methods to subclasses, if set_dataset is used in a subclass" do
179
- @c.def_dataset_method(:return_3){3}
180
- c = Class.new(@c)
181
- c.set_dataset :items
182
- c.return_3.must_equal 3
183
- c.dataset.return_3.must_equal 3
184
- end
185
- end
186
-
187
121
  describe Sequel::Model, ".dataset_module" do
188
122
  before do
189
123
  @c = Class.new(Sequel::Model(:items))
@@ -209,6 +143,11 @@ describe Sequel::Model, ".dataset_module" do
209
143
  @c.return_3.must_equal 3
210
144
  end
211
145
 
146
+ it "should add methods that can't be called with normal method syntax as class methods" do
147
+ @c.dataset_module.module_eval{define_method(:'return 3'){3}}
148
+ @c.send(:'return 3').must_equal 3
149
+ end
150
+
212
151
  it "should not add private or protected methods defined in the module to the class" do
213
152
  @c.dataset_module{private; def return_3() 3 end}
214
153
  @c.dataset_module{protected; def return_4() 4 end}
@@ -565,59 +504,21 @@ describe "Model.db=" do
565
504
  before do
566
505
  @db1 = Sequel.mock
567
506
  @db2 = Sequel.mock
568
-
569
- @m = Class.new(Sequel::Model(@db1[:blue].filter(:x=>1)))
507
+ @m = Class.new(Sequel::Model(@db1))
570
508
  end
571
509
 
572
- deprecated "should affect the underlying dataset" do
510
+ it "should change database for model" do
573
511
  @m.db = @db2
574
-
575
- @m.dataset.db.must_equal @db2
576
- @m.dataset.db.wont_equal @db1
512
+ @m.db.must_equal @db2
577
513
  end
578
514
 
579
- deprecated "should keep the same dataset options" do
580
- @m.db = @db2
581
- @m.dataset.sql.must_equal 'SELECT * FROM blue WHERE (x = 1)'
515
+ it "should raise Error for model with existing dataset" do
516
+ @m.dataset = :table
517
+ proc{@m.db = @db2}.must_raise Sequel::Error
582
518
  end
583
519
 
584
520
  it "should use the database for subclasses" do
585
- @m = Class.new(Sequel::Model)
586
- @m.db = @db2
587
- Class.new(@m).db.must_equal @db2
588
- end
589
- end
590
-
591
- describe Sequel::Model, ".allowed_columns " do
592
- before do
593
- @c = Class.new(Sequel::Model(:blahblah)) do
594
- columns :x, :y, :z
595
- end
596
- @c.strict_param_setting = false
597
- @c.instance_variable_set(:@columns, [:x, :y, :z])
598
- DB.reset
599
- end
600
-
601
- deprecated "should set the allowed columns correctly" do
602
- @c.allowed_columns.must_be_nil
603
- @c.set_allowed_columns :x
604
- @c.allowed_columns.must_equal [:x]
605
- @c.set_allowed_columns :x, :y
606
- @c.allowed_columns.must_equal [:x, :y]
607
- end
608
-
609
- deprecated "should only set allowed columns by default" do
610
- @c.set_allowed_columns :x, :y
611
- i = @c.new(:x => 1, :y => 2, :z => 3)
612
- i.values.must_equal(:x => 1, :y => 2)
613
- i.set(:x => 4, :y => 5, :z => 6)
614
- i.values.must_equal(:x => 4, :y => 5)
615
-
616
- @c.dataset = @c.dataset.with_fetch(:x => 7)
617
- i = @c.new
618
- i.update(:x => 7, :z => 9)
619
- i.values.must_equal(:x => 7)
620
- DB.sqls.must_equal ["INSERT INTO blahblah (x) VALUES (7)", "SELECT * FROM blahblah WHERE id = 10"]
521
+ Class.new(@m).db.must_equal @db1
621
522
  end
622
523
  end
623
524
 
@@ -676,13 +577,6 @@ describe Sequel::Model, ".strict_param_setting" do
676
577
  c = @c.new
677
578
  proc{c.set(:a=>1)}.must_raise(Sequel::MassAssignmentRestriction)
678
579
  proc{c.update(:a=>1)}.must_raise(Sequel::MassAssignmentRestriction)
679
- deprecated do
680
- @c.set_allowed_columns :x, :y
681
- proc{c.set_all(:use_after_commit_rollback => false)}.must_raise(Sequel::MassAssignmentRestriction)
682
- proc{c.set_only({:x=>1}, :y)}.must_raise(Sequel::MassAssignmentRestriction)
683
- proc{c.update_all(:use_after_commit_rollback=>false)}.must_raise(Sequel::MassAssignmentRestriction)
684
- proc{c.update_only({:x=>1}, :y)}.must_raise(Sequel::MassAssignmentRestriction)
685
- end
686
580
  end
687
581
 
688
582
  it "should be disabled by strict_param_setting = false" do
@@ -835,16 +729,10 @@ describe "Model datasets #with_pk with #with_pk!" do
835
729
  it "should handle an array for composite primary keys" do
836
730
  @c.set_primary_key [:id1, :id2]
837
731
  @ds.with_pk([1, 2])
838
- sqls = DB.sqls
839
- ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
840
- "SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
841
- sqls.must_equal []
732
+ DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
842
733
 
843
734
  @ds.with_pk!([1, 2])
844
- sqls = DB.sqls
845
- ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
846
- "SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
847
- sqls.must_equal []
735
+ DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
848
736
  end
849
737
 
850
738
  it "should work with composite primary keys when called repeatedly on a frozen dataset with" do
@@ -852,10 +740,7 @@ describe "Model datasets #with_pk with #with_pk!" do
852
740
  @ds.freeze
853
741
  5.times do
854
742
  @ds.with_pk([1,2])
855
- sqls = DB.sqls
856
- ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1",
857
- "SELECT * FROM a WHERE ((a.id2 = 2) AND (a.id1 = 1)) LIMIT 1"].must_include(sqls.pop)
858
- sqls.must_equal []
743
+ DB.sqls.must_equal ["SELECT * FROM a WHERE ((a.id1 = 1) AND (a.id2 = 2)) LIMIT 1"]
859
744
  end
860
745
  end
861
746
 
@@ -880,11 +765,6 @@ describe "Model datasets #with_pk with #with_pk!" do
880
765
  DB.sqls.must_equal ["SELECT * FROM a WHERE (a.id = 1) LIMIT 1"]
881
766
  end
882
767
 
883
- deprecated "should not have #[] consider a string as a primary key lookup" do
884
- @ds['foo'].must_equal @c.load(:id=>1)
885
- DB.sqls.must_equal ["SELECT * FROM a WHERE (foo) LIMIT 1"]
886
- end
887
-
888
768
  it "should not have #[] consider a literal string as a primary key lookup" do
889
769
  @ds[Sequel.lit('foo')].must_equal @c.load(:id=>1)
890
770
  DB.sqls.must_equal ["SELECT * FROM a WHERE (foo) LIMIT 1"]
@@ -906,6 +786,7 @@ describe "Model::include" do
906
786
  including_class = Class.new(Sequel::Model(:items)) do
907
787
  include(mod1, mod2)
908
788
  end
909
- including_class.included_modules.must_include(mod1, mod2)
789
+ including_class.included_modules.must_include(mod1)
790
+ including_class.included_modules.must_include(mod2)
910
791
  end
911
792
  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::Model, "class dataset methods" do
4
4
  before do
@@ -9,10 +9,6 @@ describe Sequel::Model, "class dataset methods" do
9
9
  end
10
10
 
11
11
  it "should call the dataset method of the same name with the same args" do
12
- deprecated do
13
- @c.<<({}).must_equal @d
14
- end
15
- @db.sqls.must_equal ["INSERT INTO items DEFAULT VALUES"]
16
12
  @c.all.must_equal [@c.load(:id=>1)]
17
13
  @db.sqls.must_equal ["SELECT * FROM items"]
18
14
  @c.avg(:id).must_equal 1
@@ -29,9 +25,6 @@ describe Sequel::Model, "class dataset methods" do
29
25
  @c.except(@d, :from_self=>false).sql.must_equal "SELECT * FROM items EXCEPT SELECT * FROM items"
30
26
  @c.exclude(:a).sql.must_equal "SELECT * FROM items WHERE NOT a"
31
27
  @c.exclude_having(:a).sql.must_equal "SELECT * FROM items HAVING NOT a"
32
- deprecated do
33
- @c.exclude_where(:a).sql.must_equal "SELECT * FROM items WHERE NOT a"
34
- end
35
28
  @c.fetch_rows("S"){|r| r.must_equal(:id=>1)}
36
29
  @db.sqls.must_equal ["S"]
37
30
  @c.filter(:a).sql.must_equal "SELECT * FROM items WHERE a"
@@ -57,13 +50,9 @@ describe Sequel::Model, "class dataset methods" do
57
50
  @c.import([:id], [[1]])
58
51
  @db.sqls.must_equal ["BEGIN", "INSERT INTO items (id) VALUES (1)", "COMMIT"]
59
52
  @c.inner_join(@c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
60
- @c.insert.must_equal 2
53
+ @c.insert.must_equal 1
61
54
  @db.sqls.must_equal ["INSERT INTO items DEFAULT VALUES"]
62
55
  @c.intersect(@d, :from_self=>false).sql.must_equal "SELECT * FROM items INTERSECT SELECT * FROM items"
63
- deprecated do
64
- @c.interval(:id).must_equal 1
65
- end
66
- @db.sqls.must_equal ["SELECT (max(id) - min(id)) AS interval FROM items LIMIT 1"]
67
56
  @c.join(@c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
68
57
  @c.join_table(:inner, @c.table_name).sql.must_equal "SELECT * FROM items INNER JOIN items"
69
58
  @c.last.must_equal @c.load(:id=>1)
@@ -109,9 +98,6 @@ describe Sequel::Model, "class dataset methods" do
109
98
  @c.select_order_map(:id).must_equal [1]
110
99
  @db.sqls.must_equal ["SELECT id FROM items ORDER BY id"]
111
100
  @c.server(:a).opts[:server].must_equal :a
112
- deprecated do
113
- @c.set_graph_aliases(:a=>:b).opts[:graph_aliases].must_equal(:a=>[:b, :a])
114
- end
115
101
  @c.single_record.must_equal @c.load(:id=>1)
116
102
  @db.sqls.must_equal ["SELECT * FROM items LIMIT 1"]
117
103
  @c.single_record!.must_equal @c.load(:id=>1)
@@ -148,10 +134,6 @@ describe Sequel::Model, "class dataset methods" do
148
134
  sc.invert.sql.must_equal 'SELECT a FROM items WHERE NOT a GROUP BY a ORDER BY a LIMIT 2'
149
135
  sc.dataset = sc.dataset.with_fetch(:v1=>1, :v2=>2)
150
136
  @db.sqls
151
- deprecated do
152
- sc.range(:a).must_equal(1..2)
153
- end
154
- @db.sqls.must_equal ["SELECT min(a) AS v1, max(a) AS v2 FROM (SELECT a FROM items WHERE a GROUP BY a ORDER BY a LIMIT 2) AS t1 LIMIT 1"]
155
137
  sc.reverse.sql.must_equal 'SELECT a FROM items WHERE a GROUP BY a ORDER BY a DESC LIMIT 2'
156
138
  sc.reverse_order.sql.must_equal 'SELECT a FROM items WHERE a GROUP BY a ORDER BY a DESC LIMIT 2'
157
139
  sc.select_more(:a).sql.must_equal 'SELECT a, a FROM items WHERE a GROUP BY a ORDER BY a LIMIT 2'
@@ -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::DatasetMethods, "#destroy" do
4
4
  before do
@@ -86,24 +86,6 @@ describe Sequel::Model::DatasetMethods do
86
86
  @c.db.reset
87
87
  end
88
88
 
89
- deprecated "#join_table should allow use to use a model class when joining" do
90
- @c.join(Class.new(Sequel::Model(:categories)), :item_id => :id).sql.must_equal 'SELECT * FROM items INNER JOIN categories ON (categories.item_id = items.id)'
91
- end
92
-
93
- deprecated "#join_table should handle model classes that aren't simple selects using a subselect" do
94
- @c.join(Class.new(Sequel::Model(DB[:categories].where(:foo=>1))), :item_id => :id).sql.must_equal 'SELECT * FROM items INNER JOIN (SELECT * FROM categories WHERE (foo = 1)) AS t1 ON (t1.item_id = items.id)'
95
- end
96
-
97
- deprecated "#graph should allow use to use a model class when joining" do
98
- c = Class.new(Sequel::Model(:categories))
99
- c.columns :id
100
- @c.graph(c, :item_id => :id).sql.must_equal 'SELECT items.id, categories.id AS categories_id FROM items LEFT OUTER JOIN categories ON (categories.item_id = items.id)'
101
- end
102
-
103
- deprecated "#insert_sql should handle a single model instance as an argument" do
104
- @c.dataset.insert_sql(@c.load(:id=>1)).must_equal 'INSERT INTO items (id) VALUES (1)'
105
- end
106
-
107
89
  it "#first should handle no primary key" do
108
90
  @c.no_primary_key
109
91
  @c.first.must_be_kind_of(@c)
@@ -209,7 +191,6 @@ describe Sequel::Model::DatasetMethods, "#where_single_value" do
209
191
 
210
192
  it "should return single value" do
211
193
  5.times do
212
- a = []
213
194
  @c.only_id.where_single_value(:id=>1).must_equal 1
214
195
  @c.db.sqls.must_equal ['SELECT id FROM items WHERE (id = 1) LIMIT 1']
215
196
  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::Model, "#eager" do
4
4
  before do
@@ -1483,20 +1483,26 @@ describe Sequel::Model, "#eager_graph" do
1483
1483
  a.first.lgenre.must_equal sub.load(:id => 4)
1484
1484
  end
1485
1485
 
1486
- it "should correctly handle an aliased join table in many_to_many and one_through_one with conditions" do
1486
+ it "should correctly handle an aliased join table in many_to_many and one_through_one with graph_conditions or graph_block" do
1487
1487
  c = Class.new(GraphAlbum)
1488
- c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :conditions=>'true', :ignore_conditions_warning=> true
1489
- c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON (genres.id = ga.genre_id)'
1490
- c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :conditions=>'true', :graph_block => proc{true}
1491
- c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND \'t\')'
1488
+ c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :graph_conditions=>{:a=>:b}
1489
+ c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b))'
1490
+ c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :graph_block => proc{true}
1491
+ c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b) AND \'t\')'
1492
1492
  end
1493
1493
 
1494
- with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one with conditions" do
1494
+ with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one with graph_conditions or graph_block" do
1495
1495
  c = Class.new(GraphAlbum)
1496
- c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :conditions=>'true', :ignore_conditions_warning=> true
1497
- c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON (genres.id = ga.genre_id)'
1498
- c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :conditions=>'true', :graph_block => proc{true}
1499
- c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND \'t\')'
1496
+ c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :graph_conditions=>{:a=>:b}
1497
+ c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b))'
1498
+ c.many_to_many :genres, :clone=>:genres, :join_table=>:ag___ga, :graph_block => proc{true}
1499
+ c.eager_graph(:genres).sql.must_equal 'SELECT albums.id, albums.band_id, genres.id AS genres_id FROM albums LEFT OUTER JOIN ag AS ga ON (ga.album_id = albums.id) LEFT OUTER JOIN genres ON ((genres.id = ga.genre_id) AND (genres.a = ga.b) AND \'t\')'
1500
+ end
1501
+
1502
+ it "should raise Error when using eager_graph with :conditions option that isn't a conditions specifier" do
1503
+ c = Class.new(GraphAlbum)
1504
+ c.many_to_many :genres, :clone=>:genres, :join_table=>Sequel[:ag].as(:ga), :conditions=>'true'
1505
+ proc{c.eager_graph(:genres)}.must_raise Sequel::Error
1500
1506
  end
1501
1507
 
1502
1508
  with_symbol_splitting "should correctly handle an aliased join table symbol in many_to_many and one_through_one" 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 "Model#before_create && Model#after_create" do
4
4
  before do
@@ -17,14 +17,7 @@ describe "Model#before_create && Model#after_create" do
17
17
  it "should be called around new record creation" do
18
18
  @c.send(:define_method, :before_create){DB << "BLAH before"}
19
19
  @c.create(:x => 2)
20
- DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after', 'SELECT * FROM items WHERE x = 2']
21
- end
22
-
23
- deprecated ".create should cancel the save and raise an error if before_create returns false and raise_on_save_failure is true" do
24
- @c.send(:define_method, :before_create){false}
25
- proc{@c.create(:x => 2)}.must_raise(Sequel::HookFailed)
26
- DB.sqls.must_equal []
27
- @c.load(:id => 2233).save
20
+ DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'SELECT * FROM items WHERE x = 2', 'BLAH after']
28
21
  end
29
22
 
30
23
  it ".create should cancel the save and raise an error if before_create calls cancel_action and raise_on_save_failure is true" do
@@ -34,13 +27,6 @@ describe "Model#before_create && Model#after_create" do
34
27
  @c.load(:id => 2233).save
35
28
  end
36
29
 
37
- deprecated ".create should cancel the save and return nil if before_create returns false and raise_on_save_failure is false" do
38
- @c.send(:define_method, :before_create){false}
39
- @c.raise_on_save_failure = false
40
- @c.create(:x => 2).must_be_nil
41
- DB.sqls.must_equal []
42
- end
43
-
44
30
  it ".create should cancel the save and return nil if before_create calls cancel_action and raise_on_save_failure is false" do
45
31
  @c.send(:define_method, :before_create){cancel_action}
46
32
  @c.raise_on_save_failure = false
@@ -67,32 +53,12 @@ describe "Model#before_update && Model#after_update" do
67
53
  DB.sqls.must_equal ['BLAH before', 'UPDATE items SET x = 123 WHERE (id = 2233)', 'BLAH after']
68
54
  end
69
55
 
70
- deprecated "#save should cancel the save and raise an error if before_update returns false and raise_on_save_failure is true" do
71
- @c.send(:define_method, :before_update){false}
72
- proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
73
- DB.sqls.must_equal []
74
- end
75
-
76
56
  it "#save should cancel the save and raise an error if before_update calls cancel_action and raise_on_save_failure is true" do
77
57
  @c.send(:define_method, :before_update){cancel_action}
78
58
  proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
79
59
  DB.sqls.must_equal []
80
60
  end
81
61
 
82
- deprecated "#save should cancel the save and raise an error if before_update returns false and raise_on_failure option is true" do
83
- @c.send(:define_method, :before_update){false}
84
- @c.raise_on_save_failure = false
85
- proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
86
- DB.sqls.must_equal []
87
- end
88
-
89
- deprecated "#save should cancel the save and return nil if before_update returns false and raise_on_save_failure is false" do
90
- @c.send(:define_method, :before_update){false}
91
- @c.raise_on_save_failure = false
92
- @c.load(:id => 2233).save.must_be_nil
93
- DB.sqls.must_equal []
94
- end
95
-
96
62
  it "#save should cancel the save and return nil if before_update calls cancel_action and raise_on_save_failure is false" do
97
63
  @c.send(:define_method, :before_update){cancel_action}
98
64
  @c.raise_on_save_failure = false
@@ -124,20 +90,7 @@ describe "Model#before_save && Model#after_save" do
124
90
  @c.set_primary_key :x
125
91
  @c.unrestrict_primary_key
126
92
  @c.create(:x => 2)
127
- DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'BLAH after', 'SELECT * FROM items WHERE x = 2']
128
- end
129
-
130
- deprecated "#save should cancel the save and raise an error if before_save returns false and raise_on_save_failure is true" do
131
- @c.send(:define_method, :before_save){false}
132
- proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
133
- DB.sqls.must_equal []
134
- end
135
-
136
- deprecated "#save should cancel the save and raise an error if before_save returns false and raise_on_failure option is true" do
137
- @c.send(:define_method, :before_save){false}
138
- @c.raise_on_save_failure = false
139
- proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
140
- DB.sqls.must_equal []
93
+ DB.sqls.must_equal ['BLAH before', 'INSERT INTO items (x) VALUES (2)', 'SELECT * FROM items WHERE x = 2', 'BLAH after']
141
94
  end
142
95
 
143
96
  it "#save should cancel the save and raise an error if before_save calls cancel_action and raise_on_failure option is true" do
@@ -147,13 +100,6 @@ describe "Model#before_save && Model#after_save" do
147
100
  DB.sqls.must_equal []
148
101
  end
149
102
 
150
- deprecated "#save should cancel the save and return nil if before_save returns false and raise_on_save_failure is false" do
151
- @c.send(:define_method, :before_save){false}
152
- @c.raise_on_save_failure = false
153
- @c.load(:id => 2233).save.must_be_nil
154
- DB.sqls.must_equal []
155
- end
156
-
157
103
  it "#save should cancel the save and return nil if before_save calls cancel_action and raise_on_save_failure is false" do
158
104
  @c.send(:define_method, :before_save){cancel_action}
159
105
  @c.raise_on_save_failure = false
@@ -185,32 +131,12 @@ describe "Model#before_destroy && Model#after_destroy" do
185
131
  DB.sqls.must_equal ['BLAH before', 'DELETE FROM items WHERE id = 2233', 'BLAH after']
186
132
  end
187
133
 
188
- deprecated "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_save_failure is true" do
189
- @c.send(:define_method, :before_destroy){false}
190
- proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
191
- DB.sqls.must_equal []
192
- end
193
-
194
134
  it "#destroy should cancel the destroy and raise an error if before_destroy calls cancel_action and raise_on_save_failure is true" do
195
135
  @c.send(:define_method, :before_destroy){cancel_action; true}
196
136
  proc{@c.load(:id => 2233).destroy}.must_raise(Sequel::HookFailed)
197
137
  DB.sqls.must_equal []
198
138
  end
199
139
 
200
- deprecated "#destroy should cancel the destroy and raise an error if before_destroy returns false and raise_on_failure option is true" do
201
- @c.send(:define_method, :before_destroy){false}
202
- @c.raise_on_save_failure = false
203
- proc{@c.load(:id => 2233).destroy(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
204
- DB.sqls.must_equal []
205
- end
206
-
207
- deprecated "#destroy should cancel the destroy and return nil if before_destroy returns false and raise_on_save_failure is false" do
208
- @c.send(:define_method, :before_destroy){false}
209
- @c.raise_on_save_failure = false
210
- @c.load(:id => 2233).destroy.must_be_nil
211
- DB.sqls.must_equal []
212
- end
213
-
214
140
  it "#destroy should cancel the destroy and return nil if before_destroy calls cancel_action and raise_on_save_failure is false" do
215
141
  @c.send(:define_method, :before_destroy){cancel_action; true}
216
142
  @c.raise_on_save_failure = false
@@ -257,32 +183,12 @@ describe "Model#before_validation && Model#after_validation" do
257
183
  DB.sqls.must_equal ['BLAH before', 'BLAH after']
258
184
  end
259
185
 
260
- deprecated "#save should cancel the save and raise an error if before_validation returns false and raise_on_save_failure is true" do
261
- @c.send(:define_method, :before_validation){false}
262
- proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
263
- DB.sqls.must_equal []
264
- end
265
-
266
- deprecated "#save should cancel the save and raise an error if before_validation returns false and raise_on_failure option is true" do
267
- @c.send(:define_method, :before_validation){false}
268
- @c.raise_on_save_failure = false
269
- proc{@c.load(:id => 2233).save(:raise_on_failure => true)}.must_raise(Sequel::HookFailed)
270
- DB.sqls.must_equal []
271
- end
272
-
273
186
  it "#save should cancel the save and raise an error if before_validation calls cancel_action and raise_on_save_failure is true" do
274
187
  @c.send(:define_method, :before_validation){cancel_action}
275
188
  proc{@c.load(:id => 2233).save}.must_raise(Sequel::HookFailed)
276
189
  DB.sqls.must_equal []
277
190
  end
278
191
 
279
- deprecated "#save should cancel the save and return nil if before_validation returns false and raise_on_save_failure is false" do
280
- @c.send(:define_method, :before_validation){false}
281
- @c.raise_on_save_failure = false
282
- @c.load(:id => 2233).save.must_be_nil
283
- DB.sqls.must_equal []
284
- end
285
-
286
192
  it "#save should cancel the save and return nil if before_validation calls cancel_action and raise_on_save_failure is false" do
287
193
  @c.send(:define_method, :before_validation){cancel_action}
288
194
  @c.raise_on_save_failure = false
@@ -294,11 +200,6 @@ describe "Model#before_validation && Model#after_validation" do
294
200
  @c.send(:define_method, :before_validation){cancel_action}
295
201
  @c.load(:id => 2233).valid?.must_equal false
296
202
  end
297
-
298
- deprecated "#valid? should return false if before_validation returns false" do
299
- @c.send(:define_method, :before_validation){false}
300
- @c.load(:id => 2233).valid?.must_equal false
301
- end
302
203
  end
303
204
 
304
205
  describe "Model around filters" do
@@ -318,7 +219,7 @@ describe "Model around filters" do
318
219
  end
319
220
  end
320
221
  @c.create(:x => 2)
321
- DB.sqls.must_equal ['ac_before', 'INSERT INTO items (x) VALUES (2)', 'ac_after', "SELECT * FROM items WHERE id = 10"]
222
+ DB.sqls.must_equal ['ac_before', 'INSERT INTO items (x) VALUES (2)', "SELECT * FROM items WHERE id = 10", 'ac_after']
322
223
  end
323
224
 
324
225
  it "around_delete should be called around record destruction" do
@@ -364,7 +265,7 @@ describe "Model around filters" do
364
265
  end
365
266
  end
366
267
  @c.create(:x => 2)
367
- DB.sqls.must_equal ['as_before', 'ac_before', 'INSERT INTO items (x) VALUES (2)', 'ac_after', 'as_after', "SELECT * FROM items WHERE id = 10"]
268
+ DB.sqls.must_equal ['as_before', 'ac_before', 'INSERT INTO items (x) VALUES (2)', "SELECT * FROM items WHERE id = 10", 'ac_after', 'as_after']
368
269
  @c.load(:id=>1, :x => 2).save
369
270
  DB.sqls.must_equal ['as_before', 'au_before', 'UPDATE items SET x = 2 WHERE (id = 1)', 'au_after', 'as_after']
370
271
  end
@@ -467,199 +368,3 @@ describe "Model around filters" do
467
368
  o.save.must_be_nil
468
369
  end
469
370
  end
470
-
471
- describe "Model#after_commit and #after_rollback" do
472
- before do
473
- @db = Sequel.mock(:servers=>{:test=>{}})
474
- @m = Class.new(Sequel::Model(@db[:items])) do
475
- attr_accessor :rb
476
- def _delete
477
- end
478
- def after_save
479
- db.execute('as')
480
- raise Sequel::Rollback if rb
481
- end
482
- def after_commit
483
- db.execute('ac')
484
- end
485
- def after_rollback
486
- db.execute('ar')
487
- end
488
- def after_destroy
489
- db.execute('ad')
490
- raise Sequel::Rollback if rb
491
- end
492
- def after_destroy_commit
493
- db.execute('adc')
494
- end
495
- def after_destroy_rollback
496
- db.execute('adr')
497
- end
498
- end
499
- @m.use_transactions = true
500
- @o = @m.load({})
501
- @db.sqls
502
- end
503
-
504
- deprecated "should call after_commit for save after the transaction commits if it commits" do
505
- @o.save
506
- @db.sqls.must_equal ['BEGIN', 'as', 'COMMIT', 'ac']
507
- end
508
-
509
- deprecated "should call after_rollback for save after the transaction rolls back if it rolls back" do
510
- @o.rb = true
511
- @o.save
512
- @db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK', 'ar']
513
- end
514
-
515
- deprecated "should have after_commit respect any surrounding transactions" do
516
- @db.transaction do
517
- @o.save
518
- end
519
- @db.sqls.must_equal ['BEGIN', 'as', 'COMMIT', 'ac']
520
- end
521
-
522
- deprecated "should have after_rollback respect any surrounding transactions" do
523
- @db.transaction do
524
- @o.rb = true
525
- @o.save
526
- end
527
- @db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK', 'ar']
528
- end
529
-
530
- deprecated "should have after_commit work with surrounding transactions and sharding" do
531
- @db.transaction(:server=>:test) do
532
- @o.save
533
- end
534
- @db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'as', 'COMMIT', 'ac', 'COMMIT -- test']
535
- end
536
-
537
- deprecated "should have after_rollback work with surrounding transactions and sharding" do
538
- @db.transaction(:server=>:test) do
539
- @o.rb = true
540
- @o.save
541
- end
542
- @db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'as', 'ROLLBACK', 'ar', 'COMMIT -- test']
543
- end
544
-
545
- deprecated "should call after_destroy_commit for destroy after the transaction commits if it commits" do
546
- @o.destroy
547
- @db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT', 'adc']
548
- end
549
-
550
- deprecated "should call after_destroy_rollback for destroy after the transaction rolls back if it rolls back" do
551
- @o.rb = true
552
- @o.destroy
553
- @db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK', 'adr']
554
- end
555
-
556
- deprecated "should have after_destroy_commit respect any surrounding transactions" do
557
- @db.transaction do
558
- @o.destroy
559
- end
560
- @db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT', 'adc']
561
- end
562
-
563
- deprecated "should have after_destroy_rollback respect any surrounding transactions" do
564
- @db.transaction do
565
- @o.rb = true
566
- @o.destroy
567
- end
568
- @db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK', 'adr']
569
- end
570
-
571
- deprecated "should have after_destroy commit work with surrounding transactions and sharding" do
572
- @db.transaction(:server=>:test) do
573
- @o.destroy
574
- end
575
- @db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'ad', 'COMMIT', 'adc', 'COMMIT -- test']
576
- end
577
-
578
- deprecated "should have after_destroy_rollback work with surrounding transactions and sharding" do
579
- @db.transaction(:server=>:test) do
580
- @o.rb = true
581
- @o.destroy
582
- end
583
- @db.sqls.must_equal ['BEGIN -- test', 'BEGIN', 'ad', 'ROLLBACK', 'adr', 'COMMIT -- test']
584
- end
585
-
586
- deprecated "should not call after_commit if use_after_commit_rollback is false" do
587
- @o.use_after_commit_rollback = false
588
- @o.save
589
- @db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
590
- end
591
-
592
- deprecated "should not call after_rollback if use_after_commit_rollback is false" do
593
- @o.use_after_commit_rollback = false
594
- @o.rb = true
595
- @o.save
596
- @db.sqls.must_equal ['BEGIN', 'as', 'ROLLBACK']
597
- end
598
-
599
- deprecated "should not call after_destroy_commit if use_after_commit_rollback is false" do
600
- @o.use_after_commit_rollback = false
601
- @o.destroy
602
- @db.sqls.must_equal ['BEGIN', 'ad', 'COMMIT']
603
- end
604
-
605
- deprecated "should not call after_destroy_rollback for save if use_after_commit_rollback is false" do
606
- @o.use_after_commit_rollback = false
607
- @o.rb = true
608
- @o.destroy
609
- @db.sqls.must_equal ['BEGIN', 'ad', 'ROLLBACK']
610
- end
611
-
612
- deprecated "should handle use_after_commit_rollback at the class level" do
613
- @m.use_after_commit_rollback = false
614
- @o.save
615
- @db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
616
- end
617
-
618
- deprecated "should handle use_after_commit_rollback when subclassing" do
619
- @m.use_after_commit_rollback = false
620
- o = Class.new(@m).load({})
621
- @db.sqls
622
- o.save
623
- @db.sqls.must_equal ['BEGIN', 'as', 'COMMIT']
624
- end
625
-
626
- deprecated "should handle use_after_commit_rollback when subclassing after loading" do
627
- @m = Class.new(Sequel::Model(@db[:items]))
628
- @m.use_transactions = true
629
- o = @m.load({})
630
- @db.sqls
631
- o.save
632
- @db.sqls.must_equal ['BEGIN', 'COMMIT']
633
-
634
- c = Class.new(@m)
635
- o = c.load({})
636
- def o.after_commit; db.execute 'ac' end
637
- @db.sqls
638
- o.save
639
- @db.sqls.must_equal ['BEGIN', 'COMMIT', 'ac']
640
-
641
- o = c.load({})
642
- @db.sqls
643
- o.save
644
- @db.sqls.must_equal ['BEGIN', 'COMMIT']
645
-
646
- c.send(:define_method, :after_commit){db.execute 'ac'}
647
- o = c.load({})
648
- @db.sqls
649
- o.save
650
- @db.sqls.must_equal ['BEGIN', 'COMMIT', 'ac']
651
-
652
- c = Class.new(@m)
653
- c.send(:include, Module.new{def after_commit; db.execute 'ac'; end})
654
- o = c.load({})
655
- @db.sqls
656
- o.save
657
- @db.sqls.must_equal ['BEGIN', 'COMMIT', 'ac']
658
-
659
- c.use_after_commit_rollback = false
660
- o = c.load({})
661
- @db.sqls
662
- o.save
663
- @db.sqls.must_equal ['BEGIN', 'COMMIT']
664
- end
665
- end