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
@@ -1,39 +1,39 @@
1
- require "cases/helper"
2
-
3
- module ActiveRecord
4
- class Migration
5
- class << self; attr_accessor :message_count; end
6
- self.message_count = 0
7
-
8
- module TestHelper
9
- attr_reader :connection, :table_name
10
-
11
- CONNECTION_METHODS = %w[add_column remove_column rename_column add_index change_column rename_table column_exists? index_exists? add_reference add_belongs_to remove_reference remove_references remove_belongs_to]
12
-
13
- class TestModel < ActiveRecord::Base
14
- self.table_name = :test_models
15
- end
16
-
17
- def setup
18
- super
19
- @connection = ActiveRecord::Base.connection
20
- connection.create_table :test_models do |t|
21
- t.timestamps null: true
22
- end
23
-
24
- TestModel.reset_column_information
25
- end
26
-
27
- def teardown
28
- super
29
- TestModel.reset_table_name
30
- TestModel.reset_sequence_name
31
- connection.drop_table :test_models rescue nil
32
- end
33
-
34
- private
35
-
36
- delegate(*CONNECTION_METHODS, to: :connection)
37
- end
38
- end
39
- end
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ class Migration
5
+ class << self; attr_accessor :message_count; end
6
+ self.message_count = 0
7
+
8
+ module TestHelper
9
+ attr_reader :connection, :table_name
10
+
11
+ CONNECTION_METHODS = %w[add_column remove_column rename_column add_index change_column rename_table column_exists? index_exists? add_reference add_belongs_to remove_reference remove_references remove_belongs_to]
12
+
13
+ class TestModel < ActiveRecord::Base
14
+ self.table_name = :test_models
15
+ end
16
+
17
+ def setup
18
+ super
19
+ @connection = ActiveRecord::Base.connection
20
+ connection.create_table :test_models do |t|
21
+ t.timestamps null: true
22
+ end
23
+
24
+ TestModel.reset_column_information
25
+ end
26
+
27
+ def teardown
28
+ super
29
+ TestModel.reset_table_name
30
+ TestModel.reset_sequence_name
31
+ connection.drop_table :test_models, if_exists: true
32
+ end
33
+
34
+ private
35
+
36
+ delegate(*CONNECTION_METHODS, to: :connection)
37
+ end
38
+ end
39
+ end
@@ -1,216 +1,218 @@
1
- require 'cases/helper'
2
-
3
- module ActiveRecord
4
- class Migration
5
- class IndexTest < ActiveRecord::TestCase
6
- attr_reader :connection, :table_name
7
-
8
- def setup
9
- super
10
- @connection = ActiveRecord::Base.connection
11
- @table_name = :testings
12
-
13
- if current_adapter?(:IBM_DBAdapter)
14
- connection.drop_table :testings rescue nil
15
- end
16
-
17
- connection.create_table table_name do |t|
18
- t.column :foo, :string, :limit => 100
19
- t.column :bar, :string, :limit => 100
20
-
21
- t.string :first_name
22
- t.string :last_name, :limit => 100
23
- t.string :key, :limit => 100
24
- t.boolean :administrator
25
- end
26
- end
27
-
28
- teardown do
29
- connection.drop_table :testings rescue nil
30
- ActiveRecord::Base.primary_key_prefix_type = nil
31
- end
32
-
33
- def test_rename_index
34
- # keep the names short to make Oracle and similar behave
35
- connection.add_index(table_name, [:foo], :name => 'old_idx')
36
- connection.rename_index(table_name, 'old_idx', 'new_idx')
37
-
38
- # if the adapter doesn't support the indexes call, pick defaults that let the test pass
39
- assert_not connection.index_name_exists?(table_name, 'old_idx', false)
40
- assert connection.index_name_exists?(table_name, 'new_idx', true)
41
- end
42
-
43
- def test_rename_index_too_long
44
- too_long_index_name = good_index_name + 'x'
45
- # keep the names short to make Oracle and similar behave
46
- connection.add_index(table_name, [:foo], :name => 'old_idx')
47
- e = assert_raises(ArgumentError) {
48
- connection.rename_index(table_name, 'old_idx', too_long_index_name)
49
- }
50
- assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)
51
-
52
- # if the adapter doesn't support the indexes call, pick defaults that let the test pass
53
- assert connection.index_name_exists?(table_name, 'old_idx', false)
54
- end
55
-
56
-
57
- def test_double_add_index
58
- connection.add_index(table_name, [:foo], :name => 'some_idx')
59
- assert_raises(ArgumentError) {
60
- connection.add_index(table_name, [:foo], :name => 'some_idx')
61
- }
62
- end
63
-
64
- def test_remove_nonexistent_index
65
- if current_adapter?(:IBM_DBAdapter)
66
- assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
67
- else
68
- assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
69
- end
70
- end
71
-
72
- def test_add_index_works_with_long_index_names
73
- connection.add_index(table_name, "foo", name: good_index_name)
74
-
75
- assert connection.index_name_exists?(table_name, good_index_name, false)
76
- connection.remove_index(table_name, name: good_index_name)
77
- end
78
-
79
- def test_add_index_does_not_accept_too_long_index_names
80
- too_long_index_name = good_index_name + 'x'
81
-
82
- e = assert_raises(ArgumentError) {
83
- connection.add_index(table_name, "foo", name: too_long_index_name)
84
- }
85
- assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)
86
-
87
- assert_not connection.index_name_exists?(table_name, too_long_index_name, false)
88
- connection.add_index(table_name, "foo", :name => good_index_name)
89
- end
90
-
91
- def test_internal_index_with_name_matching_database_limit
92
- good_index_name = 'x' * connection.index_name_length
93
- connection.add_index(table_name, "foo", name: good_index_name, internal: true)
94
-
95
- assert connection.index_name_exists?(table_name, good_index_name, false)
96
- connection.remove_index(table_name, name: good_index_name)
97
- end
98
-
99
- def test_index_symbol_names
100
- connection.add_index table_name, :foo, :name => :symbol_index_name
101
- assert connection.index_exists?(table_name, :foo, :name => :symbol_index_name)
102
-
103
- connection.remove_index table_name, :name => :symbol_index_name
104
- assert_not connection.index_exists?(table_name, :foo, :name => :symbol_index_name)
105
- end
106
-
107
- def test_index_exists
108
- connection.add_index :testings, :foo
109
-
110
- assert connection.index_exists?(:testings, :foo)
111
- assert !connection.index_exists?(:testings, :bar)
112
- end
113
-
114
- def test_index_exists_on_multiple_columns
115
- connection.add_index :testings, [:foo, :bar]
116
-
117
- assert connection.index_exists?(:testings, [:foo, :bar])
118
- end
119
-
120
- def test_index_exists_with_custom_name_checks_columns
121
- connection.add_index :testings, [:foo, :bar], name: "my_index"
122
- assert connection.index_exists?(:testings, [:foo, :bar], name: "my_index")
123
- assert_not connection.index_exists?(:testings, [:foo], name: "my_index")
124
- end
125
-
126
- def test_valid_index_options
127
- assert_raise ArgumentError do
128
- connection.add_index :testings, :foo, unqiue: true
129
- end
130
- end
131
-
132
- def test_unique_index_exists
133
- connection.add_index :testings, :foo, :unique => true
134
-
135
- assert connection.index_exists?(:testings, :foo, :unique => true)
136
- end
137
-
138
- def test_named_index_exists
139
- connection.add_index :testings, :foo, :name => "custom_index_name"
140
-
141
- assert connection.index_exists?(:testings, :foo, :name => "custom_index_name")
142
- end
143
-
144
- def test_add_index_attribute_length_limit
145
- connection.add_index :testings, [:foo, :bar], :length => {:foo => 10, :bar => nil}
146
-
147
- assert connection.index_exists?(:testings, [:foo, :bar])
148
- end
149
-
150
- def test_add_index
151
- connection.add_index("testings", "last_name")
152
- connection.remove_index("testings", "last_name")
153
-
154
- connection.add_index("testings", ["last_name", "first_name"])
155
- connection.remove_index("testings", :column => ["last_name", "first_name"])
156
-
157
- # Oracle adapter cannot have specified index name larger than 30 characters
158
- # Oracle adapter is shortening index name when just column list is given
159
- unless current_adapter?(:OracleAdapter)
160
- connection.add_index("testings", ["last_name", "first_name"])
161
- connection.remove_index("testings", :name => :index_testings_on_last_name_and_first_name)
162
- connection.add_index("testings", ["last_name", "first_name"])
163
- connection.remove_index("testings", "last_name_and_first_name")
164
- end
165
- connection.add_index("testings", ["last_name", "first_name"])
166
- connection.remove_index("testings", ["last_name", "first_name"])
167
-
168
- connection.add_index("testings", ["last_name"], :length => 10)
169
- connection.remove_index("testings", "last_name")
170
-
171
- connection.add_index("testings", ["last_name"], :length => {:last_name => 10})
172
- connection.remove_index("testings", ["last_name"])
173
-
174
- connection.add_index("testings", ["last_name", "first_name"], :length => 10)
175
- connection.remove_index("testings", ["last_name", "first_name"])
176
-
177
- connection.add_index("testings", ["last_name", "first_name"], :length => {:last_name => 10, :first_name => 20})
178
- connection.remove_index("testings", ["last_name", "first_name"])
179
-
180
- connection.add_index("testings", ["key"], :name => "key_idx", :unique => true)
181
- connection.remove_index("testings", :name => "key_idx", :unique => true)
182
-
183
- connection.add_index("testings", %w(last_name first_name administrator), :name => "named_admin")
184
- connection.remove_index("testings", :name => "named_admin")
185
-
186
- # Selected adapters support index sort order
187
- if current_adapter?(:SQLite3Adapter, :MysqlAdapter, :Mysql2Adapter, :PostgreSQLAdapter)
188
- connection.add_index("testings", ["last_name"], :order => {:last_name => :desc})
189
- connection.remove_index("testings", ["last_name"])
190
- connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc})
191
- connection.remove_index("testings", ["last_name", "first_name"])
192
- connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc, :first_name => :asc})
193
- connection.remove_index("testings", ["last_name", "first_name"])
194
- connection.add_index("testings", ["last_name", "first_name"], :order => :desc)
195
- connection.remove_index("testings", ["last_name", "first_name"])
196
- end
197
- end
198
-
199
- if current_adapter?(:PostgreSQLAdapter)
200
- def test_add_partial_index
201
- connection.add_index("testings", "last_name", :where => "first_name = 'john doe'")
202
- assert connection.index_exists?("testings", "last_name")
203
-
204
- connection.remove_index("testings", "last_name")
205
- assert !connection.index_exists?("testings", "last_name")
206
- end
207
- end
208
-
209
- private
210
- def good_index_name
211
- 'x' * connection.allowed_index_name_length
212
- end
213
-
214
- end
215
- end
216
- end
1
+ require 'cases/helper'
2
+
3
+ module ActiveRecord
4
+ class Migration
5
+ class IndexTest < ActiveRecord::TestCase
6
+ attr_reader :connection, :table_name
7
+
8
+ def setup
9
+ super
10
+ @connection = ActiveRecord::Base.connection
11
+ @table_name = :testings
12
+
13
+ connection.create_table table_name do |t|
14
+ t.column :foo, :string, :limit => 100
15
+ t.column :bar, :string, :limit => 100
16
+
17
+ t.string :first_name
18
+ t.string :last_name, :limit => 100
19
+ t.string :key, :limit => 100
20
+ t.boolean :administrator
21
+ end
22
+ end
23
+
24
+ teardown do
25
+ connection.drop_table :testings rescue nil
26
+ ActiveRecord::Base.primary_key_prefix_type = nil
27
+ end
28
+
29
+ def test_rename_index
30
+ # keep the names short to make Oracle and similar behave
31
+ connection.add_index(table_name, [:foo], :name => 'old_idx')
32
+ connection.rename_index(table_name, 'old_idx', 'new_idx')
33
+
34
+ # if the adapter doesn't support the indexes call, pick defaults that let the test pass
35
+ assert_not connection.index_name_exists?(table_name, 'old_idx', false)
36
+ assert connection.index_name_exists?(table_name, 'new_idx', true)
37
+ end
38
+
39
+ def test_rename_index_too_long
40
+ too_long_index_name = good_index_name + 'x'
41
+ # keep the names short to make Oracle and similar behave
42
+ connection.add_index(table_name, [:foo], :name => 'old_idx')
43
+ e = assert_raises(ArgumentError) {
44
+ connection.rename_index(table_name, 'old_idx', too_long_index_name)
45
+ }
46
+ assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)
47
+
48
+ # if the adapter doesn't support the indexes call, pick defaults that let the test pass
49
+ assert connection.index_name_exists?(table_name, 'old_idx', false)
50
+ end
51
+
52
+
53
+ def test_double_add_index
54
+ connection.add_index(table_name, [:foo], :name => 'some_idx')
55
+ assert_raises(ArgumentError) {
56
+ connection.add_index(table_name, [:foo], :name => 'some_idx')
57
+ }
58
+ end
59
+
60
+ def test_remove_nonexistent_index
61
+ assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
62
+ end
63
+
64
+ def test_add_index_works_with_long_index_names
65
+ connection.add_index(table_name, "foo", name: good_index_name)
66
+
67
+ assert connection.index_name_exists?(table_name, good_index_name, false)
68
+ connection.remove_index(table_name, name: good_index_name)
69
+ end
70
+
71
+ def test_add_index_does_not_accept_too_long_index_names
72
+ too_long_index_name = good_index_name + 'x'
73
+
74
+ e = assert_raises(ArgumentError) {
75
+ connection.add_index(table_name, "foo", name: too_long_index_name)
76
+ }
77
+ assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)
78
+
79
+ assert_not connection.index_name_exists?(table_name, too_long_index_name, false)
80
+ connection.add_index(table_name, "foo", :name => good_index_name)
81
+ end
82
+
83
+ def test_internal_index_with_name_matching_database_limit
84
+ good_index_name = 'x' * connection.index_name_length
85
+ connection.add_index(table_name, "foo", name: good_index_name, internal: true)
86
+
87
+ assert connection.index_name_exists?(table_name, good_index_name, false)
88
+ connection.remove_index(table_name, name: good_index_name)
89
+ end
90
+
91
+ def test_index_symbol_names
92
+ connection.add_index table_name, :foo, :name => :symbol_index_name
93
+ assert connection.index_exists?(table_name, :foo, :name => :symbol_index_name)
94
+
95
+ connection.remove_index table_name, :name => :symbol_index_name
96
+ assert_not connection.index_exists?(table_name, :foo, :name => :symbol_index_name)
97
+ end
98
+
99
+ def test_index_exists
100
+ connection.add_index :testings, :foo
101
+
102
+ assert connection.index_exists?(:testings, :foo)
103
+ assert !connection.index_exists?(:testings, :bar)
104
+ end
105
+
106
+ def test_index_exists_on_multiple_columns
107
+ connection.add_index :testings, [:foo, :bar]
108
+
109
+ assert connection.index_exists?(:testings, [:foo, :bar])
110
+ end
111
+
112
+ def test_index_exists_with_custom_name_checks_columns
113
+ connection.add_index :testings, [:foo, :bar], name: "my_index"
114
+ assert connection.index_exists?(:testings, [:foo, :bar], name: "my_index")
115
+ assert_not connection.index_exists?(:testings, [:foo], name: "my_index")
116
+ end
117
+
118
+ def test_valid_index_options
119
+ assert_raise ArgumentError do
120
+ connection.add_index :testings, :foo, unqiue: true
121
+ end
122
+ end
123
+
124
+ def test_unique_index_exists
125
+ connection.add_index :testings, :foo, :unique => true
126
+
127
+ assert connection.index_exists?(:testings, :foo, :unique => true)
128
+ end
129
+
130
+ def test_named_index_exists
131
+ connection.add_index :testings, :foo, :name => "custom_index_name"
132
+
133
+ assert connection.index_exists?(:testings, :foo)
134
+ assert connection.index_exists?(:testings, :foo, :name => "custom_index_name")
135
+ assert !connection.index_exists?(:testings, :foo, :name => "other_index_name")
136
+ end
137
+
138
+ def test_remove_named_index
139
+ connection.add_index :testings, :foo, :name => "custom_index_name"
140
+
141
+ assert connection.index_exists?(:testings, :foo)
142
+ connection.remove_index :testings, :foo
143
+ assert !connection.index_exists?(:testings, :foo)
144
+ end
145
+
146
+ def test_add_index_attribute_length_limit
147
+ connection.add_index :testings, [:foo, :bar], :length => {:foo => 10, :bar => nil}
148
+
149
+ assert connection.index_exists?(:testings, [:foo, :bar])
150
+ end
151
+
152
+ def test_add_index
153
+ connection.add_index("testings", "last_name")
154
+ connection.remove_index("testings", "last_name")
155
+
156
+ connection.add_index("testings", ["last_name", "first_name"])
157
+ connection.remove_index("testings", :column => ["last_name", "first_name"])
158
+
159
+ # Oracle adapter cannot have specified index name larger than 30 characters
160
+ # Oracle adapter is shortening index name when just column list is given
161
+ unless current_adapter?(:OracleAdapter)
162
+ connection.add_index("testings", ["last_name", "first_name"])
163
+ connection.remove_index("testings", :name => :index_testings_on_last_name_and_first_name)
164
+ connection.add_index("testings", ["last_name", "first_name"])
165
+ connection.remove_index("testings", "last_name_and_first_name")
166
+ end
167
+ connection.add_index("testings", ["last_name", "first_name"])
168
+ connection.remove_index("testings", ["last_name", "first_name"])
169
+
170
+ connection.add_index("testings", ["last_name"], :length => 10)
171
+ connection.remove_index("testings", "last_name")
172
+
173
+ connection.add_index("testings", ["last_name"], :length => {:last_name => 10})
174
+ connection.remove_index("testings", ["last_name"])
175
+
176
+ connection.add_index("testings", ["last_name", "first_name"], :length => 10)
177
+ connection.remove_index("testings", ["last_name", "first_name"])
178
+
179
+ connection.add_index("testings", ["last_name", "first_name"], :length => {:last_name => 10, :first_name => 20})
180
+ connection.remove_index("testings", ["last_name", "first_name"])
181
+
182
+ connection.add_index("testings", ["key"], :name => "key_idx", :unique => true)
183
+ connection.remove_index("testings", :name => "key_idx", :unique => true)
184
+
185
+ connection.add_index("testings", %w(last_name first_name administrator), :name => "named_admin")
186
+ connection.remove_index("testings", :name => "named_admin")
187
+
188
+ # Selected adapters support index sort order
189
+ if current_adapter?(:SQLite3Adapter, :Mysql2Adapter, :PostgreSQLAdapter)
190
+ connection.add_index("testings", ["last_name"], :order => {:last_name => :desc})
191
+ connection.remove_index("testings", ["last_name"])
192
+ connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc})
193
+ connection.remove_index("testings", ["last_name", "first_name"])
194
+ connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc, :first_name => :asc})
195
+ connection.remove_index("testings", ["last_name", "first_name"])
196
+ connection.add_index("testings", ["last_name", "first_name"], :order => :desc)
197
+ connection.remove_index("testings", ["last_name", "first_name"])
198
+ end
199
+ end
200
+
201
+ if current_adapter?(:PostgreSQLAdapter)
202
+ def test_add_partial_index
203
+ connection.add_index("testings", "last_name", :where => "first_name = 'john doe'")
204
+ assert connection.index_exists?("testings", "last_name")
205
+
206
+ connection.remove_index("testings", "last_name")
207
+ assert !connection.index_exists?("testings", "last_name")
208
+ end
209
+ end
210
+
211
+ private
212
+ def good_index_name
213
+ 'x' * connection.allowed_index_name_length
214
+ end
215
+
216
+ end
217
+ end
218
+ end