ibm_db 3.0.5-x86-mingw32 → 5.0.5-x86-mingw32

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 (358) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/ParameterizedQueries README +6 -6
  5. data/README +38 -55
  6. data/ext/Makefile +269 -0
  7. data/ext/extconf.rb +34 -3
  8. data/ext/gil_release_version +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +100 -108
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db_cli.o +0 -0
  15. data/ext/unicode_support_version +3 -0
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
  18. data/lib/mswin32/ibm_db.rb +7 -39
  19. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  20. data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
  21. data/test/cases/adapter_test.rb +133 -58
  22. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  24. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  27. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  28. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  29. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  30. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  31. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  32. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  33. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  34. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  35. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  36. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  37. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  38. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  39. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  40. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  41. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  42. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  43. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  44. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  45. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  46. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  47. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  48. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  49. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  50. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  51. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  52. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  53. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  54. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  55. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  56. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  57. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  58. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  59. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  60. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  61. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  62. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  63. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  64. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  65. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  66. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  67. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  68. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  69. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  70. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  71. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  72. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  73. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  74. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  75. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  76. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  77. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  78. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  79. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  80. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  81. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  82. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  83. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  84. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  85. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  86. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  87. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  88. data/test/cases/aggregations_test.rb +11 -1
  89. data/test/cases/ar_schema_test.rb +35 -50
  90. data/test/cases/associations/association_scope_test.rb +1 -6
  91. data/test/cases/associations/belongs_to_associations_test.rb +122 -10
  92. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  93. data/test/cases/associations/callbacks_test.rb +5 -7
  94. data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
  95. data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
  96. data/test/cases/associations/eager_test.rb +158 -73
  97. data/test/cases/associations/extension_test.rb +7 -2
  98. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
  99. data/test/cases/associations/has_many_associations_test.rb +362 -43
  100. data/test/cases/associations/has_many_through_associations_test.rb +108 -41
  101. data/test/cases/associations/has_one_associations_test.rb +105 -8
  102. data/test/cases/associations/has_one_through_associations_test.rb +6 -3
  103. data/test/cases/associations/inner_join_association_test.rb +3 -3
  104. data/test/cases/associations/inverse_associations_test.rb +38 -11
  105. data/test/cases/associations/join_model_test.rb +59 -36
  106. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  107. data/test/cases/associations/nested_through_associations_test.rb +2 -2
  108. data/test/cases/associations/required_test.rb +25 -5
  109. data/test/cases/associations_test.rb +39 -34
  110. data/test/cases/attribute_decorators_test.rb +9 -8
  111. data/test/cases/attribute_methods/read_test.rb +5 -5
  112. data/test/cases/attribute_methods_test.rb +97 -40
  113. data/test/cases/attribute_set_test.rb +64 -4
  114. data/test/cases/attribute_test.rb +84 -18
  115. data/test/cases/attributes_test.rb +151 -34
  116. data/test/cases/autosave_association_test.rb +149 -36
  117. data/test/cases/base_test.rb +290 -241
  118. data/test/cases/batches_test.rb +299 -22
  119. data/test/cases/binary_test.rb +2 -10
  120. data/test/cases/bind_parameter_test.rb +76 -66
  121. data/test/cases/cache_key_test.rb +26 -0
  122. data/test/cases/calculations_test.rb +167 -15
  123. data/test/cases/callbacks_test.rb +161 -68
  124. data/test/cases/coders/json_test.rb +15 -0
  125. data/test/cases/collection_cache_key_test.rb +115 -0
  126. data/test/cases/column_definition_test.rb +26 -57
  127. data/test/cases/comment_test.rb +145 -0
  128. data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
  129. data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
  130. data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
  131. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
  132. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
  133. data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
  134. data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
  135. data/test/cases/connection_management_test.rb +46 -56
  136. data/test/cases/connection_pool_test.rb +195 -20
  137. data/test/cases/connection_specification/resolver_test.rb +15 -0
  138. data/test/cases/counter_cache_test.rb +10 -5
  139. data/test/cases/custom_locking_test.rb +1 -1
  140. data/test/cases/database_statements_test.rb +18 -3
  141. data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
  142. data/test/cases/date_time_precision_test.rb +107 -0
  143. data/test/cases/defaults_test.rb +85 -89
  144. data/test/cases/dirty_test.rb +30 -52
  145. data/test/cases/disconnected_test.rb +4 -2
  146. data/test/cases/enum_test.rb +178 -24
  147. data/test/cases/errors_test.rb +16 -0
  148. data/test/cases/explain_test.rb +32 -21
  149. data/test/cases/finder_test.rb +273 -148
  150. data/test/cases/fixture_set/file_test.rb +18 -0
  151. data/test/cases/fixtures_test.rb +112 -32
  152. data/test/cases/forbidden_attributes_protection_test.rb +69 -3
  153. data/test/cases/helper.rb +10 -16
  154. data/test/cases/hot_compatibility_test.rb +89 -1
  155. data/test/cases/inheritance_test.rb +284 -53
  156. data/test/cases/integration_test.rb +23 -7
  157. data/test/cases/invalid_connection_test.rb +4 -2
  158. data/test/cases/invertible_migration_test.rb +124 -32
  159. data/test/cases/json_serialization_test.rb +11 -2
  160. data/test/cases/locking_test.rb +22 -6
  161. data/test/cases/log_subscriber_test.rb +106 -17
  162. data/test/cases/migration/change_schema_test.rb +60 -114
  163. data/test/cases/migration/change_table_test.rb +34 -2
  164. data/test/cases/migration/column_attributes_test.rb +7 -23
  165. data/test/cases/migration/column_positioning_test.rb +8 -8
  166. data/test/cases/migration/columns_test.rb +17 -11
  167. data/test/cases/migration/command_recorder_test.rb +47 -2
  168. data/test/cases/migration/compatibility_test.rb +118 -0
  169. data/test/cases/migration/create_join_table_test.rb +21 -12
  170. data/test/cases/migration/foreign_key_test.rb +52 -18
  171. data/test/cases/migration/index_test.rb +14 -12
  172. data/test/cases/migration/logger_test.rb +1 -1
  173. data/test/cases/migration/pending_migrations_test.rb +0 -1
  174. data/test/cases/migration/references_foreign_key_test.rb +59 -7
  175. data/test/cases/migration/references_index_test.rb +4 -4
  176. data/test/cases/migration/references_statements_test.rb +26 -6
  177. data/test/cases/migration/rename_table_test.rb +25 -25
  178. data/test/cases/migration_test.rb +279 -81
  179. data/test/cases/migrator_test.rb +91 -8
  180. data/test/cases/mixin_test.rb +0 -2
  181. data/test/cases/modules_test.rb +3 -4
  182. data/test/cases/multiparameter_attributes_test.rb +24 -2
  183. data/test/cases/multiple_db_test.rb +11 -4
  184. data/test/cases/nested_attributes_test.rb +61 -33
  185. data/test/cases/persistence_test.rb +102 -10
  186. data/test/cases/pooled_connections_test.rb +3 -3
  187. data/test/cases/primary_keys_test.rb +170 -31
  188. data/test/cases/query_cache_test.rb +216 -96
  189. data/test/cases/quoting_test.rb +65 -19
  190. data/test/cases/readonly_test.rb +2 -1
  191. data/test/cases/reflection_test.rb +68 -22
  192. data/test/cases/relation/delegation_test.rb +3 -8
  193. data/test/cases/relation/merging_test.rb +10 -14
  194. data/test/cases/relation/mutation_test.rb +42 -24
  195. data/test/cases/relation/or_test.rb +92 -0
  196. data/test/cases/relation/predicate_builder_test.rb +4 -2
  197. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  198. data/test/cases/relation/where_chain_test.rb +23 -99
  199. data/test/cases/relation/where_clause_test.rb +182 -0
  200. data/test/cases/relation/where_test.rb +45 -23
  201. data/test/cases/relation_test.rb +67 -58
  202. data/test/cases/relations_test.rb +249 -38
  203. data/test/cases/result_test.rb +10 -0
  204. data/test/cases/sanitize_test.rb +108 -15
  205. data/test/cases/schema_dumper_test.rb +119 -125
  206. data/test/cases/schema_loading_test.rb +52 -0
  207. data/test/cases/scoping/default_scoping_test.rb +113 -39
  208. data/test/cases/scoping/named_scoping_test.rb +46 -9
  209. data/test/cases/scoping/relation_scoping_test.rb +47 -4
  210. data/test/cases/secure_token_test.rb +32 -0
  211. data/test/cases/serialization_test.rb +1 -1
  212. data/test/cases/serialized_attribute_test.rb +93 -6
  213. data/test/cases/statement_cache_test.rb +38 -0
  214. data/test/cases/store_test.rb +2 -1
  215. data/test/cases/suppressor_test.rb +63 -0
  216. data/test/cases/tasks/database_tasks_test.rb +73 -9
  217. data/test/cases/tasks/mysql_rake_test.rb +139 -118
  218. data/test/cases/tasks/postgresql_rake_test.rb +60 -6
  219. data/test/cases/tasks/sqlite_rake_test.rb +30 -3
  220. data/test/cases/test_case.rb +28 -20
  221. data/test/cases/test_fixtures_test.rb +36 -0
  222. data/test/cases/time_precision_test.rb +103 -0
  223. data/test/cases/timestamp_test.rb +44 -10
  224. data/test/cases/touch_later_test.rb +121 -0
  225. data/test/cases/transaction_callbacks_test.rb +128 -62
  226. data/test/cases/transaction_isolation_test.rb +2 -2
  227. data/test/cases/transactions_test.rb +61 -43
  228. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  229. data/test/cases/type/date_time_test.rb +14 -0
  230. data/test/cases/type/integer_test.rb +2 -96
  231. data/test/cases/type/string_test.rb +0 -14
  232. data/test/cases/type_test.rb +39 -0
  233. data/test/cases/types_test.rb +1 -118
  234. data/test/cases/unconnected_test.rb +1 -1
  235. data/test/cases/validations/absence_validation_test.rb +73 -0
  236. data/test/cases/validations/association_validation_test.rb +13 -2
  237. data/test/cases/validations/i18n_validation_test.rb +6 -10
  238. data/test/cases/validations/length_validation_test.rb +62 -30
  239. data/test/cases/validations/presence_validation_test.rb +36 -1
  240. data/test/cases/validations/uniqueness_validation_test.rb +128 -37
  241. data/test/cases/validations_repair_helper.rb +2 -6
  242. data/test/cases/validations_test.rb +36 -7
  243. data/test/cases/view_test.rb +102 -5
  244. data/test/cases/yaml_serialization_test.rb +21 -26
  245. data/test/config.example.yml +97 -0
  246. data/test/fixtures/bad_posts.yml +9 -0
  247. data/test/fixtures/books.yml +20 -0
  248. data/test/fixtures/content.yml +3 -0
  249. data/test/fixtures/content_positions.yml +3 -0
  250. data/test/fixtures/dead_parrots.yml +5 -0
  251. data/test/fixtures/live_parrots.yml +4 -0
  252. data/test/fixtures/naked/yml/parrots.yml +2 -0
  253. data/test/fixtures/naked/yml/trees.yml +3 -0
  254. data/test/fixtures/nodes.yml +29 -0
  255. data/test/fixtures/other_comments.yml +6 -0
  256. data/test/fixtures/other_dogs.yml +2 -0
  257. data/test/fixtures/other_posts.yml +7 -0
  258. data/test/fixtures/price_estimates.yml +10 -1
  259. data/test/fixtures/trees.yml +3 -0
  260. data/test/migrations/10_urban/9_add_expressions.rb +1 -1
  261. data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
  262. data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
  263. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
  264. data/test/migrations/missing/1_people_have_last_names.rb +2 -2
  265. data/test/migrations/missing/3_we_need_reminders.rb +2 -2
  266. data/test/migrations/missing/4_innocent_jointable.rb +2 -2
  267. data/test/migrations/rename/1_we_need_things.rb +2 -2
  268. data/test/migrations/rename/2_rename_things.rb +2 -2
  269. data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
  270. data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
  271. data/test/migrations/to_copy2/1_create_articles.rb +1 -1
  272. data/test/migrations/to_copy2/2_create_comments.rb +1 -1
  273. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
  274. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
  275. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
  276. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
  277. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
  278. data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
  279. data/test/migrations/valid/2_we_need_reminders.rb +2 -2
  280. data/test/migrations/valid/3_innocent_jointable.rb +2 -2
  281. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
  282. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
  283. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
  284. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
  285. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
  286. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
  287. data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
  288. data/test/models/admin/randomly_named_c1.rb +6 -2
  289. data/test/models/aircraft.rb +1 -0
  290. data/test/models/author.rb +4 -7
  291. data/test/models/bird.rb +1 -1
  292. data/test/models/book.rb +5 -0
  293. data/test/models/bulb.rb +2 -1
  294. data/test/models/car.rb +3 -0
  295. data/test/models/cat.rb +10 -0
  296. data/test/models/chef.rb +1 -0
  297. data/test/models/club.rb +2 -0
  298. data/test/models/comment.rb +17 -5
  299. data/test/models/company.rb +4 -2
  300. data/test/models/company_in_module.rb +1 -1
  301. data/test/models/contact.rb +1 -1
  302. data/test/models/content.rb +40 -0
  303. data/test/models/customer.rb +8 -2
  304. data/test/models/developer.rb +19 -0
  305. data/test/models/face.rb +1 -1
  306. data/test/models/guitar.rb +4 -0
  307. data/test/models/hotel.rb +2 -0
  308. data/test/models/member.rb +1 -0
  309. data/test/models/member_detail.rb +4 -3
  310. data/test/models/mentor.rb +3 -0
  311. data/test/models/mocktail_designer.rb +2 -0
  312. data/test/models/node.rb +5 -0
  313. data/test/models/non_primary_key.rb +2 -0
  314. data/test/models/notification.rb +3 -0
  315. data/test/models/other_dog.rb +5 -0
  316. data/test/models/owner.rb +4 -1
  317. data/test/models/parrot.rb +6 -7
  318. data/test/models/person.rb +0 -1
  319. data/test/models/pet.rb +3 -0
  320. data/test/models/pet_treasure.rb +6 -0
  321. data/test/models/pirate.rb +3 -3
  322. data/test/models/post.rb +18 -9
  323. data/test/models/project.rb +9 -0
  324. data/test/models/randomly_named_c1.rb +1 -1
  325. data/test/models/recipe.rb +3 -0
  326. data/test/models/ship.rb +8 -2
  327. data/test/models/tag.rb +6 -0
  328. data/test/models/topic.rb +2 -8
  329. data/test/models/tree.rb +3 -0
  330. data/test/models/tuning_peg.rb +4 -0
  331. data/test/models/user.rb +14 -0
  332. data/test/models/uuid_item.rb +6 -0
  333. data/test/schema/mysql2_specific_schema.rb +33 -23
  334. data/test/schema/oracle_specific_schema.rb +1 -4
  335. data/test/schema/postgresql_specific_schema.rb +36 -124
  336. data/test/schema/schema.rb +170 -65
  337. data/test/schema/schema.rb.original +1057 -0
  338. data/test/schema/sqlite_specific_schema.rb +1 -5
  339. data/test/support/connection.rb +1 -0
  340. data/test/support/schema_dumping_helper.rb +1 -1
  341. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  342. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  343. metadata +146 -30
  344. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  345. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  346. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  347. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  348. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  349. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  350. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  351. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  352. data/test/cases/migration/table_and_index_test.rb +0 -24
  353. data/test/cases/relation/where_test2.rb +0 -36
  354. data/test/cases/type/decimal_test.rb +0 -56
  355. data/test/cases/type/unsigned_integer_test.rb +0 -18
  356. data/test/cases/xml_serialization_test.rb +0 -457
  357. data/test/fixtures/naked/csv/accounts.csv +0 -1
  358. data/test/schema/mysql_specific_schema.rb +0 -70
@@ -0,0 +1,121 @@
1
+ require 'cases/helper'
2
+ require 'models/invoice'
3
+ require 'models/line_item'
4
+ require 'models/topic'
5
+ require 'models/node'
6
+ require 'models/tree'
7
+
8
+ class TouchLaterTest < ActiveRecord::TestCase
9
+ fixtures :nodes, :trees
10
+
11
+ def test_touch_laster_raise_if_non_persisted
12
+ invoice = Invoice.new
13
+ Invoice.transaction do
14
+ assert_not invoice.persisted?
15
+ assert_raises(ActiveRecord::ActiveRecordError) do
16
+ invoice.touch_later
17
+ end
18
+ end
19
+ end
20
+
21
+ def test_touch_later_dont_set_dirty_attributes
22
+ invoice = Invoice.create!
23
+ invoice.touch_later
24
+ assert_not invoice.changed?
25
+ end
26
+
27
+ def test_touch_later_respects_no_touching_policy
28
+ time = Time.now.utc - 25.days
29
+ topic = Topic.create!(updated_at: time, created_at: time)
30
+ Topic.no_touching do
31
+ topic.touch_later
32
+ end
33
+ assert_equal time.to_i, topic.updated_at.to_i
34
+ end
35
+
36
+ def test_touch_later_update_the_attributes
37
+ time = Time.now.utc - 25.days
38
+ topic = Topic.create!(updated_at: time, created_at: time)
39
+ assert_equal time.to_i, topic.updated_at.to_i
40
+ assert_equal time.to_i, topic.created_at.to_i
41
+
42
+ Topic.transaction do
43
+ topic.touch_later(:created_at)
44
+ assert_not_equal time.to_i, topic.updated_at.to_i
45
+ assert_not_equal time.to_i, topic.created_at.to_i
46
+
47
+ assert_equal time.to_i, topic.reload.updated_at.to_i
48
+ assert_equal time.to_i, topic.reload.created_at.to_i
49
+ end
50
+ assert_not_equal time.to_i, topic.reload.updated_at.to_i
51
+ assert_not_equal time.to_i, topic.reload.created_at.to_i
52
+ end
53
+
54
+ def test_touch_touches_immediately
55
+ time = Time.now.utc - 25.days
56
+ topic = Topic.create!(updated_at: time, created_at: time)
57
+ assert_equal time.to_i, topic.updated_at.to_i
58
+ assert_equal time.to_i, topic.created_at.to_i
59
+
60
+ Topic.transaction do
61
+ topic.touch_later(:created_at)
62
+ topic.touch
63
+
64
+ assert_not_equal time, topic.reload.updated_at
65
+ assert_not_equal time, topic.reload.created_at
66
+ end
67
+ end
68
+
69
+ def test_touch_later_an_association_dont_autosave_parent
70
+ time = Time.now.utc - 25.days
71
+ line_item = LineItem.create!(amount: 1)
72
+ invoice = Invoice.create!(line_items: [line_item])
73
+ invoice.touch(time: time)
74
+
75
+ Invoice.transaction do
76
+ line_item.update(amount: 2)
77
+ assert_equal time.to_i, invoice.reload.updated_at.to_i
78
+ end
79
+
80
+ assert_not_equal time.to_i, invoice.updated_at.to_i
81
+ end
82
+
83
+ def test_touch_touches_immediately_with_a_custom_time
84
+ time = (Time.now.utc - 25.days).change(nsec: 0)
85
+ topic = Topic.create!(updated_at: time, created_at: time)
86
+ assert_equal time, topic.updated_at
87
+ assert_equal time, topic.created_at
88
+
89
+ Topic.transaction do
90
+ topic.touch_later(:created_at)
91
+ time = Time.now.utc - 2.days
92
+ topic.touch(time: time)
93
+
94
+ assert_equal time.to_i, topic.reload.updated_at.to_i
95
+ assert_equal time.to_i, topic.reload.created_at.to_i
96
+ end
97
+ end
98
+
99
+ def test_touch_later_dont_hit_the_db
100
+ invoice = Invoice.create!
101
+ assert_queries(0) do
102
+ invoice.touch_later
103
+ end
104
+ end
105
+
106
+ def test_touching_three_deep
107
+ previous_tree_updated_at = trees(:root).updated_at
108
+ previous_grandparent_updated_at = nodes(:grandparent).updated_at
109
+ previous_parent_updated_at = nodes(:parent_a).updated_at
110
+ previous_child_updated_at = nodes(:child_one_of_a).updated_at
111
+
112
+ travel 5.seconds do
113
+ Node.create! parent: nodes(:child_one_of_a), tree: trees(:root)
114
+ end
115
+
116
+ assert_not_equal nodes(:child_one_of_a).reload.updated_at, previous_child_updated_at
117
+ assert_not_equal nodes(:parent_a).reload.updated_at, previous_parent_updated_at
118
+ assert_not_equal nodes(:grandparent).reload.updated_at, previous_grandparent_updated_at
119
+ assert_not_equal trees(:root).reload.updated_at, previous_tree_updated_at
120
+ end
121
+ end
@@ -4,7 +4,6 @@ require 'models/pet'
4
4
  require 'models/topic'
5
5
 
6
6
  class TransactionCallbacksTest < ActiveRecord::TestCase
7
- self.use_transactional_fixtures = false
8
7
  fixtures :topics, :owners, :pets
9
8
 
10
9
  class ReplyWithCallbacks < ActiveRecord::Base
@@ -35,10 +34,11 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
35
34
 
36
35
  has_many :replies, class_name: "ReplyWithCallbacks", foreign_key: "parent_id"
37
36
 
37
+ before_commit { |record| record.do_before_commit(nil) }
38
38
  after_commit { |record| record.do_after_commit(nil) }
39
- after_commit(on: :create) { |record| record.do_after_commit(:create) }
40
- after_commit(on: :update) { |record| record.do_after_commit(:update) }
41
- after_commit(on: :destroy) { |record| record.do_after_commit(:destroy) }
39
+ after_create_commit { |record| record.do_after_commit(:create) }
40
+ after_update_commit { |record| record.do_after_commit(:update) }
41
+ after_destroy_commit { |record| record.do_after_commit(:destroy) }
42
42
  after_rollback { |record| record.do_after_rollback(nil) }
43
43
  after_rollback(on: :create) { |record| record.do_after_rollback(:create) }
44
44
  after_rollback(on: :update) { |record| record.do_after_rollback(:update) }
@@ -48,6 +48,12 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
48
48
  @history ||= []
49
49
  end
50
50
 
51
+ def before_commit_block(on = nil, &block)
52
+ @before_commit ||= {}
53
+ @before_commit[on] ||= []
54
+ @before_commit[on] << block
55
+ end
56
+
51
57
  def after_commit_block(on = nil, &block)
52
58
  @after_commit ||= {}
53
59
  @after_commit[on] ||= []
@@ -60,6 +66,11 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
60
66
  @after_rollback[on] << block
61
67
  end
62
68
 
69
+ def do_before_commit(on)
70
+ blocks = @before_commit[on] if defined?(@before_commit)
71
+ blocks.each{|b| b.call(self)} if blocks
72
+ end
73
+
63
74
  def do_after_commit(on)
64
75
  blocks = @after_commit[on] if defined?(@after_commit)
65
76
  blocks.each{|b| b.call(self)} if blocks
@@ -75,6 +86,20 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
75
86
  @first = TopicWithCallbacks.find(1)
76
87
  end
77
88
 
89
+ # FIXME: Test behavior, not implementation.
90
+ def test_before_commit_exception_should_pop_transaction_stack
91
+ @first.before_commit_block { raise 'better pop this txn from the stack!' }
92
+
93
+ original_txn = @first.class.connection.current_transaction
94
+
95
+ begin
96
+ @first.save!
97
+ fail
98
+ rescue
99
+ assert_equal original_txn, @first.class.connection.current_transaction
100
+ end
101
+ end
102
+
78
103
  def test_call_after_commit_after_transaction_commits
79
104
  @first.after_commit_block{|r| r.history << :after_commit}
80
105
  @first.after_rollback_block{|r| r.history << :after_rollback}
@@ -99,9 +124,9 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
99
124
 
100
125
  def test_only_call_after_commit_on_create_after_transaction_commits_for_new_record
101
126
  unless current_adapter?(:IBM_DBAdapter)
102
- @new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Date.today)
127
+ new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Date.today)
103
128
  else
104
- @new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Time.now)
129
+ new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Time.now)
105
130
  end
106
131
  add_transaction_execution_blocks new_record
107
132
 
@@ -193,9 +218,9 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
193
218
 
194
219
  def test_only_call_after_rollback_on_create_after_transaction_rollsback_for_new_record
195
220
  unless current_adapter?(:IBM_DBAdapter)
196
- @new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Date.today)
221
+ new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Date.today)
197
222
  else
198
- @new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Time.now)
223
+ new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Time.now)
199
224
  end
200
225
  add_transaction_execution_blocks new_record
201
226
 
@@ -208,21 +233,21 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
208
233
  end
209
234
 
210
235
  def test_call_after_rollback_when_commit_fails
211
- @first.class.connection.singleton_class.send(:alias_method, :real_method_commit_db_transaction, :commit_db_transaction)
212
- begin
213
- @first.class.connection.singleton_class.class_eval do
214
- def commit_db_transaction; raise "boom!"; end
215
- end
236
+ @first.after_commit_block { |r| r.history << :after_commit }
237
+ @first.after_rollback_block { |r| r.history << :after_rollback }
216
238
 
217
- @first.after_commit_block{|r| r.history << :after_commit}
218
- @first.after_rollback_block{|r| r.history << :after_rollback}
239
+ assert_raises RuntimeError do
240
+ @first.transaction do
241
+ tx = @first.class.connection.transaction_manager.current_transaction
242
+ def tx.commit
243
+ raise
244
+ end
219
245
 
220
- assert !@first.save rescue nil
221
- assert_equal [:after_rollback], @first.history
222
- ensure
223
- @first.class.connection.singleton_class.send(:remove_method, :commit_db_transaction)
224
- @first.class.connection.singleton_class.send(:alias_method, :commit_db_transaction, :real_method_commit_db_transaction)
246
+ @first.save
247
+ end
225
248
  end
249
+
250
+ assert_equal [:after_rollback], @first.history
226
251
  end
227
252
 
228
253
  def test_only_call_after_rollback_on_records_rolled_back_to_a_savepoint
@@ -274,47 +299,6 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
274
299
  assert_equal 2, @first.rollbacks
275
300
  end
276
301
 
277
- def test_after_transaction_callbacks_should_prevent_callbacks_from_being_called
278
- old_transaction_config = ActiveRecord::Base.raise_in_transactional_callbacks
279
- ActiveRecord::Base.raise_in_transactional_callbacks = false
280
-
281
- def @first.last_after_transaction_error=(e); @last_transaction_error = e; end
282
- def @first.last_after_transaction_error; @last_transaction_error; end
283
- @first.after_commit_block{|r| r.last_after_transaction_error = :commit; raise "fail!";}
284
- @first.after_rollback_block{|r| r.last_after_transaction_error = :rollback; raise "fail!";}
285
-
286
- second = TopicWithCallbacks.find(3)
287
- second.after_commit_block{|r| r.history << :after_commit}
288
- second.after_rollback_block{|r| r.history << :after_rollback}
289
-
290
- Topic.transaction do
291
- @first.save!
292
- second.save!
293
- end
294
- assert_equal :commit, @first.last_after_transaction_error
295
- assert_equal [:after_commit], second.history
296
-
297
- second.history.clear
298
- Topic.transaction do
299
- @first.save!
300
- second.save!
301
- raise ActiveRecord::Rollback
302
- end
303
- assert_equal :rollback, @first.last_after_transaction_error
304
- assert_equal [:after_rollback], second.history
305
- ensure
306
- ActiveRecord::Base.raise_in_transactional_callbacks = old_transaction_config
307
- end
308
-
309
- def test_after_commit_should_not_raise_when_raise_in_transactional_callbacks_false
310
- old_transaction_config = ActiveRecord::Base.raise_in_transactional_callbacks
311
- ActiveRecord::Base.raise_in_transactional_callbacks = false
312
- @first.after_commit_block{ fail "boom" }
313
- Topic.transaction { @first.save! }
314
- ensure
315
- ActiveRecord::Base.raise_in_transactional_callbacks = old_transaction_config
316
- end
317
-
318
302
  def test_after_commit_callback_should_not_swallow_errors
319
303
  @first.after_commit_block{ fail "boom" }
320
304
  assert_raises(RuntimeError) do
@@ -417,7 +401,7 @@ class TransactionCallbacksTest < ActiveRecord::TestCase
417
401
  end
418
402
 
419
403
  class CallbacksOnMultipleActionsTest < ActiveRecord::TestCase
420
- self.use_transactional_fixtures = false
404
+ self.use_transactional_tests = false
421
405
 
422
406
  class TopicWithCallbacksOnMultipleActions < ActiveRecord::Base
423
407
  self.table_name = :topics
@@ -426,6 +410,9 @@ class CallbacksOnMultipleActionsTest < ActiveRecord::TestCase
426
410
  after_commit(on: [:create, :update]) { |record| record.history << :create_and_update }
427
411
  after_commit(on: [:update, :destroy]) { |record| record.history << :update_and_destroy }
428
412
 
413
+ before_commit(if: :save_before_commit_history) { |record| record.history << :before_commit }
414
+ before_commit(if: :update_title) { |record| record.update(title: "before commit title") }
415
+
429
416
  def clear_history
430
417
  @history = []
431
418
  end
@@ -433,6 +420,8 @@ class CallbacksOnMultipleActionsTest < ActiveRecord::TestCase
433
420
  def history
434
421
  @history ||= []
435
422
  end
423
+
424
+ attr_accessor :save_before_commit_history, :update_title
436
425
  end
437
426
 
438
427
  def test_after_commit_on_multiple_actions
@@ -449,4 +438,81 @@ class CallbacksOnMultipleActionsTest < ActiveRecord::TestCase
449
438
  topic.destroy
450
439
  assert_equal [:update_and_destroy, :create_and_destroy], topic.history
451
440
  end
441
+
442
+ def test_before_commit_actions
443
+ topic = TopicWithCallbacksOnMultipleActions.new
444
+ topic.save_before_commit_history = true
445
+ topic.save
446
+
447
+ assert_equal [:before_commit, :create_and_update, :create_and_destroy], topic.history
448
+ end
449
+
450
+ def test_before_commit_update_in_same_transaction
451
+ topic = TopicWithCallbacksOnMultipleActions.new
452
+ topic.update_title = true
453
+ topic.save
454
+
455
+ assert_equal "before commit title", topic.title
456
+ assert_equal "before commit title", topic.reload.title
457
+ end
458
+ end
459
+
460
+
461
+ class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase
462
+
463
+ class TopicWithoutTransactionalEnrollmentCallbacks < ActiveRecord::Base
464
+ self.table_name = :topics
465
+
466
+ before_commit_without_transaction_enrollment { |r| r.history << :before_commit }
467
+ after_commit_without_transaction_enrollment { |r| r.history << :after_commit }
468
+ after_rollback_without_transaction_enrollment { |r| r.history << :rollback }
469
+
470
+ def history
471
+ @history ||= []
472
+ end
473
+ end
474
+
475
+ def setup
476
+ @topic = TopicWithoutTransactionalEnrollmentCallbacks.create!
477
+ end
478
+
479
+ def test_commit_does_not_run_transactions_callbacks_without_enrollment
480
+ @topic.transaction do
481
+ @topic.content = 'foo'
482
+ @topic.save!
483
+ end
484
+ assert @topic.history.empty?
485
+ end
486
+
487
+ def test_commit_run_transactions_callbacks_with_explicit_enrollment
488
+ @topic.transaction do
489
+ 2.times do
490
+ @topic.content = 'foo'
491
+ @topic.save!
492
+ end
493
+ @topic.class.connection.add_transaction_record(@topic)
494
+ end
495
+ assert_equal [:before_commit, :after_commit], @topic.history
496
+ end
497
+
498
+ def test_rollback_does_not_run_transactions_callbacks_without_enrollment
499
+ @topic.transaction do
500
+ @topic.content = 'foo'
501
+ @topic.save!
502
+ raise ActiveRecord::Rollback
503
+ end
504
+ assert @topic.history.empty?
505
+ end
506
+
507
+ def test_rollback_run_transactions_callbacks_with_explicit_enrollment
508
+ @topic.transaction do
509
+ 2.times do
510
+ @topic.content = 'foo'
511
+ @topic.save!
512
+ end
513
+ @topic.class.connection.add_transaction_record(@topic)
514
+ raise ActiveRecord::Rollback
515
+ end
516
+ assert_equal [:rollback], @topic.history
517
+ end
452
518
  end
@@ -2,7 +2,7 @@ require 'cases/helper'
2
2
 
3
3
  unless ActiveRecord::Base.connection.supports_transaction_isolation?
4
4
  class TransactionIsolationUnsupportedTest < ActiveRecord::TestCase
5
- self.use_transactional_fixtures = false
5
+ self.use_transactional_tests = false
6
6
 
7
7
  class Tag < ActiveRecord::Base
8
8
  end
@@ -17,7 +17,7 @@ end
17
17
 
18
18
  if ActiveRecord::Base.connection.supports_transaction_isolation?
19
19
  class TransactionIsolationTest < ActiveRecord::TestCase
20
- self.use_transactional_fixtures = false
20
+ self.use_transactional_tests = false
21
21
 
22
22
  class Tag < ActiveRecord::Base
23
23
  self.table_name = 'tags'
@@ -9,11 +9,11 @@ require 'models/post'
9
9
  require 'models/movie'
10
10
 
11
11
  class TransactionTest < ActiveRecord::TestCase
12
- self.use_transactional_fixtures = false
12
+ self.use_transactional_tests = false
13
13
  fixtures :topics, :developers, :authors, :posts, :author_addresses
14
14
 
15
15
  def setup
16
- @first, @second = Topic.find(1, 2).sort_by { |t| t.id }
16
+ @first, @second = Topic.find(1, 2).sort_by(&:id)
17
17
  end
18
18
 
19
19
  def test_persisted_in_a_model_with_custom_primary_key_after_failed_save
@@ -58,6 +58,11 @@ class TransactionTest < ActiveRecord::TestCase
58
58
  end
59
59
  end
60
60
 
61
+ def test_add_to_null_transaction
62
+ topic = Topic.new
63
+ topic.add_to_transaction
64
+ end
65
+
61
66
  def test_successful_with_return
62
67
  committed = false
63
68
 
@@ -188,7 +193,7 @@ class TransactionTest < ActiveRecord::TestCase
188
193
  assert posts_count > 0
189
194
  status = author.update(name: nil, post_ids: [])
190
195
  assert !status
191
- assert_equal posts_count, author.posts(true).size
196
+ assert_equal posts_count, author.posts.reload.size
192
197
  end
193
198
 
194
199
  def test_update_should_rollback_on_failure!
@@ -198,7 +203,17 @@ class TransactionTest < ActiveRecord::TestCase
198
203
  assert_raise(ActiveRecord::RecordInvalid) do
199
204
  author.update!(name: nil, post_ids: [])
200
205
  end
201
- assert_equal posts_count, author.posts(true).size
206
+ assert_equal posts_count, author.posts.reload.size
207
+ end
208
+
209
+ def test_cancellation_from_returning_false_in_before_filter
210
+ def @first.before_save_for_transaction
211
+ false
212
+ end
213
+
214
+ assert_deprecated do
215
+ @first.save
216
+ end
202
217
  end
203
218
 
204
219
  def test_cancellation_from_before_destroy_rollbacks_in_destroy
@@ -477,13 +492,17 @@ class TransactionTest < ActiveRecord::TestCase
477
492
  end
478
493
 
479
494
  def test_rollback_when_commit_raises
480
- Topic.connection.expects(:begin_db_transaction)
481
- Topic.connection.expects(:commit_db_transaction).raises('OH NOES')
482
- Topic.connection.expects(:rollback_db_transaction)
495
+ assert_called(Topic.connection, :begin_db_transaction) do
496
+ Topic.connection.stub(:commit_db_transaction, ->{ raise('OH NOES') }) do
497
+ assert_called(Topic.connection, :rollback_db_transaction) do
483
498
 
484
- assert_raise RuntimeError do
485
- Topic.transaction do
486
- # do nothing
499
+ e = assert_raise RuntimeError do
500
+ Topic.transaction do
501
+ # do nothing
502
+ end
503
+ end
504
+ assert_equal 'OH NOES', e.message
505
+ end
487
506
  end
488
507
  end
489
508
  end
@@ -491,44 +510,42 @@ class TransactionTest < ActiveRecord::TestCase
491
510
  def test_rollback_when_saving_a_frozen_record
492
511
  topic = Topic.new(:title => 'test')
493
512
  topic.freeze
494
- e = assert_raise(RuntimeError) { topic.save }
495
- assert_match(/frozen/i, e.message) # Not good enough, but we can't do much
496
- # about it since there is no specific error
497
- # for frozen objects.
498
- assert !topic.persisted?, 'not persisted'
513
+ e = assert_raise(frozen_error_class) { topic.save }
514
+ # Not good enough, but we can't do much
515
+ # about it since there is no specific error
516
+ # for frozen objects.
517
+ assert_match(/frozen/i, e.message)
518
+ assert !topic.persisted?, "not persisted"
499
519
  assert_nil topic.id
500
520
  assert topic.frozen?, 'not frozen'
501
521
  end
502
522
 
503
- # The behavior of killed threads having a status of "aborting" was changed
504
- # in Ruby 2.0, so Thread#kill on 1.9 will prematurely commit the transaction
505
- # and there's nothing we can do about it.
506
- if !RUBY_VERSION.start_with?('1.9') && !in_memory_db?
507
- def test_rollback_when_thread_killed
508
- queue = Queue.new
509
- thread = Thread.new do
510
- Topic.transaction do
511
- @first.approved = true
512
- @second.approved = false
513
- @first.save
523
+ def test_rollback_when_thread_killed
524
+ return if in_memory_db?
514
525
 
515
- queue.push nil
516
- sleep
526
+ queue = Queue.new
527
+ thread = Thread.new do
528
+ Topic.transaction do
529
+ @first.approved = true
530
+ @second.approved = false
531
+ @first.save
517
532
 
518
- @second.save
519
- end
533
+ queue.push nil
534
+ sleep
535
+
536
+ @second.save
520
537
  end
538
+ end
521
539
 
522
- queue.pop
523
- thread.kill
524
- thread.join
540
+ queue.pop
541
+ thread.kill
542
+ thread.join
525
543
 
526
- assert @first.approved?, "First should still be changed in the objects"
527
- assert !@second.approved?, "Second should still be changed in the objects"
544
+ assert @first.approved?, "First should still be changed in the objects"
545
+ assert !@second.approved?, "Second should still be changed in the objects"
528
546
 
529
- assert !Topic.find(1).approved?, "First shouldn't have been approved"
530
- assert Topic.find(2).approved?, "Second should still be approved"
531
- end
547
+ assert !Topic.find(1).approved?, "First shouldn't have been approved"
548
+ assert Topic.find(2).approved?, "Second should still be approved"
532
549
  end
533
550
 
534
551
  def test_restore_active_record_state_for_all_records_in_a_transaction
@@ -686,7 +703,8 @@ class TransactionTest < ActiveRecord::TestCase
686
703
  end
687
704
  end
688
705
  ensure
689
- connection.drop_table("transaction_without_primary_keys") if connection.table_exists? "transaction_without_primary_keys"
706
+ connection.drop_table 'transaction_without_primary_keys'
707
+ #, if_exists: true
690
708
  end
691
709
 
692
710
  private
@@ -696,14 +714,14 @@ class TransactionTest < ActiveRecord::TestCase
696
714
  meta = class << topic; self; end
697
715
  meta.send("define_method", "before_#{filter}_for_transaction") do
698
716
  Book.create
699
- false
717
+ throw(:abort)
700
718
  end
701
719
  end
702
720
  end
703
721
  end
704
722
 
705
723
  class TransactionsWithTransactionalFixturesTest < ActiveRecord::TestCase
706
- self.use_transactional_fixtures = true
724
+ self.use_transactional_tests = true
707
725
  fixtures :topics
708
726
 
709
727
  def test_automatic_savepoint_in_outer_transaction
@@ -760,7 +778,7 @@ if current_adapter?(:PostgreSQLAdapter)
760
778
  end
761
779
  end
762
780
 
763
- threads.each { |t| t.join }
781
+ threads.each(&:join)
764
782
  end
765
783
  end
766
784
 
@@ -808,7 +826,7 @@ if current_adapter?(:PostgreSQLAdapter)
808
826
  Developer.connection.close
809
827
  end
810
828
 
811
- threads.each { |t| t.join }
829
+ threads.each(&:join)
812
830
  end
813
831
 
814
832
  assert_equal original_salary, Developer.find(1).salary