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
@@ -7,6 +7,20 @@ require "active_support/log_subscriber/test_helper"
7
7
  class LogSubscriberTest < ActiveRecord::TestCase
8
8
  include ActiveSupport::LogSubscriber::TestHelper
9
9
  include ActiveSupport::Logger::Severity
10
+ REGEXP_CLEAR = Regexp.escape(ActiveRecord::LogSubscriber::CLEAR)
11
+ REGEXP_BOLD = Regexp.escape(ActiveRecord::LogSubscriber::BOLD)
12
+ REGEXP_MAGENTA = Regexp.escape(ActiveRecord::LogSubscriber::MAGENTA)
13
+ REGEXP_CYAN = Regexp.escape(ActiveRecord::LogSubscriber::CYAN)
14
+ SQL_COLORINGS = {
15
+ SELECT: Regexp.escape(ActiveRecord::LogSubscriber::BLUE),
16
+ INSERT: Regexp.escape(ActiveRecord::LogSubscriber::GREEN),
17
+ UPDATE: Regexp.escape(ActiveRecord::LogSubscriber::YELLOW),
18
+ DELETE: Regexp.escape(ActiveRecord::LogSubscriber::RED),
19
+ LOCK: Regexp.escape(ActiveRecord::LogSubscriber::WHITE),
20
+ ROLLBACK: Regexp.escape(ActiveRecord::LogSubscriber::RED),
21
+ TRANSACTION: REGEXP_CYAN,
22
+ OTHER: REGEXP_MAGENTA
23
+ }
10
24
 
11
25
  class TestDebugLogSubscriber < ActiveRecord::LogSubscriber
12
26
  attr_reader :debugs
@@ -46,31 +60,23 @@ class LogSubscriberTest < ActiveRecord::TestCase
46
60
  logger = TestDebugLogSubscriber.new
47
61
  assert_equal 0, logger.debugs.length
48
62
 
49
- logger.sql(event.new(0, sql: 'hi mom!'))
63
+ logger.sql(event.new(0.9, sql: "hi mom!"))
50
64
  assert_equal 1, logger.debugs.length
51
65
 
52
- logger.sql(event.new(0, sql: 'hi mom!', name: 'foo'))
66
+ logger.sql(event.new(0.9, sql: "hi mom!", name: "foo"))
53
67
  assert_equal 2, logger.debugs.length
54
68
 
55
- logger.sql(event.new(0, sql: 'hi mom!', name: 'SCHEMA'))
69
+ logger.sql(event.new(0.9, sql: "hi mom!", name: "SCHEMA"))
56
70
  assert_equal 2, logger.debugs.length
57
71
  end
58
72
 
59
73
  def test_sql_statements_are_not_squeezed
60
74
  event = Struct.new(:duration, :payload)
61
75
  logger = TestDebugLogSubscriber.new
62
- logger.sql(event.new(0, sql: 'ruby rails'))
76
+ logger.sql(event.new(0.9, sql: "ruby rails"))
63
77
  assert_match(/ruby rails/, logger.debugs.first)
64
78
  end
65
79
 
66
- def test_ignore_binds_payload_with_nil_column
67
- event = Struct.new(:duration, :payload)
68
-
69
- logger = TestDebugLogSubscriber.new
70
- logger.sql(event.new(0, sql: 'hi mom!', binds: [[nil, 1]]))
71
- assert_equal 1, logger.debugs.length
72
- end
73
-
74
80
  def test_basic_query_logging
75
81
  Developer.all.load
76
82
  wait
@@ -79,6 +85,90 @@ class LogSubscriberTest < ActiveRecord::TestCase
79
85
  assert_match(/SELECT .*?FROM .?developers.?/i, @logger.logged(:debug).last)
80
86
  end
81
87
 
88
+ def test_basic_query_logging_coloration
89
+ event = Struct.new(:duration, :payload)
90
+ logger = TestDebugLogSubscriber.new
91
+ logger.colorize_logging = true
92
+ SQL_COLORINGS.each do |verb, color_regex|
93
+ logger.sql(event.new(0.9, sql: verb.to_s))
94
+ assert_match(/#{REGEXP_BOLD}#{color_regex}#{verb}#{REGEXP_CLEAR}/i, logger.debugs.last)
95
+ end
96
+ end
97
+
98
+ def test_basic_payload_name_logging_coloration_generic_sql
99
+ event = Struct.new(:duration, :payload)
100
+ logger = TestDebugLogSubscriber.new
101
+ logger.colorize_logging = true
102
+ SQL_COLORINGS.each do |verb, _|
103
+ logger.sql(event.new(0.9, sql: verb.to_s))
104
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
105
+
106
+ logger.sql(event.new(0.9, sql: verb.to_s, name: "SQL"))
107
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA}SQL \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
108
+ end
109
+ end
110
+
111
+ def test_basic_payload_name_logging_coloration_named_sql
112
+ event = Struct.new(:duration, :payload)
113
+ logger = TestDebugLogSubscriber.new
114
+ logger.colorize_logging = true
115
+ SQL_COLORINGS.each do |verb, _|
116
+ logger.sql(event.new(0.9, sql: verb.to_s, name: "Model Load"))
117
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}Model Load \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
118
+
119
+ logger.sql(event.new(0.9, sql: verb.to_s, name: "Model Exists"))
120
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}Model Exists \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
121
+
122
+ logger.sql(event.new(0.9, sql: verb.to_s, name: "ANY SPECIFIC NAME"))
123
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_CYAN}ANY SPECIFIC NAME \(0\.9ms\)#{REGEXP_CLEAR}/i, logger.debugs.last)
124
+ end
125
+ end
126
+
127
+ def test_query_logging_coloration_with_nested_select
128
+ event = Struct.new(:duration, :payload)
129
+ logger = TestDebugLogSubscriber.new
130
+ logger.colorize_logging = true
131
+ SQL_COLORINGS.slice(:SELECT, :INSERT, :UPDATE, :DELETE).each do |verb, color_regex|
132
+ logger.sql(event.new(0.9, sql: "#{verb} WHERE ID IN SELECT"))
133
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{color_regex}#{verb} WHERE ID IN SELECT#{REGEXP_CLEAR}/i, logger.debugs.last)
134
+ end
135
+ end
136
+
137
+ def test_query_logging_coloration_with_multi_line_nested_select
138
+ event = Struct.new(:duration, :payload)
139
+ logger = TestDebugLogSubscriber.new
140
+ logger.colorize_logging = true
141
+ SQL_COLORINGS.slice(:SELECT, :INSERT, :UPDATE, :DELETE).each do |verb, color_regex|
142
+ sql = <<-EOS
143
+ #{verb}
144
+ WHERE ID IN (
145
+ SELECT ID FROM THINGS
146
+ )
147
+ EOS
148
+ logger.sql(event.new(0.9, sql: sql))
149
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{color_regex}.*#{verb}.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
150
+ end
151
+ end
152
+
153
+ def test_query_logging_coloration_with_lock
154
+ event = Struct.new(:duration, :payload)
155
+ logger = TestDebugLogSubscriber.new
156
+ logger.colorize_logging = true
157
+ sql = <<-EOS
158
+ SELECT * FROM
159
+ (SELECT * FROM mytable FOR UPDATE) ss
160
+ WHERE col1 = 5;
161
+ EOS
162
+ logger.sql(event.new(0.9, sql: sql))
163
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{SQL_COLORINGS[:LOCK]}.*FOR UPDATE.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
164
+
165
+ sql = <<-EOS
166
+ LOCK TABLE films IN SHARE MODE;
167
+ EOS
168
+ logger.sql(event.new(0.9, sql: sql))
169
+ assert_match(/#{REGEXP_BOLD}#{REGEXP_MAGENTA} \(0\.9ms\)#{REGEXP_CLEAR} #{REGEXP_BOLD}#{SQL_COLORINGS[:LOCK]}.*LOCK TABLE.*#{REGEXP_CLEAR}/mi, logger.debugs.last)
170
+ end
171
+
82
172
  def test_exists_query_logging
83
173
  Developer.exists? 1
84
174
  wait
@@ -119,18 +209,17 @@ class LogSubscriberTest < ActiveRecord::TestCase
119
209
  Thread.new { assert_equal 0, ActiveRecord::LogSubscriber.runtime }.join
120
210
  end
121
211
 
122
- unless current_adapter?(:Mysql2Adapter)
212
+ if ActiveRecord::Base.connection.prepared_statements
123
213
  def test_binary_data_is_not_logged
124
214
  Binary.create(data: 'some binary data')
125
215
  wait
126
216
  assert_match(/<16 bytes of binary data>/, @logger.logged(:debug).join)
127
217
  end
128
218
 
129
- def test_nil_binary_data_is_logged
130
- binary = Binary.create(data: "")
131
- binary.update_attributes(data: nil)
219
+ def test_binary_data_hash
220
+ Binary.create(data: { a: 1 })
132
221
  wait
133
- assert_match(/<NULL binary data>/, @logger.logged(:debug).join)
222
+ assert_match(/<7 bytes of binary data>/, @logger.logged(:debug).join)
134
223
  end
135
224
  end
136
225
  end
@@ -23,20 +23,14 @@ module ActiveRecord
23
23
  end
24
24
  end
25
25
 
26
- unless current_adapter?(:IBM_DBAdapter)
27
- # For DB2: Cannot add a primary key to a table with some rows already in it as it violates the unique constraint
28
- # Secondly GENERATED BY DEFAULT AS IDENTITY cannot be applied in a alter table command.
29
- # as this will be wrong sql syntax for DB
30
- def test_add_column_with_primary_key_attribute
31
- testing_table_with_only_foo_attribute do
32
- connection.add_column :testings, :id, :primary_key
33
- assert_equal connection.columns(:testings).size, 2
34
- end
26
+ def test_add_column_with_primary_key_attribute
27
+ testing_table_with_only_foo_attribute do
28
+ connection.add_column :testings, :id, :primary_key
29
+ assert_equal connection.columns(:testings).size, 2
35
30
  end
36
- end
31
+ end
37
32
 
38
33
  def test_create_table_adds_id
39
- connection.drop_table :testings rescue nil
40
34
  connection.create_table :testings do |t|
41
35
  t.column :foo, :string
42
36
  end
@@ -45,7 +39,6 @@ module ActiveRecord
45
39
  end
46
40
 
47
41
  def test_create_table_with_not_null_column
48
- connection.drop_table :testings rescue nil
49
42
  connection.create_table :testings do |t|
50
43
  t.column :foo, :string, :null => false
51
44
  end
@@ -57,8 +50,8 @@ module ActiveRecord
57
50
 
58
51
  def test_create_table_with_defaults
59
52
  # MySQL doesn't allow defaults on TEXT or BLOB columns.
60
- mysql = current_adapter?(:MysqlAdapter, :Mysql2Adapter, :IBM_DBAdapter)
61
- connection.drop_table :testings rescue nil
53
+ mysql = current_adapter?(:Mysql2Adapter)
54
+
62
55
  connection.create_table :testings do |t|
63
56
  t.column :one, :string, :default => "hello"
64
57
  t.column :two, :boolean, :default => true
@@ -75,26 +68,24 @@ module ActiveRecord
75
68
  five = columns.detect { |c| c.name == "five" } unless mysql
76
69
 
77
70
  assert_equal "hello", one.default
78
- assert_equal true, two.type_cast_from_database(two.default)
79
- assert_equal false, three.type_cast_from_database(three.default)
71
+ assert_equal true, connection.lookup_cast_type_from_column(two).deserialize(two.default)
72
+ assert_equal false, connection.lookup_cast_type_from_column(three).deserialize(three.default)
80
73
  assert_equal '1', four.default
81
74
  assert_equal "hello", five.default unless mysql
82
75
  end
83
76
 
84
77
  if current_adapter?(:PostgreSQLAdapter)
85
78
  def test_add_column_with_array
86
- connection.drop_table :testings rescue nil
87
79
  connection.create_table :testings
88
80
  connection.add_column :testings, :foo, :string, :array => true
89
81
 
90
82
  columns = connection.columns(:testings)
91
83
  array_column = columns.detect { |c| c.name == "foo" }
92
84
 
93
- assert array_column.array
85
+ assert array_column.array?
94
86
  end
95
87
 
96
88
  def test_create_table_with_array_column
97
- connection.drop_table :testings rescue nil
98
89
  connection.create_table :testings do |t|
99
90
  t.string :foo, :array => true
100
91
  end
@@ -102,12 +93,11 @@ module ActiveRecord
102
93
  columns = connection.columns(:testings)
103
94
  array_column = columns.detect { |c| c.name == "foo" }
104
95
 
105
- assert array_column.array
96
+ assert array_column.array?
106
97
  end
107
98
  end
108
99
 
109
100
  def test_create_table_with_bigint
110
- connection.drop_table :testings rescue nil
111
101
  connection.create_table :testings do |t|
112
102
  t.bigint :eight_int
113
103
  end
@@ -127,7 +117,6 @@ module ActiveRecord
127
117
  end
128
118
 
129
119
  def test_create_table_with_limits
130
- connection.drop_table :testings rescue nil
131
120
  connection.create_table :testings do |t|
132
121
  t.column :foo, :string, :limit => 255
133
122
 
@@ -152,7 +141,7 @@ module ActiveRecord
152
141
  assert_equal 'smallint', one.sql_type
153
142
  assert_equal 'integer', four.sql_type
154
143
  assert_equal 'bigint', eight.sql_type
155
- elsif current_adapter?(:MysqlAdapter, :Mysql2Adapter)
144
+ elsif current_adapter?(:Mysql2Adapter)
156
145
  assert_match 'int(11)', default.sql_type
157
146
  assert_match 'tinyint', one.sql_type
158
147
  assert_match 'int', four.sql_type
@@ -167,7 +156,7 @@ module ActiveRecord
167
156
 
168
157
  def test_create_table_with_primary_key_prefix_as_table_name_with_underscore
169
158
  ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
170
- connection.drop_table :testings rescue nil
159
+
171
160
  connection.create_table :testings do |t|
172
161
  t.column :foo, :string
173
162
  end
@@ -177,7 +166,7 @@ module ActiveRecord
177
166
 
178
167
  def test_create_table_with_primary_key_prefix_as_table_name
179
168
  ActiveRecord::Base.primary_key_prefix_type = :table_name
180
- connection.drop_table :testings rescue nil
169
+
181
170
  connection.create_table :testings do |t|
182
171
  t.column :foo, :string
183
172
  end
@@ -186,16 +175,13 @@ module ActiveRecord
186
175
  end
187
176
 
188
177
  def test_create_table_raises_when_redefining_primary_key_column
189
- unless current_adapter?(:IBM_DBAdapter)
190
- #DB2 instead of ArgumentError exception, thorws Class: <ActiveRecord::StatementInvalid> Message: <"RuntimeError: Failed to execute statement due to: [IBM][CLI Driver][DB2/NT64] SQL0612N \"ID\" is a duplicate name. SQLSTATE=42711\r SQLCODE=-612: CREATE TABLE testings (id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 10000) PRIMARY KEY, id varchar(255)) ">
191
- error = assert_raise(ArgumentError) do
192
- connection.drop_table :testings rescue nil
193
- connection.create_table :testings do |t|
194
- t.column :id, :string
195
- end
196
- end
197
- assert_equal "you can't redefine the primary key column 'id'. To define a custom primary key, pass { id: false } to create_table.", error.message
198
- end
178
+ error = assert_raise(ArgumentError) do
179
+ connection.create_table :testings do |t|
180
+ t.column :id, :string
181
+ end
182
+ end
183
+
184
+ assert_equal "you can't redefine the primary key column 'id'. To define a custom primary key, pass { id: false } to create_table.", error.message
199
185
  end
200
186
 
201
187
  def test_create_table_raises_when_redefining_custom_primary_key_column
@@ -209,46 +195,39 @@ module ActiveRecord
209
195
  end
210
196
 
211
197
  def test_create_table_with_timestamps_should_create_datetime_columns
212
- # FIXME: Remove the silence when we change the default `null` behavior
213
- ActiveSupport::Deprecation.silence do
214
- connection.drop_table :testings rescue nil
215
- connection.create_table table_name do |t|
216
- t.timestamps
217
- end
198
+ connection.create_table table_name do |t|
199
+ t.timestamps
218
200
  end
219
201
  created_columns = connection.columns(table_name)
220
202
 
221
203
  created_at_column = created_columns.detect {|c| c.name == 'created_at' }
222
204
  updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
223
205
 
224
- assert created_at_column.null
225
- assert updated_at_column.null
206
+ assert !created_at_column.null
207
+ assert !updated_at_column.null
226
208
  end
227
209
 
228
210
  def test_create_table_with_timestamps_should_create_datetime_columns_with_options
229
- connection.drop_table :testings rescue nil
230
211
  connection.create_table table_name do |t|
231
- t.timestamps :null => false
212
+ t.timestamps null: true
232
213
  end
233
214
  created_columns = connection.columns(table_name)
234
215
 
235
216
  created_at_column = created_columns.detect {|c| c.name == 'created_at' }
236
217
  updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
237
218
 
238
- assert !created_at_column.null
239
- assert !updated_at_column.null
219
+ assert created_at_column.null
220
+ assert updated_at_column.null
240
221
  end
241
222
 
242
223
  def test_create_table_without_a_block
243
- connection.drop_table :testings rescue nil
244
224
  connection.create_table table_name
245
225
  end
246
226
 
247
- # Sybase, and SQLite3 will not allow you to add a NOT NULL
227
+ # SQLite3 will not allow you to add a NOT NULL
248
228
  # column to a table without a default value.
249
- unless current_adapter?(:SybaseAdapter, :SQLite3Adapter, :IBM_DBAdapter)
229
+ unless current_adapter?(:SQLite3Adapter)
250
230
  def test_add_column_not_null_without_default
251
- connection.drop_table :testings rescue nil
252
231
  connection.create_table :testings do |t|
253
232
  t.column :foo, :string
254
233
  end
@@ -261,7 +240,6 @@ module ActiveRecord
261
240
  end
262
241
 
263
242
  def test_add_column_not_null_with_default
264
- connection.drop_table :testings rescue nil
265
243
  connection.create_table :testings do |t|
266
244
  t.column :foo, :string
267
245
  end
@@ -276,7 +254,6 @@ module ActiveRecord
276
254
  end
277
255
 
278
256
  def test_add_column_with_timestamp_type
279
- connection.drop_table :testings rescue nil
280
257
  connection.create_table :testings do |t|
281
258
  t.column :foo, :timestamp
282
259
  end
@@ -294,14 +271,8 @@ module ActiveRecord
294
271
  end
295
272
 
296
273
  def test_change_column_quotes_column_names
297
- connection.drop_table :testings rescue nil
298
274
  connection.create_table :testings do |t|
299
- unless current_adapter?(:IBM_DBAdapter)
300
- t.column :select, :string
301
- else
302
- # If no limit specified by default column of length 255 is created, which later cannot be scaled down to 10
303
- t.column :select, :string, :limit => 5
304
- end
275
+ t.column :select, :string
305
276
  end
306
277
 
307
278
  connection.change_column :testings, :select, :string, :limit => 10
@@ -315,7 +286,6 @@ module ActiveRecord
315
286
  end
316
287
 
317
288
  def test_keeping_default_and_notnull_constraints_on_change
318
- connection.drop_table :testings rescue nil
319
289
  connection.create_table :testings do |t|
320
290
  t.column :title, :string
321
291
  end
@@ -339,67 +309,37 @@ module ActiveRecord
339
309
  assert_equal 100, person_klass.column_defaults["wealth"]
340
310
  assert_equal false, person_klass.columns_hash["wealth"].null
341
311
 
342
- if (!current_adapter?(:IBM_DBAdapter))
343
- # rename column to see that column doesn't lose its not null and/or default definition
344
- person_klass.connection.rename_column "testings", "wealth", "money"
345
- person_klass.reset_column_information
346
- assert_nil person_klass.columns_hash["wealth"]
347
- assert_equal 100, person_klass.column_defaults["money"]
348
- assert_equal false, person_klass.columns_hash["money"].null
349
- end
312
+ # rename column to see that column doesn't lose its not null and/or default definition
313
+ person_klass.connection.rename_column "testings", "wealth", "money"
314
+ person_klass.reset_column_information
315
+ assert_nil person_klass.columns_hash["wealth"]
316
+ assert_equal 100, person_klass.column_defaults["money"]
317
+ assert_equal false, person_klass.columns_hash["money"].null
350
318
 
351
319
  # change column
352
- unless current_adapter?(:IBM_DBAdapter)
353
- person_klass.connection.change_column "testings", "money", :integer, :null => false, :default => 1000
354
- person_klass.reset_column_information
355
- assert_equal 1000, person_klass.column_defaults["money"]
356
- assert_equal false, person_klass.columns_hash["money"].null
357
- else
358
- person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 15, :scale => 1,:null => false, :default => 1000
359
- person_klass.reset_column_information
360
- assert_equal "1000", person_klass.columns_hash["wealth"].default
361
- assert_equal false, person_klass.columns_hash["wealth"].null
362
- end
320
+ person_klass.connection.change_column "testings", "money", :integer, :null => false, :default => 1000
321
+ person_klass.reset_column_information
322
+ assert_equal 1000, person_klass.column_defaults["money"]
323
+ assert_equal false, person_klass.columns_hash["money"].null
363
324
 
364
325
  # change column, make it nullable and clear default
365
- unless current_adapter?(:IBM_DBAdapter)
366
- person_klass.connection.change_column "testings", "money", :integer, :null => true, :default => nil
367
- person_klass.reset_column_information
368
- assert_nil person_klass.columns_hash["money"].default
369
- assert_equal true, person_klass.columns_hash["money"].null
370
- else
371
- person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 20, :scale => 2, :null => true, :default => nil
372
- person_klass.reset_column_information
373
- assert_nil person_klass.columns_hash["wealth"].default
374
- assert_equal true, person_klass.columns_hash["wealth"].null
375
- end
326
+ person_klass.connection.change_column "testings", "money", :integer, :null => true, :default => nil
327
+ person_klass.reset_column_information
328
+ assert_nil person_klass.columns_hash["money"].default
329
+ assert_equal true, person_klass.columns_hash["money"].null
376
330
 
377
331
  # change_column_null, make it not nullable and set null values to a default value
378
- unless current_adapter?(:IBM_DBAdapter)
379
332
  person_klass.connection.execute('UPDATE testings SET money = NULL')
380
333
  person_klass.connection.change_column_null "testings", "money", false, 2000
381
334
  person_klass.reset_column_information
382
335
  assert_nil person_klass.columns_hash["money"].default
383
336
  assert_equal false, person_klass.columns_hash["money"].null
384
337
  assert_equal 2000, connection.select_values("SELECT money FROM testings").first.to_i
385
- else
386
- # Trying to set the value of the column wealth to NULL and
387
- # in the next statement a not null constraint is being applied which is wrong
388
- #person_klass.connection.execute('UPDATE testings SET money = NULL')
389
- person_klass.connection.change_column_null "testings", "wealth", false, 2000
390
- person_klass.reset_column_information
391
- #assert_nil person_klass.columns_hash["wealth"].default #Setting default to 2000 and expecting nil is nor correct
392
- assert_not_nil person_klass.columns_hash["wealth"].default
393
- assert_equal false, person_klass.columns_hash["wealth"].null
394
- #Changing default does not change the already inserted value. Hence expecting 2000 is wrong.
395
- #assert_equal [99], Person.connection.select_values("SELECT wealth FROM testings").map { |s| s.to_i }.sort
396
- assert_equal [99], person_klass.connection.select_values("SELECT wealth FROM testings").map { |s| s.to_i }.sort
397
- end
398
338
  end
399
339
 
400
340
  def test_change_column_null
401
341
  testing_table_with_only_foo_attribute do
402
- notnull_migration = Class.new(ActiveRecord::Migration) do
342
+ notnull_migration = Class.new(ActiveRecord::Migration::Current) do
403
343
  def change
404
344
  change_column_null :testings, :foo, false
405
345
  end
@@ -414,7 +354,6 @@ module ActiveRecord
414
354
  end
415
355
 
416
356
  def test_column_exists
417
- connection.drop_table :testings rescue nil
418
357
  connection.create_table :testings do |t|
419
358
  t.column :foo, :string
420
359
  end
@@ -424,7 +363,6 @@ module ActiveRecord
424
363
  end
425
364
 
426
365
  def test_column_exists_with_type
427
- connection.drop_table :testings rescue nil
428
366
  connection.create_table :testings do |t|
429
367
  t.column :foo, :string
430
368
  t.column :bar, :decimal, :precision => 8, :scale => 2
@@ -438,7 +376,6 @@ module ActiveRecord
438
376
  end
439
377
 
440
378
  def test_column_exists_with_definition
441
- connection.drop_table :testings rescue nil
442
379
  connection.create_table :testings do |t|
443
380
  t.column :foo, :string, limit: 100
444
381
  t.column :bar, :decimal, precision: 8, scale: 2
@@ -457,7 +394,6 @@ module ActiveRecord
457
394
  end
458
395
 
459
396
  def test_column_exists_on_table_with_no_options_parameter_supplied
460
- connection.drop_table :testings rescue nil
461
397
  connection.create_table :testings do |t|
462
398
  t.string :foo
463
399
  end
@@ -467,9 +403,19 @@ module ActiveRecord
467
403
  end
468
404
  end
469
405
 
406
+ def test_drop_table_if_exists
407
+ connection.create_table(:testings)
408
+ ActiveSupport::Deprecation.silence { assert connection.table_exists?(:testings) }
409
+ connection.drop_table(:testings, if_exists: true)
410
+ ActiveSupport::Deprecation.silence { assert_not connection.table_exists?(:testings) }
411
+ end
412
+
413
+ def test_drop_table_if_exists_nothing_raised
414
+ assert_nothing_raised { connection.drop_table(:nonexistent, if_exists: true) }
415
+ end
416
+
470
417
  private
471
418
  def testing_table_with_only_foo_attribute
472
- connection.drop_table :testings rescue nil
473
419
  connection.create_table :testings, :id => false do |t|
474
420
  t.column :foo, :string
475
421
  end
@@ -480,7 +426,7 @@ module ActiveRecord
480
426
 
481
427
  if ActiveRecord::Base.connection.supports_foreign_keys?
482
428
  class ChangeSchemaWithDependentObjectsTest < ActiveRecord::TestCase
483
- self.use_transactional_fixtures = false
429
+ self.use_transactional_tests = false
484
430
 
485
431
  setup do
486
432
  @connection = ActiveRecord::Base.connection
@@ -491,12 +437,12 @@ module ActiveRecord
491
437
 
492
438
  teardown do
493
439
  [:wagons, :trains].each do |table|
494
- @connection.drop_table(table) if @connection.table_exists?(table)
440
+ @connection.drop_table table, if_exists: true
495
441
  end
496
442
  end
497
443
 
498
444
  def test_create_table_with_force_cascade_drops_dependent_objects
499
- skip "MySQL > 5.5 does not drop dependent objects with DROP TABLE CASCADE" if current_adapter?(:MysqlAdapter, :Mysql2Adapter, :IBM_DBAdapter)
445
+ skip "MySQL > 5.5 does not drop dependent objects with DROP TABLE CASCADE" if current_adapter?(:Mysql2Adapter)
500
446
  # can't re-create table referenced by foreign key
501
447
  assert_raises(ActiveRecord::StatementInvalid) do
502
448
  @connection.create_table :trains, force: true