ibm_db 3.0.4-x86-mingw32 → 5.0.4-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 (593) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +8 -1
  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 +269 -0
  8. data/ext/Makefile.nt32 +181 -181
  9. data/ext/Makefile.nt32.191 +212 -212
  10. data/ext/extconf.rb +322 -291
  11. data/ext/gil_release_version +3 -0
  12. data/ext/ibm_db-i386-mingw32.def +2 -0
  13. data/ext/ibm_db.c +11879 -11884
  14. data/ext/ibm_db.o +0 -0
  15. data/ext/ibm_db.so +0 -0
  16. data/ext/mkmf.log +110 -0
  17. data/ext/ruby_ibm_db.h +241 -241
  18. data/ext/ruby_ibm_db_cli.c +866 -866
  19. data/ext/ruby_ibm_db_cli.h +500 -500
  20. data/ext/ruby_ibm_db_cli.o +0 -0
  21. data/ext/unicode_support_version +3 -0
  22. data/init.rb +41 -41
  23. data/lib/IBM_DB.rb +27 -27
  24. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3561 -3177
  25. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -2
  26. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  27. data/lib/mswin32/ibm_db.rb +91 -123
  28. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  29. data/test/active_record/connection_adapters/fake_adapter.rb +49 -46
  30. data/test/assets/example.log +1 -1
  31. data/test/assets/test.txt +1 -1
  32. data/test/cases/adapter_test.rb +351 -261
  33. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  34. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  35. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  36. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  37. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  38. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  39. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  40. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  41. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  42. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  43. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  44. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  45. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  46. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  47. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  48. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  49. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  50. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  51. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  52. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  53. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  54. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  55. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  56. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  57. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  58. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  59. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  60. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  61. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  62. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  63. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  64. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  65. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  66. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  67. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  68. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  69. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  70. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  71. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  72. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  73. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  74. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  75. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  76. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  77. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  78. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  79. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  80. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  81. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  82. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  83. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  84. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  85. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  86. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  87. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  88. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  89. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  90. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  91. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  92. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  93. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  94. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  95. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  96. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  97. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  98. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  99. data/test/cases/aggregations_test.rb +168 -158
  100. data/test/cases/ar_schema_test.rb +146 -161
  101. data/test/cases/associations/association_scope_test.rb +16 -21
  102. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1029
  103. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  104. data/test/cases/associations/callbacks_test.rb +190 -192
  105. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  106. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  107. data/test/cases/associations/eager_load_nested_include_test.rb +126 -128
  108. data/test/cases/associations/eager_singularization_test.rb +148 -148
  109. data/test/cases/associations/eager_test.rb +1514 -1411
  110. data/test/cases/associations/extension_test.rb +87 -82
  111. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -932
  112. data/test/cases/associations/has_many_associations_test.rb +2501 -2162
  113. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1204
  114. data/test/cases/associations/has_one_associations_test.rb +707 -610
  115. data/test/cases/associations/has_one_through_associations_test.rb +383 -380
  116. data/test/cases/associations/inner_join_association_test.rb +139 -139
  117. data/test/cases/associations/inverse_associations_test.rb +733 -693
  118. data/test/cases/associations/join_model_test.rb +777 -754
  119. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  120. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  121. data/test/cases/associations/required_test.rb +102 -82
  122. data/test/cases/associations_test.rb +385 -380
  123. data/test/cases/attribute_decorators_test.rb +126 -125
  124. data/test/cases/attribute_methods/read_test.rb +60 -60
  125. data/test/cases/attribute_methods_test.rb +1009 -952
  126. data/test/cases/attribute_set_test.rb +270 -200
  127. data/test/cases/attribute_test.rb +246 -180
  128. data/test/cases/attributes_test.rb +253 -136
  129. data/test/cases/autosave_association_test.rb +1708 -1595
  130. data/test/cases/base_test.rb +1713 -1638
  131. data/test/cases/batches_test.rb +489 -212
  132. data/test/cases/binary_test.rb +44 -52
  133. data/test/cases/bind_parameter_test.rb +110 -100
  134. data/test/cases/cache_key_test.rb +26 -0
  135. data/test/cases/calculations_test.rb +798 -646
  136. data/test/cases/callbacks_test.rb +636 -543
  137. data/test/cases/clone_test.rb +40 -40
  138. data/test/cases/coders/json_test.rb +15 -0
  139. data/test/cases/coders/yaml_column_test.rb +63 -63
  140. data/test/cases/collection_cache_key_test.rb +115 -0
  141. data/test/cases/column_alias_test.rb +17 -17
  142. data/test/cases/column_definition_test.rb +92 -123
  143. data/test/cases/comment_test.rb +145 -0
  144. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -54
  145. data/test/cases/connection_adapters/connection_handler_test.rb +160 -53
  146. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  147. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -293
  148. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -65
  149. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  150. data/test/cases/connection_adapters/schema_cache_test.rb +61 -56
  151. data/test/cases/connection_adapters/type_lookup_test.rb +118 -110
  152. data/test/cases/connection_management_test.rb +112 -122
  153. data/test/cases/connection_pool_test.rb +521 -346
  154. data/test/cases/connection_specification/resolver_test.rb +131 -116
  155. data/test/cases/core_test.rb +112 -112
  156. data/test/cases/counter_cache_test.rb +214 -209
  157. data/test/cases/custom_locking_test.rb +17 -17
  158. data/test/cases/database_statements_test.rb +34 -19
  159. data/test/cases/{invalid_date_test.rb → date_test.rb} +44 -32
  160. data/test/cases/date_time_precision_test.rb +107 -0
  161. data/test/cases/date_time_test.rb +61 -61
  162. data/test/cases/defaults_test.rb +219 -223
  163. data/test/cases/dirty_test.rb +763 -775
  164. data/test/cases/disconnected_test.rb +30 -28
  165. data/test/cases/dup_test.rb +157 -157
  166. data/test/cases/enum_test.rb +444 -290
  167. data/test/cases/errors_test.rb +16 -0
  168. data/test/cases/explain_subscriber_test.rb +64 -64
  169. data/test/cases/explain_test.rb +87 -76
  170. data/test/cases/finder_respond_to_test.rb +60 -60
  171. data/test/cases/finder_test.rb +1294 -1166
  172. data/test/cases/fixture_set/file_test.rb +156 -138
  173. data/test/cases/fixtures_test.rb +988 -897
  174. data/test/cases/forbidden_attributes_protection_test.rb +165 -99
  175. data/test/cases/habtm_destroy_order_test.rb +61 -61
  176. data/test/cases/helper.rb +204 -210
  177. data/test/cases/hot_compatibility_test.rb +142 -54
  178. data/test/cases/i18n_test.rb +45 -45
  179. data/test/cases/inheritance_test.rb +606 -375
  180. data/test/cases/integration_test.rb +155 -139
  181. data/test/cases/invalid_connection_test.rb +24 -22
  182. data/test/cases/invertible_migration_test.rb +387 -295
  183. data/test/cases/json_serialization_test.rb +311 -302
  184. data/test/cases/locking_test.rb +493 -477
  185. data/test/cases/log_subscriber_test.rb +225 -136
  186. data/test/cases/migration/change_schema_test.rb +458 -472
  187. data/test/cases/migration/change_table_test.rb +256 -224
  188. data/test/cases/migration/column_attributes_test.rb +176 -192
  189. data/test/cases/migration/column_positioning_test.rb +56 -56
  190. data/test/cases/migration/columns_test.rb +310 -304
  191. data/test/cases/migration/command_recorder_test.rb +350 -305
  192. data/test/cases/migration/compatibility_test.rb +118 -0
  193. data/test/cases/migration/create_join_table_test.rb +157 -148
  194. data/test/cases/migration/foreign_key_test.rb +362 -360
  195. data/test/cases/migration/helper.rb +39 -39
  196. data/test/cases/migration/index_test.rb +218 -216
  197. data/test/cases/migration/logger_test.rb +36 -36
  198. data/test/cases/migration/pending_migrations_test.rb +52 -53
  199. data/test/cases/migration/references_foreign_key_test.rb +221 -214
  200. data/test/cases/migration/references_index_test.rb +101 -101
  201. data/test/cases/migration/references_statements_test.rb +136 -116
  202. data/test/cases/migration/rename_table_test.rb +93 -93
  203. data/test/cases/migration_test.rb +1157 -959
  204. data/test/cases/migrator_test.rb +471 -388
  205. data/test/cases/mixin_test.rb +68 -70
  206. data/test/cases/modules_test.rb +172 -173
  207. data/test/cases/multiparameter_attributes_test.rb +372 -350
  208. data/test/cases/multiple_db_test.rb +122 -115
  209. data/test/cases/nested_attributes_test.rb +1098 -1057
  210. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  211. data/test/cases/persistence_test.rb +1001 -909
  212. data/test/cases/pooled_connections_test.rb +81 -81
  213. data/test/cases/primary_keys_test.rb +376 -237
  214. data/test/cases/query_cache_test.rb +446 -326
  215. data/test/cases/quoting_test.rb +202 -156
  216. data/test/cases/readonly_test.rb +119 -118
  217. data/test/cases/reaper_test.rb +85 -85
  218. data/test/cases/reflection_test.rb +509 -454
  219. data/test/cases/relation/delegation_test.rb +63 -68
  220. data/test/cases/relation/merging_test.rb +157 -161
  221. data/test/cases/relation/mutation_test.rb +183 -165
  222. data/test/cases/relation/or_test.rb +92 -0
  223. data/test/cases/relation/predicate_builder_test.rb +16 -14
  224. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  225. data/test/cases/relation/where_chain_test.rb +105 -181
  226. data/test/cases/relation/where_clause_test.rb +182 -0
  227. data/test/cases/relation/where_test.rb +322 -300
  228. data/test/cases/relation_test.rb +328 -297
  229. data/test/cases/relations_test.rb +2026 -1815
  230. data/test/cases/reload_models_test.rb +22 -22
  231. data/test/cases/result_test.rb +90 -80
  232. data/test/cases/sanitize_test.rb +176 -83
  233. data/test/cases/schema_dumper_test.rb +457 -463
  234. data/test/cases/schema_loading_test.rb +52 -0
  235. data/test/cases/scoping/default_scoping_test.rb +528 -454
  236. data/test/cases/scoping/named_scoping_test.rb +561 -524
  237. data/test/cases/scoping/relation_scoping_test.rb +400 -357
  238. data/test/cases/secure_token_test.rb +32 -0
  239. data/test/cases/serialization_test.rb +104 -104
  240. data/test/cases/serialized_attribute_test.rb +364 -277
  241. data/test/cases/statement_cache_test.rb +136 -98
  242. data/test/cases/store_test.rb +195 -194
  243. data/test/cases/suppressor_test.rb +63 -0
  244. data/test/cases/tasks/database_tasks_test.rb +462 -396
  245. data/test/cases/tasks/mysql_rake_test.rb +345 -311
  246. data/test/cases/tasks/postgresql_rake_test.rb +304 -245
  247. data/test/cases/tasks/sqlite_rake_test.rb +220 -193
  248. data/test/cases/test_case.rb +131 -123
  249. data/test/cases/test_fixtures_test.rb +36 -0
  250. data/test/cases/time_precision_test.rb +103 -0
  251. data/test/cases/timestamp_test.rb +501 -468
  252. data/test/cases/touch_later_test.rb +121 -0
  253. data/test/cases/transaction_callbacks_test.rb +518 -452
  254. data/test/cases/transaction_isolation_test.rb +106 -106
  255. data/test/cases/transactions_test.rb +835 -817
  256. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  257. data/test/cases/type/date_time_test.rb +14 -0
  258. data/test/cases/type/integer_test.rb +27 -121
  259. data/test/cases/type/string_test.rb +22 -36
  260. data/test/cases/type/type_map_test.rb +177 -177
  261. data/test/cases/type_test.rb +39 -0
  262. data/test/cases/types_test.rb +24 -141
  263. data/test/cases/unconnected_test.rb +33 -33
  264. data/test/cases/validations/absence_validation_test.rb +73 -0
  265. data/test/cases/validations/association_validation_test.rb +97 -86
  266. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  267. data/test/cases/validations/i18n_validation_test.rb +86 -90
  268. data/test/cases/validations/length_validation_test.rb +79 -47
  269. data/test/cases/validations/presence_validation_test.rb +103 -68
  270. data/test/cases/validations/uniqueness_validation_test.rb +548 -434
  271. data/test/cases/validations_repair_helper.rb +19 -23
  272. data/test/cases/validations_test.rb +194 -165
  273. data/test/cases/view_test.rb +216 -113
  274. data/test/cases/yaml_serialization_test.rb +121 -86
  275. data/test/config.example.yml +97 -0
  276. data/test/config.rb +5 -5
  277. data/test/config.yml +154 -154
  278. data/test/connections/native_ibm_db/connection.rb +43 -43
  279. data/test/fixtures/accounts.yml +29 -29
  280. data/test/fixtures/admin/accounts.yml +2 -2
  281. data/test/fixtures/admin/randomly_named_a9.yml +7 -7
  282. data/test/fixtures/admin/randomly_named_b0.yml +7 -7
  283. data/test/fixtures/admin/users.yml +10 -10
  284. data/test/fixtures/author_addresses.yml +17 -17
  285. data/test/fixtures/author_favorites.yml +3 -3
  286. data/test/fixtures/authors.yml +23 -23
  287. data/test/fixtures/bad_posts.yml +9 -0
  288. data/test/fixtures/binaries.yml +133 -133
  289. data/test/fixtures/books.yml +31 -11
  290. data/test/fixtures/bulbs.yml +5 -5
  291. data/test/fixtures/cars.yml +9 -9
  292. data/test/fixtures/categories.yml +19 -19
  293. data/test/fixtures/categories/special_categories.yml +9 -9
  294. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  295. data/test/fixtures/categories_ordered.yml +7 -7
  296. data/test/fixtures/categories_posts.yml +31 -31
  297. data/test/fixtures/categorizations.yml +23 -23
  298. data/test/fixtures/clubs.yml +8 -8
  299. data/test/fixtures/collections.yml +3 -3
  300. data/test/fixtures/colleges.yml +3 -3
  301. data/test/fixtures/comments.yml +65 -65
  302. data/test/fixtures/companies.yml +67 -67
  303. data/test/fixtures/computers.yml +10 -10
  304. data/test/fixtures/content.yml +3 -0
  305. data/test/fixtures/content_positions.yml +3 -0
  306. data/test/fixtures/courses.yml +8 -8
  307. data/test/fixtures/customers.yml +25 -25
  308. data/test/fixtures/dashboards.yml +6 -6
  309. data/test/fixtures/dead_parrots.yml +5 -0
  310. data/test/fixtures/developers.yml +21 -21
  311. data/test/fixtures/developers_projects.yml +16 -16
  312. data/test/fixtures/dog_lovers.yml +7 -7
  313. data/test/fixtures/dogs.yml +4 -4
  314. data/test/fixtures/doubloons.yml +3 -3
  315. data/test/fixtures/edges.yml +5 -5
  316. data/test/fixtures/entrants.yml +14 -14
  317. data/test/fixtures/essays.yml +6 -6
  318. data/test/fixtures/faces.yml +11 -11
  319. data/test/fixtures/fk_test_has_fk.yml +3 -3
  320. data/test/fixtures/fk_test_has_pk.yml +1 -1
  321. data/test/fixtures/friendships.yml +4 -4
  322. data/test/fixtures/funny_jokes.yml +10 -10
  323. data/test/fixtures/interests.yml +33 -33
  324. data/test/fixtures/items.yml +3 -3
  325. data/test/fixtures/jobs.yml +7 -7
  326. data/test/fixtures/legacy_things.yml +3 -3
  327. data/test/fixtures/live_parrots.yml +4 -0
  328. data/test/fixtures/mateys.yml +4 -4
  329. data/test/fixtures/member_details.yml +8 -8
  330. data/test/fixtures/member_types.yml +6 -6
  331. data/test/fixtures/members.yml +11 -11
  332. data/test/fixtures/memberships.yml +34 -34
  333. data/test/fixtures/men.yml +5 -5
  334. data/test/fixtures/minimalistics.yml +2 -2
  335. data/test/fixtures/minivans.yml +5 -5
  336. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  337. data/test/fixtures/mixins.yml +29 -29
  338. data/test/fixtures/movies.yml +7 -7
  339. data/test/fixtures/naked/yml/accounts.yml +1 -1
  340. data/test/fixtures/naked/yml/companies.yml +1 -1
  341. data/test/fixtures/naked/yml/courses.yml +1 -1
  342. data/test/fixtures/naked/yml/parrots.yml +2 -0
  343. data/test/fixtures/naked/yml/trees.yml +3 -0
  344. data/test/fixtures/nodes.yml +29 -0
  345. data/test/fixtures/organizations.yml +5 -5
  346. data/test/fixtures/other_comments.yml +6 -0
  347. data/test/fixtures/other_dogs.yml +2 -0
  348. data/test/fixtures/other_posts.yml +7 -0
  349. data/test/fixtures/other_topics.yml +42 -42
  350. data/test/fixtures/owners.yml +9 -9
  351. data/test/fixtures/parrots.yml +27 -27
  352. data/test/fixtures/parrots_pirates.yml +7 -7
  353. data/test/fixtures/people.yml +24 -24
  354. data/test/fixtures/peoples_treasures.yml +3 -3
  355. data/test/fixtures/pets.yml +19 -19
  356. data/test/fixtures/pirates.yml +12 -12
  357. data/test/fixtures/posts.yml +80 -80
  358. data/test/fixtures/price_estimates.yml +16 -7
  359. data/test/fixtures/products.yml +4 -4
  360. data/test/fixtures/projects.yml +7 -7
  361. data/test/fixtures/randomly_named_a9.yml +7 -7
  362. data/test/fixtures/ratings.yml +14 -14
  363. data/test/fixtures/readers.yml +11 -11
  364. data/test/fixtures/references.yml +17 -17
  365. data/test/fixtures/reserved_words/distinct.yml +5 -5
  366. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  367. data/test/fixtures/reserved_words/group.yml +14 -14
  368. data/test/fixtures/reserved_words/select.yml +8 -8
  369. data/test/fixtures/reserved_words/values.yml +7 -7
  370. data/test/fixtures/ships.yml +6 -6
  371. data/test/fixtures/speedometers.yml +8 -8
  372. data/test/fixtures/sponsors.yml +12 -12
  373. data/test/fixtures/string_key_objects.yml +7 -7
  374. data/test/fixtures/subscribers.yml +10 -10
  375. data/test/fixtures/subscriptions.yml +12 -12
  376. data/test/fixtures/taggings.yml +78 -78
  377. data/test/fixtures/tags.yml +11 -11
  378. data/test/fixtures/tasks.yml +7 -7
  379. data/test/fixtures/teapots.yml +3 -3
  380. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  381. data/test/fixtures/to_be_linked/users.yml +10 -10
  382. data/test/fixtures/topics.yml +49 -49
  383. data/test/fixtures/toys.yml +14 -14
  384. data/test/fixtures/traffic_lights.yml +9 -9
  385. data/test/fixtures/treasures.yml +10 -10
  386. data/test/fixtures/trees.yml +3 -0
  387. data/test/fixtures/uuid_children.yml +3 -3
  388. data/test/fixtures/uuid_parents.yml +2 -2
  389. data/test/fixtures/variants.yml +4 -4
  390. data/test/fixtures/vegetables.yml +19 -19
  391. data/test/fixtures/vertices.yml +3 -3
  392. data/test/fixtures/warehouse_things.yml +2 -2
  393. data/test/fixtures/zines.yml +5 -5
  394. data/test/ibm_db_test.rb +24 -24
  395. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  396. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  397. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  398. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  399. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  400. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  401. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  402. data/test/migrations/rename/1_we_need_things.rb +11 -11
  403. data/test/migrations/rename/2_rename_things.rb +9 -9
  404. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  405. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  406. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  407. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  408. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  409. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  410. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  411. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  412. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  413. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  414. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  415. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  416. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  417. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  418. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  419. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  420. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  421. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  422. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  423. data/test/models/admin.rb +4 -4
  424. data/test/models/admin/account.rb +2 -2
  425. data/test/models/admin/randomly_named_c1.rb +7 -3
  426. data/test/models/admin/user.rb +40 -40
  427. data/test/models/aircraft.rb +5 -4
  428. data/test/models/arunit2_model.rb +3 -3
  429. data/test/models/author.rb +209 -212
  430. data/test/models/auto_id.rb +4 -4
  431. data/test/models/autoloadable/extra_firm.rb +2 -2
  432. data/test/models/binary.rb +1 -1
  433. data/test/models/bird.rb +12 -12
  434. data/test/models/book.rb +23 -18
  435. data/test/models/boolean.rb +2 -2
  436. data/test/models/bulb.rb +52 -51
  437. data/test/models/cake_designer.rb +3 -3
  438. data/test/models/car.rb +29 -26
  439. data/test/models/carrier.rb +2 -2
  440. data/test/models/cat.rb +10 -0
  441. data/test/models/categorization.rb +19 -19
  442. data/test/models/category.rb +35 -35
  443. data/test/models/chef.rb +8 -3
  444. data/test/models/citation.rb +3 -3
  445. data/test/models/club.rb +25 -23
  446. data/test/models/college.rb +10 -10
  447. data/test/models/column.rb +3 -3
  448. data/test/models/column_name.rb +3 -3
  449. data/test/models/comment.rb +76 -64
  450. data/test/models/company.rb +230 -225
  451. data/test/models/company_in_module.rb +98 -98
  452. data/test/models/computer.rb +3 -3
  453. data/test/models/contact.rb +41 -41
  454. data/test/models/content.rb +40 -0
  455. data/test/models/contract.rb +20 -20
  456. data/test/models/country.rb +7 -7
  457. data/test/models/course.rb +6 -6
  458. data/test/models/customer.rb +83 -77
  459. data/test/models/customer_carrier.rb +14 -14
  460. data/test/models/dashboard.rb +3 -3
  461. data/test/models/default.rb +2 -2
  462. data/test/models/department.rb +4 -4
  463. data/test/models/developer.rb +274 -252
  464. data/test/models/dog.rb +5 -5
  465. data/test/models/dog_lover.rb +5 -5
  466. data/test/models/doubloon.rb +12 -12
  467. data/test/models/drink_designer.rb +3 -3
  468. data/test/models/edge.rb +5 -5
  469. data/test/models/electron.rb +5 -5
  470. data/test/models/engine.rb +4 -4
  471. data/test/models/entrant.rb +3 -3
  472. data/test/models/essay.rb +5 -5
  473. data/test/models/event.rb +2 -2
  474. data/test/models/eye.rb +37 -37
  475. data/test/models/face.rb +9 -9
  476. data/test/models/friendship.rb +6 -6
  477. data/test/models/guid.rb +1 -1
  478. data/test/models/guitar.rb +4 -0
  479. data/test/models/hotel.rb +11 -6
  480. data/test/models/image.rb +3 -3
  481. data/test/models/interest.rb +5 -5
  482. data/test/models/invoice.rb +4 -4
  483. data/test/models/item.rb +7 -7
  484. data/test/models/job.rb +7 -7
  485. data/test/models/joke.rb +7 -7
  486. data/test/models/keyboard.rb +3 -3
  487. data/test/models/legacy_thing.rb +3 -3
  488. data/test/models/lesson.rb +11 -11
  489. data/test/models/line_item.rb +3 -3
  490. data/test/models/liquid.rb +4 -4
  491. data/test/models/man.rb +11 -11
  492. data/test/models/matey.rb +4 -4
  493. data/test/models/member.rb +42 -41
  494. data/test/models/member_detail.rb +8 -7
  495. data/test/models/member_type.rb +3 -3
  496. data/test/models/membership.rb +35 -35
  497. data/test/models/mentor.rb +3 -0
  498. data/test/models/minimalistic.rb +2 -2
  499. data/test/models/minivan.rb +9 -9
  500. data/test/models/mixed_case_monkey.rb +3 -3
  501. data/test/models/mocktail_designer.rb +2 -0
  502. data/test/models/molecule.rb +6 -6
  503. data/test/models/movie.rb +5 -5
  504. data/test/models/node.rb +5 -0
  505. data/test/models/non_primary_key.rb +2 -0
  506. data/test/models/notification.rb +3 -0
  507. data/test/models/order.rb +4 -4
  508. data/test/models/organization.rb +14 -14
  509. data/test/models/other_dog.rb +5 -0
  510. data/test/models/owner.rb +37 -34
  511. data/test/models/parrot.rb +28 -29
  512. data/test/models/person.rb +142 -143
  513. data/test/models/personal_legacy_thing.rb +4 -4
  514. data/test/models/pet.rb +18 -15
  515. data/test/models/pet_treasure.rb +6 -0
  516. data/test/models/pirate.rb +92 -92
  517. data/test/models/possession.rb +3 -3
  518. data/test/models/post.rb +273 -264
  519. data/test/models/price_estimate.rb +4 -4
  520. data/test/models/professor.rb +5 -5
  521. data/test/models/project.rb +40 -29
  522. data/test/models/publisher.rb +2 -2
  523. data/test/models/publisher/article.rb +4 -4
  524. data/test/models/publisher/magazine.rb +3 -3
  525. data/test/models/randomly_named_c1.rb +3 -3
  526. data/test/models/rating.rb +4 -4
  527. data/test/models/reader.rb +23 -23
  528. data/test/models/recipe.rb +3 -0
  529. data/test/models/record.rb +2 -2
  530. data/test/models/reference.rb +22 -22
  531. data/test/models/reply.rb +61 -61
  532. data/test/models/ship.rb +39 -33
  533. data/test/models/ship_part.rb +7 -7
  534. data/test/models/shop.rb +17 -17
  535. data/test/models/shop_account.rb +6 -6
  536. data/test/models/speedometer.rb +6 -6
  537. data/test/models/sponsor.rb +7 -7
  538. data/test/models/string_key_object.rb +3 -3
  539. data/test/models/student.rb +4 -4
  540. data/test/models/subject.rb +16 -16
  541. data/test/models/subscriber.rb +8 -8
  542. data/test/models/subscription.rb +4 -4
  543. data/test/models/tag.rb +13 -7
  544. data/test/models/tagging.rb +13 -13
  545. data/test/models/task.rb +5 -5
  546. data/test/models/topic.rb +118 -124
  547. data/test/models/toy.rb +6 -6
  548. data/test/models/traffic_light.rb +4 -4
  549. data/test/models/treasure.rb +14 -14
  550. data/test/models/treaty.rb +7 -7
  551. data/test/models/tree.rb +3 -0
  552. data/test/models/tuning_peg.rb +4 -0
  553. data/test/models/tyre.rb +11 -11
  554. data/test/models/user.rb +14 -0
  555. data/test/models/uuid_child.rb +3 -3
  556. data/test/models/uuid_item.rb +6 -0
  557. data/test/models/uuid_parent.rb +3 -3
  558. data/test/models/vegetables.rb +24 -24
  559. data/test/models/vehicle.rb +6 -6
  560. data/test/models/vertex.rb +9 -9
  561. data/test/models/warehouse_thing.rb +5 -5
  562. data/test/models/wheel.rb +3 -3
  563. data/test/models/without_table.rb +3 -3
  564. data/test/models/zine.rb +3 -3
  565. data/test/schema/mysql2_specific_schema.rb +68 -58
  566. data/test/schema/oracle_specific_schema.rb +40 -43
  567. data/test/schema/postgresql_specific_schema.rb +114 -202
  568. data/test/schema/schema.rb +1057 -938
  569. data/test/schema/schema.rb.original +1057 -0
  570. data/test/schema/sqlite_specific_schema.rb +18 -22
  571. data/test/support/config.rb +43 -43
  572. data/test/support/connection.rb +23 -22
  573. data/test/support/connection_helper.rb +14 -14
  574. data/test/support/ddl_helper.rb +8 -8
  575. data/test/support/schema_dumping_helper.rb +20 -20
  576. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  577. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  578. metadata +146 -30
  579. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  580. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  581. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  582. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  583. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  584. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  585. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  586. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  587. data/test/cases/migration/table_and_index_test.rb +0 -24
  588. data/test/cases/relation/where_test2.rb +0 -36
  589. data/test/cases/type/decimal_test.rb +0 -51
  590. data/test/cases/type/unsigned_integer_test.rb +0 -18
  591. data/test/cases/xml_serialization_test.rb +0 -457
  592. data/test/fixtures/naked/csv/accounts.csv +0 -1
  593. data/test/schema/mysql_specific_schema.rb +0 -70
@@ -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 rescue nil
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