ibm_db 3.0.5-x86-mingw32 → 4.0.0-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 (586) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/ParameterizedQueries README +6 -6
  6. data/README +208 -225
  7. data/ext/Makefile.nt32 +181 -181
  8. data/ext/Makefile.nt32.191 +212 -212
  9. data/ext/extconf.rb +291 -291
  10. data/ext/ibm_db.c +11887 -11887
  11. data/ext/ruby_ibm_db.h +241 -241
  12. data/ext/ruby_ibm_db_cli.c +866 -866
  13. data/ext/ruby_ibm_db_cli.h +500 -500
  14. data/init.rb +41 -41
  15. data/lib/IBM_DB.rb +27 -27
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3452 -3177
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -2
  18. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  19. data/lib/mswin32/ibm_db.rb +91 -123
  20. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  21. data/test/active_record/connection_adapters/fake_adapter.rb +49 -46
  22. data/test/assets/example.log +1 -1
  23. data/test/assets/test.txt +1 -1
  24. data/test/cases/adapter_test.rb +351 -276
  25. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  26. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  27. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  28. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  29. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  30. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  31. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  32. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  33. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  34. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  35. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  36. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  37. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  38. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  39. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  40. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  41. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  42. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  43. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  44. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  45. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  46. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  47. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  48. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  49. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  50. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  51. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  52. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  53. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  54. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  55. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  56. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  57. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  58. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  59. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  60. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  61. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  62. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  63. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  64. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  65. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  66. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  67. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  68. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  69. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  70. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  71. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  72. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  73. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  74. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  75. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  76. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  77. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  78. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  79. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  80. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  81. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  82. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  83. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  84. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  85. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  86. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  87. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  88. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  89. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  90. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  91. data/test/cases/aggregations_test.rb +168 -158
  92. data/test/cases/ar_schema_test.rb +146 -161
  93. data/test/cases/associations/association_scope_test.rb +16 -21
  94. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1029
  95. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  96. data/test/cases/associations/callbacks_test.rb +190 -192
  97. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  98. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  99. data/test/cases/associations/eager_load_nested_include_test.rb +126 -128
  100. data/test/cases/associations/eager_singularization_test.rb +148 -148
  101. data/test/cases/associations/eager_test.rb +1514 -1429
  102. data/test/cases/associations/extension_test.rb +87 -82
  103. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -972
  104. data/test/cases/associations/has_many_associations_test.rb +2501 -2182
  105. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1204
  106. data/test/cases/associations/has_one_associations_test.rb +707 -610
  107. data/test/cases/associations/has_one_through_associations_test.rb +383 -380
  108. data/test/cases/associations/inner_join_association_test.rb +139 -139
  109. data/test/cases/associations/inverse_associations_test.rb +733 -706
  110. data/test/cases/associations/join_model_test.rb +777 -754
  111. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  112. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  113. data/test/cases/associations/required_test.rb +102 -82
  114. data/test/cases/associations_test.rb +385 -380
  115. data/test/cases/attribute_decorators_test.rb +125 -125
  116. data/test/cases/attribute_methods/read_test.rb +60 -60
  117. data/test/cases/attribute_methods_test.rb +1009 -952
  118. data/test/cases/attribute_set_test.rb +270 -210
  119. data/test/cases/attribute_test.rb +246 -180
  120. data/test/cases/attributes_test.rb +253 -136
  121. data/test/cases/autosave_association_test.rb +1708 -1595
  122. data/test/cases/base_test.rb +1713 -1664
  123. data/test/cases/batches_test.rb +489 -212
  124. data/test/cases/binary_test.rb +44 -52
  125. data/test/cases/bind_parameter_test.rb +110 -100
  126. data/test/cases/cache_key_test.rb +25 -0
  127. data/test/cases/calculations_test.rb +798 -646
  128. data/test/cases/callbacks_test.rb +636 -543
  129. data/test/cases/clone_test.rb +40 -40
  130. data/test/cases/coders/json_test.rb +15 -0
  131. data/test/cases/coders/yaml_column_test.rb +63 -63
  132. data/test/cases/collection_cache_key_test.rb +115 -0
  133. data/test/cases/column_alias_test.rb +17 -17
  134. data/test/cases/column_definition_test.rb +92 -123
  135. data/test/cases/comment_test.rb +143 -0
  136. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -54
  137. data/test/cases/connection_adapters/connection_handler_test.rb +160 -53
  138. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  139. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -293
  140. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -65
  141. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  142. data/test/cases/connection_adapters/schema_cache_test.rb +61 -56
  143. data/test/cases/connection_adapters/type_lookup_test.rb +118 -110
  144. data/test/cases/connection_management_test.rb +112 -122
  145. data/test/cases/connection_pool_test.rb +521 -346
  146. data/test/cases/connection_specification/resolver_test.rb +131 -116
  147. data/test/cases/core_test.rb +112 -112
  148. data/test/cases/counter_cache_test.rb +214 -209
  149. data/test/cases/custom_locking_test.rb +17 -17
  150. data/test/cases/database_statements_test.rb +34 -19
  151. data/test/cases/{invalid_date_test.rb → date_test.rb} +44 -32
  152. data/test/cases/date_time_precision_test.rb +106 -0
  153. data/test/cases/date_time_test.rb +61 -61
  154. data/test/cases/defaults_test.rb +218 -223
  155. data/test/cases/dirty_test.rb +763 -785
  156. data/test/cases/disconnected_test.rb +30 -28
  157. data/test/cases/dup_test.rb +157 -157
  158. data/test/cases/enum_test.rb +444 -290
  159. data/test/cases/errors_test.rb +16 -0
  160. data/test/cases/explain_subscriber_test.rb +64 -64
  161. data/test/cases/explain_test.rb +87 -76
  162. data/test/cases/finder_respond_to_test.rb +60 -60
  163. data/test/cases/finder_test.rb +1294 -1169
  164. data/test/cases/fixture_set/file_test.rb +156 -138
  165. data/test/cases/fixtures_test.rb +988 -908
  166. data/test/cases/forbidden_attributes_protection_test.rb +165 -99
  167. data/test/cases/habtm_destroy_order_test.rb +61 -61
  168. data/test/cases/helper.rb +204 -210
  169. data/test/cases/hot_compatibility_test.rb +142 -54
  170. data/test/cases/i18n_test.rb +45 -45
  171. data/test/cases/inheritance_test.rb +606 -375
  172. data/test/cases/integration_test.rb +155 -139
  173. data/test/cases/invalid_connection_test.rb +24 -22
  174. data/test/cases/invertible_migration_test.rb +387 -295
  175. data/test/cases/json_serialization_test.rb +311 -302
  176. data/test/cases/locking_test.rb +493 -477
  177. data/test/cases/log_subscriber_test.rb +225 -136
  178. data/test/cases/migration/change_schema_test.rb +458 -512
  179. data/test/cases/migration/change_table_test.rb +256 -224
  180. data/test/cases/migration/column_attributes_test.rb +176 -192
  181. data/test/cases/migration/column_positioning_test.rb +56 -56
  182. data/test/cases/migration/columns_test.rb +310 -304
  183. data/test/cases/migration/command_recorder_test.rb +350 -305
  184. data/test/cases/migration/compatibility_test.rb +118 -0
  185. data/test/cases/migration/create_join_table_test.rb +157 -148
  186. data/test/cases/migration/foreign_key_test.rb +360 -328
  187. data/test/cases/migration/helper.rb +39 -39
  188. data/test/cases/migration/index_test.rb +218 -216
  189. data/test/cases/migration/logger_test.rb +36 -36
  190. data/test/cases/migration/pending_migrations_test.rb +52 -53
  191. data/test/cases/migration/references_foreign_key_test.rb +216 -169
  192. data/test/cases/migration/references_index_test.rb +101 -101
  193. data/test/cases/migration/references_statements_test.rb +136 -116
  194. data/test/cases/migration/rename_table_test.rb +93 -93
  195. data/test/cases/migration_test.rb +1157 -959
  196. data/test/cases/migrator_test.rb +470 -388
  197. data/test/cases/mixin_test.rb +68 -70
  198. data/test/cases/modules_test.rb +172 -173
  199. data/test/cases/multiparameter_attributes_test.rb +372 -350
  200. data/test/cases/multiple_db_test.rb +122 -115
  201. data/test/cases/nested_attributes_test.rb +1098 -1070
  202. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  203. data/test/cases/persistence_test.rb +1001 -909
  204. data/test/cases/pooled_connections_test.rb +81 -81
  205. data/test/cases/primary_keys_test.rb +376 -237
  206. data/test/cases/query_cache_test.rb +446 -326
  207. data/test/cases/quoting_test.rb +202 -156
  208. data/test/cases/readonly_test.rb +119 -118
  209. data/test/cases/reaper_test.rb +85 -85
  210. data/test/cases/reflection_test.rb +509 -463
  211. data/test/cases/relation/delegation_test.rb +63 -68
  212. data/test/cases/relation/merging_test.rb +157 -161
  213. data/test/cases/relation/mutation_test.rb +183 -165
  214. data/test/cases/relation/or_test.rb +92 -0
  215. data/test/cases/relation/predicate_builder_test.rb +16 -14
  216. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  217. data/test/cases/relation/where_chain_test.rb +105 -181
  218. data/test/cases/relation/where_clause_test.rb +182 -0
  219. data/test/cases/relation/where_test.rb +322 -300
  220. data/test/cases/relation_test.rb +328 -319
  221. data/test/cases/relations_test.rb +2026 -1815
  222. data/test/cases/reload_models_test.rb +22 -22
  223. data/test/cases/result_test.rb +90 -80
  224. data/test/cases/sanitize_test.rb +176 -83
  225. data/test/cases/schema_dumper_test.rb +457 -463
  226. data/test/cases/schema_loading_test.rb +52 -0
  227. data/test/cases/scoping/default_scoping_test.rb +528 -454
  228. data/test/cases/scoping/named_scoping_test.rb +561 -524
  229. data/test/cases/scoping/relation_scoping_test.rb +400 -357
  230. data/test/cases/secure_token_test.rb +32 -0
  231. data/test/cases/serialization_test.rb +104 -104
  232. data/test/cases/serialized_attribute_test.rb +364 -277
  233. data/test/cases/statement_cache_test.rb +136 -98
  234. data/test/cases/store_test.rb +195 -194
  235. data/test/cases/suppressor_test.rb +63 -0
  236. data/test/cases/tasks/database_tasks_test.rb +462 -398
  237. data/test/cases/tasks/mysql_rake_test.rb +345 -324
  238. data/test/cases/tasks/postgresql_rake_test.rb +304 -250
  239. data/test/cases/tasks/sqlite_rake_test.rb +220 -193
  240. data/test/cases/test_case.rb +131 -123
  241. data/test/cases/test_fixtures_test.rb +36 -0
  242. data/test/cases/time_precision_test.rb +102 -0
  243. data/test/cases/timestamp_test.rb +501 -467
  244. data/test/cases/touch_later_test.rb +121 -0
  245. data/test/cases/transaction_callbacks_test.rb +518 -452
  246. data/test/cases/transaction_isolation_test.rb +106 -106
  247. data/test/cases/transactions_test.rb +834 -817
  248. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  249. data/test/cases/type/date_time_test.rb +14 -0
  250. data/test/cases/type/integer_test.rb +27 -121
  251. data/test/cases/type/string_test.rb +22 -36
  252. data/test/cases/type/type_map_test.rb +177 -177
  253. data/test/cases/type_test.rb +39 -0
  254. data/test/cases/types_test.rb +24 -141
  255. data/test/cases/unconnected_test.rb +33 -33
  256. data/test/cases/validations/absence_validation_test.rb +73 -0
  257. data/test/cases/validations/association_validation_test.rb +97 -86
  258. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  259. data/test/cases/validations/i18n_validation_test.rb +86 -90
  260. data/test/cases/validations/length_validation_test.rb +79 -47
  261. data/test/cases/validations/presence_validation_test.rb +103 -68
  262. data/test/cases/validations/uniqueness_validation_test.rb +548 -457
  263. data/test/cases/validations_repair_helper.rb +19 -23
  264. data/test/cases/validations_test.rb +194 -165
  265. data/test/cases/view_test.rb +216 -119
  266. data/test/cases/yaml_serialization_test.rb +121 -126
  267. data/test/config.example.yml +97 -0
  268. data/test/config.rb +5 -5
  269. data/test/fixtures/accounts.yml +29 -29
  270. data/test/fixtures/admin/accounts.yml +2 -2
  271. data/test/fixtures/admin/users.yml +10 -10
  272. data/test/fixtures/author_addresses.original +11 -0
  273. data/test/fixtures/author_addresses.yml +17 -17
  274. data/test/fixtures/author_favorites.yml +3 -3
  275. data/test/fixtures/authors.original +17 -0
  276. data/test/fixtures/authors.yml +23 -23
  277. data/test/fixtures/bad_posts.yml +9 -0
  278. data/test/fixtures/binaries.yml +133 -133
  279. data/test/fixtures/books.yml +31 -11
  280. data/test/fixtures/bulbs.yml +5 -5
  281. data/test/fixtures/cars.yml +9 -9
  282. data/test/fixtures/categories.yml +19 -19
  283. data/test/fixtures/categories/special_categories.yml +9 -9
  284. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  285. data/test/fixtures/categories_ordered.yml +7 -7
  286. data/test/fixtures/categories_posts.yml +31 -31
  287. data/test/fixtures/categorizations.yml +23 -23
  288. data/test/fixtures/clubs.yml +8 -8
  289. data/test/fixtures/collections.yml +3 -3
  290. data/test/fixtures/colleges.yml +3 -3
  291. data/test/fixtures/comments.yml +65 -65
  292. data/test/fixtures/companies.yml +67 -67
  293. data/test/fixtures/computers.yml +10 -10
  294. data/test/fixtures/content.yml +3 -0
  295. data/test/fixtures/content_positions.yml +3 -0
  296. data/test/fixtures/courses.yml +8 -8
  297. data/test/fixtures/customers.yml +25 -25
  298. data/test/fixtures/dashboards.yml +6 -6
  299. data/test/fixtures/dead_parrots.yml +5 -0
  300. data/test/fixtures/developers.yml +22 -22
  301. data/test/fixtures/developers_projects.yml +16 -16
  302. data/test/fixtures/dog_lovers.yml +7 -7
  303. data/test/fixtures/dogs.yml +4 -4
  304. data/test/fixtures/doubloons.yml +3 -3
  305. data/test/fixtures/edges.yml +5 -5
  306. data/test/fixtures/entrants.yml +14 -14
  307. data/test/fixtures/essays.yml +6 -6
  308. data/test/fixtures/faces.yml +11 -11
  309. data/test/fixtures/fk_test_has_fk.yml +3 -3
  310. data/test/fixtures/fk_test_has_pk.yml +1 -1
  311. data/test/fixtures/friendships.yml +4 -4
  312. data/test/fixtures/funny_jokes.yml +10 -10
  313. data/test/fixtures/interests.yml +33 -33
  314. data/test/fixtures/items.yml +3 -3
  315. data/test/fixtures/jobs.yml +7 -7
  316. data/test/fixtures/legacy_things.yml +3 -3
  317. data/test/fixtures/live_parrots.yml +4 -0
  318. data/test/fixtures/mateys.yml +4 -4
  319. data/test/fixtures/member_details.yml +8 -8
  320. data/test/fixtures/member_types.yml +6 -6
  321. data/test/fixtures/members.yml +11 -11
  322. data/test/fixtures/memberships.yml +34 -34
  323. data/test/fixtures/men.yml +5 -5
  324. data/test/fixtures/minimalistics.yml +2 -2
  325. data/test/fixtures/minivans.yml +5 -5
  326. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  327. data/test/fixtures/mixins.yml +29 -29
  328. data/test/fixtures/movies.yml +7 -7
  329. data/test/fixtures/naked/yml/accounts.yml +1 -1
  330. data/test/fixtures/naked/yml/companies.yml +1 -1
  331. data/test/fixtures/naked/yml/courses.yml +1 -1
  332. data/test/fixtures/naked/yml/parrots.yml +2 -0
  333. data/test/fixtures/naked/yml/trees.yml +3 -0
  334. data/test/fixtures/nodes.yml +29 -0
  335. data/test/fixtures/organizations.yml +5 -5
  336. data/test/fixtures/other_comments.yml +6 -0
  337. data/test/fixtures/other_dogs.yml +2 -0
  338. data/test/fixtures/other_posts.yml +7 -0
  339. data/test/fixtures/other_topics.yml +42 -42
  340. data/test/fixtures/owners.yml +9 -9
  341. data/test/fixtures/parrots.yml +27 -27
  342. data/test/fixtures/parrots_pirates.yml +7 -7
  343. data/test/fixtures/people.yml +24 -24
  344. data/test/fixtures/peoples_treasures.yml +3 -3
  345. data/test/fixtures/pets.yml +19 -19
  346. data/test/fixtures/pirates.yml +15 -12
  347. data/test/fixtures/posts.yml +80 -80
  348. data/test/fixtures/price_estimates.yml +16 -7
  349. data/test/fixtures/products.yml +4 -4
  350. data/test/fixtures/projects.yml +7 -7
  351. data/test/fixtures/ratings.yml +14 -14
  352. data/test/fixtures/readers.yml +11 -11
  353. data/test/fixtures/references.yml +17 -17
  354. data/test/fixtures/reserved_words/distinct.yml +5 -5
  355. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  356. data/test/fixtures/reserved_words/group.yml +14 -14
  357. data/test/fixtures/reserved_words/select.yml +8 -8
  358. data/test/fixtures/reserved_words/values.yml +7 -7
  359. data/test/fixtures/ships.yml +6 -6
  360. data/test/fixtures/speedometers.yml +8 -8
  361. data/test/fixtures/sponsors.yml +12 -12
  362. data/test/fixtures/string_key_objects.yml +7 -7
  363. data/test/fixtures/subscribers.yml +10 -10
  364. data/test/fixtures/subscriptions.yml +12 -12
  365. data/test/fixtures/taggings.yml +78 -78
  366. data/test/fixtures/tags.yml +11 -11
  367. data/test/fixtures/tasks.yml +7 -7
  368. data/test/fixtures/teapots.yml +3 -3
  369. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  370. data/test/fixtures/to_be_linked/users.yml +10 -10
  371. data/test/fixtures/topics.yml +49 -49
  372. data/test/fixtures/toys.yml +14 -14
  373. data/test/fixtures/traffic_lights.yml +9 -9
  374. data/test/fixtures/treasures.yml +10 -10
  375. data/test/fixtures/trees.yml +3 -0
  376. data/test/fixtures/uuid_children.yml +3 -3
  377. data/test/fixtures/uuid_parents.yml +2 -2
  378. data/test/fixtures/variants.yml +4 -4
  379. data/test/fixtures/vegetables.yml +19 -19
  380. data/test/fixtures/vertices.yml +3 -3
  381. data/test/fixtures/warehouse_things.yml +2 -2
  382. data/test/fixtures/zines.yml +5 -5
  383. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  384. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  385. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  386. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  387. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  388. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  389. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  390. data/test/migrations/rename/1_we_need_things.rb +11 -11
  391. data/test/migrations/rename/2_rename_things.rb +9 -9
  392. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  393. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  394. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  395. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  396. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  397. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  398. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  399. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  400. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  401. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  402. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  403. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  404. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  405. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  406. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  407. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  408. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  409. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  410. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  411. data/test/models/admin.rb +5 -5
  412. data/test/models/admin/account.rb +3 -3
  413. data/test/models/admin/randomly_named_c1.rb +6 -2
  414. data/test/models/admin/user.rb +40 -40
  415. data/test/models/aircraft.rb +5 -4
  416. data/test/models/arunit2_model.rb +3 -3
  417. data/test/models/author.rb +209 -212
  418. data/test/models/auto_id.rb +4 -4
  419. data/test/models/autoloadable/extra_firm.rb +2 -2
  420. data/test/models/binary.rb +2 -2
  421. data/test/models/bird.rb +12 -12
  422. data/test/models/book.rb +23 -18
  423. data/test/models/boolean.rb +2 -2
  424. data/test/models/bulb.rb +52 -51
  425. data/test/models/cake_designer.rb +3 -3
  426. data/test/models/car.rb +29 -26
  427. data/test/models/carrier.rb +2 -2
  428. data/test/models/cat.rb +10 -0
  429. data/test/models/categorization.rb +19 -19
  430. data/test/models/category.rb +35 -35
  431. data/test/models/chef.rb +8 -7
  432. data/test/models/citation.rb +3 -3
  433. data/test/models/club.rb +25 -23
  434. data/test/models/college.rb +10 -10
  435. data/test/models/column.rb +3 -3
  436. data/test/models/column_name.rb +3 -3
  437. data/test/models/comment.rb +76 -64
  438. data/test/models/company.rb +230 -228
  439. data/test/models/company_in_module.rb +98 -98
  440. data/test/models/computer.rb +3 -3
  441. data/test/models/contact.rb +41 -41
  442. data/test/models/content.rb +40 -0
  443. data/test/models/contract.rb +20 -20
  444. data/test/models/country.rb +7 -7
  445. data/test/models/course.rb +6 -6
  446. data/test/models/customer.rb +83 -77
  447. data/test/models/customer_carrier.rb +14 -14
  448. data/test/models/dashboard.rb +3 -3
  449. data/test/models/default.rb +2 -2
  450. data/test/models/department.rb +4 -4
  451. data/test/models/developer.rb +274 -255
  452. data/test/models/dog.rb +5 -5
  453. data/test/models/dog_lover.rb +5 -5
  454. data/test/models/doubloon.rb +12 -12
  455. data/test/models/drink_designer.rb +3 -3
  456. data/test/models/edge.rb +5 -5
  457. data/test/models/electron.rb +5 -5
  458. data/test/models/engine.rb +4 -4
  459. data/test/models/entrant.rb +3 -3
  460. data/test/models/essay.rb +5 -5
  461. data/test/models/event.rb +3 -3
  462. data/test/models/eye.rb +37 -37
  463. data/test/models/face.rb +9 -9
  464. data/test/models/friendship.rb +6 -6
  465. data/test/models/guid.rb +2 -2
  466. data/test/models/guitar.rb +4 -0
  467. data/test/models/hotel.rb +11 -9
  468. data/test/models/image.rb +3 -3
  469. data/test/models/interest.rb +5 -5
  470. data/test/models/invoice.rb +4 -4
  471. data/test/models/item.rb +7 -7
  472. data/test/models/job.rb +7 -7
  473. data/test/models/joke.rb +7 -7
  474. data/test/models/keyboard.rb +3 -3
  475. data/test/models/legacy_thing.rb +3 -3
  476. data/test/models/lesson.rb +11 -11
  477. data/test/models/line_item.rb +3 -3
  478. data/test/models/liquid.rb +4 -4
  479. data/test/models/man.rb +11 -11
  480. data/test/models/matey.rb +4 -4
  481. data/test/models/member.rb +42 -41
  482. data/test/models/member_detail.rb +8 -7
  483. data/test/models/member_type.rb +3 -3
  484. data/test/models/membership.rb +35 -35
  485. data/test/models/mentor.rb +3 -0
  486. data/test/models/minimalistic.rb +2 -2
  487. data/test/models/minivan.rb +9 -9
  488. data/test/models/mixed_case_monkey.rb +3 -3
  489. data/test/models/mocktail_designer.rb +2 -0
  490. data/test/models/molecule.rb +6 -6
  491. data/test/models/movie.rb +5 -5
  492. data/test/models/node.rb +5 -0
  493. data/test/models/non_primary_key.rb +2 -0
  494. data/test/models/notification.rb +3 -0
  495. data/test/models/order.rb +4 -4
  496. data/test/models/organization.rb +14 -14
  497. data/test/models/other_dog.rb +5 -0
  498. data/test/models/owner.rb +37 -34
  499. data/test/models/parrot.rb +28 -29
  500. data/test/models/person.rb +142 -143
  501. data/test/models/personal_legacy_thing.rb +4 -4
  502. data/test/models/pet.rb +18 -15
  503. data/test/models/pet_treasure.rb +6 -0
  504. data/test/models/pirate.rb +92 -92
  505. data/test/models/possession.rb +3 -3
  506. data/test/models/post.rb +273 -264
  507. data/test/models/price_estimate.rb +4 -4
  508. data/test/models/professor.rb +5 -5
  509. data/test/models/project.rb +40 -31
  510. data/test/models/publisher.rb +2 -2
  511. data/test/models/publisher/article.rb +4 -4
  512. data/test/models/publisher/magazine.rb +3 -3
  513. data/test/models/randomly_named_c1.rb +1 -1
  514. data/test/models/rating.rb +4 -4
  515. data/test/models/reader.rb +23 -23
  516. data/test/models/recipe.rb +3 -0
  517. data/test/models/record.rb +2 -2
  518. data/test/models/reference.rb +22 -22
  519. data/test/models/reply.rb +61 -61
  520. data/test/models/ship.rb +39 -33
  521. data/test/models/ship_part.rb +8 -8
  522. data/test/models/shop.rb +17 -17
  523. data/test/models/shop_account.rb +6 -6
  524. data/test/models/speedometer.rb +6 -6
  525. data/test/models/sponsor.rb +7 -7
  526. data/test/models/string_key_object.rb +3 -3
  527. data/test/models/student.rb +4 -4
  528. data/test/models/subject.rb +16 -16
  529. data/test/models/subscriber.rb +8 -8
  530. data/test/models/subscription.rb +4 -4
  531. data/test/models/tag.rb +13 -7
  532. data/test/models/tagging.rb +13 -13
  533. data/test/models/task.rb +5 -5
  534. data/test/models/topic.rb +118 -124
  535. data/test/models/toy.rb +6 -6
  536. data/test/models/traffic_light.rb +4 -4
  537. data/test/models/treasure.rb +14 -14
  538. data/test/models/treaty.rb +7 -7
  539. data/test/models/tree.rb +3 -0
  540. data/test/models/tuning_peg.rb +4 -0
  541. data/test/models/tyre.rb +11 -11
  542. data/test/models/user.rb +14 -0
  543. data/test/models/uuid_child.rb +3 -3
  544. data/test/models/uuid_item.rb +6 -0
  545. data/test/models/uuid_parent.rb +3 -3
  546. data/test/models/vegetables.rb +24 -24
  547. data/test/models/vehicle.rb +6 -6
  548. data/test/models/vertex.rb +9 -9
  549. data/test/models/warehouse_thing.rb +5 -5
  550. data/test/models/wheel.rb +3 -3
  551. data/test/models/without_table.rb +3 -3
  552. data/test/models/zine.rb +3 -3
  553. data/test/schema/mysql2_specific_schema.rb +68 -58
  554. data/test/schema/oracle_specific_schema.rb +40 -43
  555. data/test/schema/postgresql_specific_schema.rb +114 -202
  556. data/test/schema/schema.rb +1057 -952
  557. data/test/schema/schema.rb.original +1057 -0
  558. data/test/schema/sqlite_specific_schema.rb +18 -22
  559. data/test/support/config.rb +43 -43
  560. data/test/support/connection.rb +23 -22
  561. data/test/support/connection_helper.rb +14 -14
  562. data/test/support/ddl_helper.rb +8 -8
  563. data/test/support/schema_dumping_helper.rb +20 -20
  564. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  565. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  566. metadata +129 -28
  567. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  568. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  569. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  570. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  571. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  572. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  573. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  574. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  575. data/test/cases/migration/table_and_index_test.rb +0 -24
  576. data/test/cases/relation/where_test2.rb +0 -36
  577. data/test/cases/type/decimal_test.rb +0 -56
  578. data/test/cases/type/unsigned_integer_test.rb +0 -18
  579. data/test/cases/xml_serialization_test.rb +0 -457
  580. data/test/connections/native_ibm_db/connection.rb +0 -44
  581. data/test/fixtures/naked/csv/accounts.csv +0 -1
  582. data/test/schema/i5/ibm_db_specific_schema.rb +0 -137
  583. data/test/schema/ids/ibm_db_specific_schema.rb +0 -140
  584. data/test/schema/luw/ibm_db_specific_schema.rb +0 -137
  585. data/test/schema/mysql_specific_schema.rb +0 -70
  586. data/test/schema/zOS/ibm_db_specific_schema.rb +0 -208
@@ -0,0 +1,83 @@
1
+ require "cases/helper"
2
+ require "support/ddl_helper"
3
+
4
+ class Mysql2AdapterTest < ActiveRecord::Mysql2TestCase
5
+ include DdlHelper
6
+
7
+ def setup
8
+ @conn = ActiveRecord::Base.connection
9
+ end
10
+
11
+ def test_exec_query_nothing_raises_with_no_result_queries
12
+ assert_nothing_raised do
13
+ with_example_table do
14
+ @conn.exec_query('INSERT INTO ex (number) VALUES (1)')
15
+ @conn.exec_query('DELETE FROM ex WHERE number = 1')
16
+ end
17
+ end
18
+ end
19
+
20
+ def test_valid_column
21
+ with_example_table do
22
+ column = @conn.columns('ex').find { |col| col.name == 'id' }
23
+ assert @conn.valid_type?(column.type)
24
+ end
25
+ end
26
+
27
+ def test_invalid_column
28
+ assert_not @conn.valid_type?(:foobar)
29
+ end
30
+
31
+ def test_columns_for_distinct_zero_orders
32
+ assert_equal "posts.id",
33
+ @conn.columns_for_distinct("posts.id", [])
34
+ end
35
+
36
+ def test_columns_for_distinct_one_order
37
+ assert_equal "posts.id, posts.created_at AS alias_0",
38
+ @conn.columns_for_distinct("posts.id", ["posts.created_at desc"])
39
+ end
40
+
41
+ def test_columns_for_distinct_few_orders
42
+ assert_equal "posts.id, posts.created_at AS alias_0, posts.position AS alias_1",
43
+ @conn.columns_for_distinct("posts.id", ["posts.created_at desc", "posts.position asc"])
44
+ end
45
+
46
+ def test_columns_for_distinct_with_case
47
+ assert_equal(
48
+ 'posts.id, CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END AS alias_0',
49
+ @conn.columns_for_distinct('posts.id',
50
+ ["CASE WHEN author.is_active THEN UPPER(author.name) ELSE UPPER(author.email) END"])
51
+ )
52
+ end
53
+
54
+ def test_columns_for_distinct_blank_not_nil_orders
55
+ assert_equal "posts.id, posts.created_at AS alias_0",
56
+ @conn.columns_for_distinct("posts.id", ["posts.created_at desc", "", " "])
57
+ end
58
+
59
+ def test_columns_for_distinct_with_arel_order
60
+ order = Object.new
61
+ def order.to_sql
62
+ "posts.created_at desc"
63
+ end
64
+ assert_equal "posts.id, posts.created_at AS alias_0",
65
+ @conn.columns_for_distinct("posts.id", [order])
66
+ end
67
+
68
+ def test_table_exists_acts_upon_current_database
69
+ previous_db = @conn.select_value("SELECT DATABASE()")
70
+
71
+ assert @conn.table_exists?("accounts")
72
+ @conn.execute("USE activerecord_unittest2")
73
+ assert_not @conn.table_exists?("accounts")
74
+ ensure
75
+ @conn.execute("USE #{previous_db}")
76
+ end
77
+
78
+ private
79
+
80
+ def with_example_table(definition = 'id int auto_increment primary key, number int, data varchar(255)', &block)
81
+ super(@conn, 'ex', definition, &block)
82
+ end
83
+ end
@@ -0,0 +1,152 @@
1
+ require "cases/helper"
2
+
3
+ # a suite of tests to ensure the ConnectionAdapters#MysqlAdapter can handle tables with
4
+ # reserved word names (ie: group, order, values, etc...)
5
+ class Mysql2ReservedWordTest < ActiveRecord::Mysql2TestCase
6
+ class Group < ActiveRecord::Base
7
+ Group.table_name = 'group'
8
+ belongs_to :select
9
+ has_one :values
10
+ end
11
+
12
+ class Select < ActiveRecord::Base
13
+ Select.table_name = 'select'
14
+ has_many :groups
15
+ end
16
+
17
+ class Values < ActiveRecord::Base
18
+ Values.table_name = 'values'
19
+ end
20
+
21
+ class Distinct < ActiveRecord::Base
22
+ Distinct.table_name = 'distinct'
23
+ has_and_belongs_to_many :selects
24
+ has_many :values, :through => :groups
25
+ end
26
+
27
+ def setup
28
+ @connection = ActiveRecord::Base.connection
29
+
30
+ # we call execute directly here (and do similar below) because ActiveRecord::Base#create_table()
31
+ # will fail with these table names if these test cases fail
32
+
33
+ create_tables_directly 'group'=>'id int auto_increment primary key, `order` varchar(255), select_id int',
34
+ 'select'=>'id int auto_increment primary key',
35
+ 'values'=>'id int auto_increment primary key, group_id int',
36
+ 'distinct'=>'id int auto_increment primary key',
37
+ 'distinct_select'=>'distinct_id int, select_id int'
38
+ end
39
+
40
+ teardown do
41
+ drop_tables_directly ['group', 'select', 'values', 'distinct', 'distinct_select', 'order']
42
+ end
43
+
44
+ # create tables with reserved-word names and columns
45
+ def test_create_tables
46
+ assert_nothing_raised {
47
+ @connection.create_table :order do |t|
48
+ t.column :group, :string
49
+ end
50
+ }
51
+ end
52
+
53
+ # rename tables with reserved-word names
54
+ def test_rename_tables
55
+ assert_nothing_raised { @connection.rename_table(:group, :order) }
56
+ end
57
+
58
+ # alter column with a reserved-word name in a table with a reserved-word name
59
+ def test_change_columns
60
+ assert_nothing_raised { @connection.change_column_default(:group, :order, 'whatever') }
61
+ #the quoting here will reveal any double quoting issues in change_column's interaction with the column method in the adapter
62
+ assert_nothing_raised { @connection.change_column('group', 'order', :Int, :default => 0) }
63
+ assert_nothing_raised { @connection.rename_column(:group, :order, :values) }
64
+ end
65
+
66
+ # introspect table with reserved word name
67
+ def test_introspect
68
+ assert_nothing_raised { @connection.columns(:group) }
69
+ assert_nothing_raised { @connection.indexes(:group) }
70
+ end
71
+
72
+ #fixtures
73
+ self.use_instantiated_fixtures = true
74
+ self.use_transactional_tests = false
75
+
76
+ #activerecord model class with reserved-word table name
77
+ def test_activerecord_model
78
+ create_test_fixtures :select, :distinct, :group, :values, :distinct_select
79
+ x = nil
80
+ assert_nothing_raised { x = Group.new }
81
+ x.order = 'x'
82
+ assert_nothing_raised { x.save }
83
+ x.order = 'y'
84
+ assert_nothing_raised { x.save }
85
+ assert_nothing_raised { Group.find_by_order('y') }
86
+ assert_nothing_raised { Group.find(1) }
87
+ end
88
+
89
+ # has_one association with reserved-word table name
90
+ def test_has_one_associations
91
+ create_test_fixtures :select, :distinct, :group, :values, :distinct_select
92
+ v = nil
93
+ assert_nothing_raised { v = Group.find(1).values }
94
+ assert_equal 2, v.id
95
+ end
96
+
97
+ # belongs_to association with reserved-word table name
98
+ def test_belongs_to_associations
99
+ create_test_fixtures :select, :distinct, :group, :values, :distinct_select
100
+ gs = nil
101
+ assert_nothing_raised { gs = Select.find(2).groups }
102
+ assert_equal gs.length, 2
103
+ assert(gs.collect(&:id).sort == [2, 3])
104
+ end
105
+
106
+ # has_and_belongs_to_many with reserved-word table name
107
+ def test_has_and_belongs_to_many
108
+ create_test_fixtures :select, :distinct, :group, :values, :distinct_select
109
+ s = nil
110
+ assert_nothing_raised { s = Distinct.find(1).selects }
111
+ assert_equal s.length, 2
112
+ assert(s.collect(&:id).sort == [1, 2])
113
+ end
114
+
115
+ # activerecord model introspection with reserved-word table and column names
116
+ def test_activerecord_introspection
117
+ assert_nothing_raised { Group.table_exists? }
118
+ assert_nothing_raised { Group.columns }
119
+ end
120
+
121
+ # Calculations
122
+ def test_calculations_work_with_reserved_words
123
+ assert_nothing_raised { Group.count }
124
+ end
125
+
126
+ def test_associations_work_with_reserved_words
127
+ assert_nothing_raised { Select.all.merge!(:includes => [:groups]).to_a }
128
+ end
129
+
130
+ #the following functions were added to DRY test cases
131
+
132
+ private
133
+ # custom fixture loader, uses FixtureSet#create_fixtures and appends base_path to the current file's path
134
+ def create_test_fixtures(*fixture_names)
135
+ ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT + "/reserved_words", fixture_names)
136
+ end
137
+
138
+ # custom drop table, uses execute on connection to drop a table if it exists. note: escapes table_name
139
+ def drop_tables_directly(table_names, connection = @connection)
140
+ table_names.each do |name|
141
+ connection.drop_table name, if_exists: true
142
+ end
143
+ end
144
+
145
+ # custom create table, uses execute on connection to create a table, note: escapes table_name, does NOT escape columns
146
+ def create_tables_directly(tables, connection = @connection)
147
+ tables.each do |table_name, column_properties|
148
+ connection.execute("CREATE TABLE `#{table_name}` ( #{column_properties} )")
149
+ end
150
+ end
151
+
152
+ end
@@ -0,0 +1,59 @@
1
+ require "cases/helper"
2
+
3
+ class SchemaMigrationsTest < ActiveRecord::Mysql2TestCase
4
+ def test_renaming_index_on_foreign_key
5
+ connection.add_index "engines", "car_id"
6
+ connection.add_foreign_key :engines, :cars, name: "fk_engines_cars"
7
+
8
+ connection.rename_index("engines", "index_engines_on_car_id", "idx_renamed")
9
+ assert_equal ["idx_renamed"], connection.indexes("engines").map(&:name)
10
+ ensure
11
+ connection.remove_foreign_key :engines, name: "fk_engines_cars"
12
+ end
13
+
14
+ def test_initializes_schema_migrations_for_encoding_utf8mb4
15
+ with_encoding_utf8mb4 do
16
+ table_name = ActiveRecord::SchemaMigration.table_name
17
+ connection.drop_table table_name, if_exists: true
18
+
19
+ connection.initialize_schema_migrations_table
20
+
21
+ assert connection.column_exists?(table_name, :version, :string, collation: 'utf8_general_ci')
22
+ end
23
+ end
24
+
25
+ def test_initializes_internal_metadata_for_encoding_utf8mb4
26
+ with_encoding_utf8mb4 do
27
+ table_name = ActiveRecord::InternalMetadata.table_name
28
+ connection.drop_table table_name, if_exists: true
29
+
30
+ connection.initialize_internal_metadata_table
31
+
32
+ assert connection.column_exists?(table_name, :key, :string, collation: 'utf8_general_ci')
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def with_encoding_utf8mb4
39
+ database_name = connection.current_database
40
+ database_info = connection.select_one("SELECT * FROM information_schema.schemata WHERE schema_name = '#{database_name}'")
41
+
42
+ original_charset = database_info["DEFAULT_CHARACTER_SET_NAME"]
43
+ original_collation = database_info["DEFAULT_COLLATION_NAME"]
44
+
45
+ execute("ALTER DATABASE #{database_name} DEFAULT CHARACTER SET utf8mb4")
46
+
47
+ yield
48
+ ensure
49
+ execute("ALTER DATABASE #{database_name} DEFAULT CHARACTER SET #{original_charset} COLLATE #{original_collation}")
50
+ end
51
+
52
+ def connection
53
+ @connection ||= ActiveRecord::Base.connection
54
+ end
55
+
56
+ def execute(sql)
57
+ connection.execute(sql)
58
+ end
59
+ end
@@ -0,0 +1,126 @@
1
+ require "cases/helper"
2
+ require 'models/post'
3
+ require 'models/comment'
4
+
5
+ module ActiveRecord
6
+ module ConnectionAdapters
7
+ class Mysql2SchemaTest < ActiveRecord::Mysql2TestCase
8
+ fixtures :posts
9
+
10
+ def setup
11
+ @connection = ActiveRecord::Base.connection
12
+ db = Post.connection_pool.spec.config[:database]
13
+ table = Post.table_name
14
+ @db_name = db
15
+
16
+ @omgpost = Class.new(ActiveRecord::Base) do
17
+ self.inheritance_column = :disabled
18
+ self.table_name = "#{db}.#{table}"
19
+ def self.name; 'Post'; end
20
+ end
21
+ end
22
+
23
+ def test_float_limits
24
+ @connection.create_table :mysql_doubles do |t|
25
+ t.float :float_no_limit
26
+ t.float :float_short, limit: 5
27
+ t.float :float_long, limit: 53
28
+
29
+ t.float :float_23, limit: 23
30
+ t.float :float_24, limit: 24
31
+ t.float :float_25, limit: 25
32
+ end
33
+
34
+ column_no_limit = @connection.columns(:mysql_doubles).find { |c| c.name == 'float_no_limit' }
35
+ column_short = @connection.columns(:mysql_doubles).find { |c| c.name == 'float_short' }
36
+ column_long = @connection.columns(:mysql_doubles).find { |c| c.name == 'float_long' }
37
+
38
+ column_23 = @connection.columns(:mysql_doubles).find { |c| c.name == 'float_23' }
39
+ column_24 = @connection.columns(:mysql_doubles).find { |c| c.name == 'float_24' }
40
+ column_25 = @connection.columns(:mysql_doubles).find { |c| c.name == 'float_25' }
41
+
42
+ # Mysql floats are precision 0..24, Mysql doubles are precision 25..53
43
+ assert_equal 24, column_no_limit.limit
44
+ assert_equal 24, column_short.limit
45
+ assert_equal 53, column_long.limit
46
+
47
+ assert_equal 24, column_23.limit
48
+ assert_equal 24, column_24.limit
49
+ assert_equal 53, column_25.limit
50
+ ensure
51
+ @connection.drop_table "mysql_doubles", if_exists: true
52
+ end
53
+
54
+ def test_schema
55
+ assert @omgpost.first
56
+ end
57
+
58
+ def test_primary_key
59
+ assert_equal 'id', @omgpost.primary_key
60
+ end
61
+
62
+ def test_data_source_exists?
63
+ name = @omgpost.table_name
64
+ assert @connection.data_source_exists?(name), "#{name} data_source should exist"
65
+ end
66
+
67
+ def test_data_source_exists_wrong_schema
68
+ assert(!@connection.data_source_exists?("#{@db_name}.zomg"), "data_source should not exist")
69
+ end
70
+
71
+ def test_dump_indexes
72
+ index_a_name = 'index_key_tests_on_snack'
73
+ index_b_name = 'index_key_tests_on_pizza'
74
+ index_c_name = 'index_key_tests_on_awesome'
75
+
76
+ table = 'key_tests'
77
+
78
+ indexes = @connection.indexes(table).sort_by(&:name)
79
+ assert_equal 3,indexes.size
80
+
81
+ index_a = indexes.select{|i| i.name == index_a_name}[0]
82
+ index_b = indexes.select{|i| i.name == index_b_name}[0]
83
+ index_c = indexes.select{|i| i.name == index_c_name}[0]
84
+ assert_equal :btree, index_a.using
85
+ assert_nil index_a.type
86
+ assert_equal :btree, index_b.using
87
+ assert_nil index_b.type
88
+
89
+ assert_nil index_c.using
90
+ assert_equal :fulltext, index_c.type
91
+ end
92
+
93
+ unless mysql_enforcing_gtid_consistency?
94
+ def test_drop_temporary_table
95
+ @connection.transaction do
96
+ @connection.create_table(:temp_table, temporary: true)
97
+ # if it doesn't properly say DROP TEMPORARY TABLE, the transaction commit
98
+ # will complain that no transaction is active
99
+ @connection.drop_table(:temp_table, temporary: true)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+
107
+ class Mysql2AnsiQuotesTest < ActiveRecord::Mysql2TestCase
108
+ def setup
109
+ @connection = ActiveRecord::Base.connection
110
+ @connection.execute("SET SESSION sql_mode='ANSI_QUOTES'")
111
+ end
112
+
113
+ def teardown
114
+ @connection.reconnect!
115
+ end
116
+
117
+ def test_primary_key_method_with_ansi_quotes
118
+ assert_equal "id", @connection.primary_key("topics")
119
+ end
120
+
121
+ def test_foreign_keys_method_with_ansi_quotes
122
+ fks = @connection.foreign_keys("lessons_students")
123
+ assert_equal([["lessons_students", "students", :cascade]],
124
+ fks.map {|fk| [fk.from_table, fk.to_table, fk.on_delete] })
125
+ end
126
+ end
@@ -0,0 +1,36 @@
1
+ require "cases/helper"
2
+ require 'models/topic'
3
+ require 'models/reply'
4
+
5
+ class Mysql2StoredProcedureTest < ActiveRecord::Mysql2TestCase
6
+ fixtures :topics
7
+
8
+ def setup
9
+ @connection = ActiveRecord::Base.connection
10
+ unless ActiveRecord::Base.connection.version >= '5.6.0'
11
+ skip("no stored procedure support")
12
+ end
13
+ end
14
+
15
+ # Test that MySQL allows multiple results for stored procedures
16
+ #
17
+ # In MySQL 5.6, CLIENT_MULTI_RESULTS is enabled by default.
18
+ # http://dev.mysql.com/doc/refman/5.6/en/call.html
19
+ def test_multi_results
20
+ rows = @connection.select_rows('CALL ten();')
21
+ assert_equal 10, rows[0][0].to_i, "ten() did not return 10 as expected: #{rows.inspect}"
22
+ assert @connection.active?, "Bad connection use by 'Mysql2Adapter.select_rows'"
23
+ end
24
+
25
+ def test_multi_results_from_select_one
26
+ row = @connection.select_one('CALL topics(1);')
27
+ assert_equal 'David', row['author_name']
28
+ assert @connection.active?, "Bad connection use by 'Mysql2Adapter.select_one'"
29
+ end
30
+
31
+ def test_multi_results_from_find_by_sql
32
+ topics = Topic.find_by_sql 'CALL topics(3);'
33
+ assert_equal 3, topics.size
34
+ assert @connection.active?, "Bad connection use by 'Mysql2Adapter.select'"
35
+ end
36
+ end