ibm_db 4.0.0-x86-mingw32 → 5.1.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 (576) hide show
  1. checksums.yaml +5 -5
  2. data/MANIFEST +14 -14
  3. data/README +208 -208
  4. data/ext/Makefile +269 -0
  5. data/ext/Makefile.nt32 +181 -181
  6. data/ext/Makefile.nt32.191 +212 -212
  7. data/ext/extconf.rb +322 -291
  8. data/ext/gil_release_version.h +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +11879 -11887
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db.h +241 -241
  15. data/ext/ruby_ibm_db_cli.c +866 -866
  16. data/ext/ruby_ibm_db_cli.h +500 -500
  17. data/ext/ruby_ibm_db_cli.o +0 -0
  18. data/ext/unicode_support_version.h +3 -0
  19. data/init.rb +41 -41
  20. data/lib/IBM_DB.rb +27 -27
  21. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3593 -3452
  22. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -5
  23. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  24. data/lib/mswin32/ibm_db.rb +94 -90
  25. data/lib/mswin32/rb2x/i386/ruby26/ibm_db.so +0 -0
  26. data/lib/mswin32/rb2x/i386/ruby27/ibm_db.so +0 -0
  27. data/test/active_record/connection_adapters/fake_adapter.rb +49 -49
  28. data/test/assets/example.log +1 -1
  29. data/test/assets/test.txt +1 -1
  30. data/test/cases/adapter_test.rb +351 -351
  31. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -193
  32. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -50
  33. data/test/cases/adapters/mysql2/boolean_test.rb +100 -100
  34. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -63
  35. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -54
  36. data/test/cases/adapters/mysql2/connection_test.rb +210 -210
  37. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -45
  38. data/test/cases/adapters/mysql2/enum_test.rb +26 -26
  39. data/test/cases/adapters/mysql2/explain_test.rb +21 -21
  40. data/test/cases/adapters/mysql2/json_test.rb +195 -195
  41. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -83
  42. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -152
  43. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -59
  44. data/test/cases/adapters/mysql2/schema_test.rb +126 -126
  45. data/test/cases/adapters/mysql2/sp_test.rb +36 -36
  46. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -14
  47. data/test/cases/adapters/mysql2/table_options_test.rb +42 -42
  48. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -66
  49. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -98
  50. data/test/cases/adapters/postgresql/array_test.rb +339 -339
  51. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -82
  52. data/test/cases/adapters/postgresql/bytea_test.rb +134 -134
  53. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -26
  54. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -38
  55. data/test/cases/adapters/postgresql/cidr_test.rb +25 -25
  56. data/test/cases/adapters/postgresql/citext_test.rb +78 -78
  57. data/test/cases/adapters/postgresql/collation_test.rb +53 -53
  58. data/test/cases/adapters/postgresql/composite_test.rb +132 -132
  59. data/test/cases/adapters/postgresql/connection_test.rb +257 -257
  60. data/test/cases/adapters/postgresql/datatype_test.rb +92 -92
  61. data/test/cases/adapters/postgresql/domain_test.rb +47 -47
  62. data/test/cases/adapters/postgresql/enum_test.rb +91 -91
  63. data/test/cases/adapters/postgresql/explain_test.rb +20 -20
  64. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -63
  65. data/test/cases/adapters/postgresql/full_text_test.rb +44 -44
  66. data/test/cases/adapters/postgresql/geometric_test.rb +378 -378
  67. data/test/cases/adapters/postgresql/hstore_test.rb +382 -382
  68. data/test/cases/adapters/postgresql/infinity_test.rb +69 -69
  69. data/test/cases/adapters/postgresql/integer_test.rb +25 -25
  70. data/test/cases/adapters/postgresql/json_test.rb +237 -237
  71. data/test/cases/adapters/postgresql/ltree_test.rb +53 -53
  72. data/test/cases/adapters/postgresql/money_test.rb +96 -96
  73. data/test/cases/adapters/postgresql/network_test.rb +94 -94
  74. data/test/cases/adapters/postgresql/numbers_test.rb +49 -49
  75. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -405
  76. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -22
  77. data/test/cases/adapters/postgresql/quoting_test.rb +44 -44
  78. data/test/cases/adapters/postgresql/range_test.rb +343 -343
  79. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -111
  80. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -34
  81. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -119
  82. data/test/cases/adapters/postgresql/schema_test.rb +597 -597
  83. data/test/cases/adapters/postgresql/serial_test.rb +154 -154
  84. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -41
  85. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -90
  86. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -33
  87. data/test/cases/adapters/postgresql/utils_test.rb +62 -62
  88. data/test/cases/adapters/postgresql/uuid_test.rb +294 -294
  89. data/test/cases/adapters/postgresql/xml_test.rb +54 -54
  90. data/test/cases/adapters/sqlite3/collation_test.rb +53 -53
  91. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -98
  92. data/test/cases/adapters/sqlite3/explain_test.rb +21 -21
  93. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -101
  94. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -441
  95. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -24
  96. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -20
  97. data/test/cases/aggregations_test.rb +168 -168
  98. data/test/cases/ar_schema_test.rb +146 -146
  99. data/test/cases/associations/association_scope_test.rb +16 -16
  100. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1141
  101. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -41
  102. data/test/cases/associations/callbacks_test.rb +190 -190
  103. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  104. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  105. data/test/cases/associations/eager_load_nested_include_test.rb +126 -126
  106. data/test/cases/associations/eager_singularization_test.rb +148 -148
  107. data/test/cases/associations/eager_test.rb +1514 -1514
  108. data/test/cases/associations/extension_test.rb +87 -87
  109. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -1004
  110. data/test/cases/associations/has_many_associations_test.rb +2501 -2501
  111. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1271
  112. data/test/cases/associations/has_one_associations_test.rb +707 -707
  113. data/test/cases/associations/has_one_through_associations_test.rb +383 -383
  114. data/test/cases/associations/inner_join_association_test.rb +139 -139
  115. data/test/cases/associations/inverse_associations_test.rb +733 -733
  116. data/test/cases/associations/join_model_test.rb +777 -777
  117. data/test/cases/associations/left_outer_join_association_test.rb +88 -88
  118. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  119. data/test/cases/associations/required_test.rb +102 -102
  120. data/test/cases/associations_test.rb +385 -385
  121. data/test/cases/attribute_decorators_test.rb +126 -125
  122. data/test/cases/attribute_methods/read_test.rb +60 -60
  123. data/test/cases/attribute_methods_test.rb +1009 -1009
  124. data/test/cases/attribute_set_test.rb +270 -270
  125. data/test/cases/attribute_test.rb +246 -246
  126. data/test/cases/attributes_test.rb +253 -253
  127. data/test/cases/autosave_association_test.rb +1708 -1708
  128. data/test/cases/base_test.rb +1713 -1713
  129. data/test/cases/batches_test.rb +489 -489
  130. data/test/cases/binary_test.rb +44 -44
  131. data/test/cases/bind_parameter_test.rb +110 -110
  132. data/test/cases/cache_key_test.rb +26 -25
  133. data/test/cases/calculations_test.rb +798 -798
  134. data/test/cases/callbacks_test.rb +636 -636
  135. data/test/cases/clone_test.rb +40 -40
  136. data/test/cases/coders/json_test.rb +15 -15
  137. data/test/cases/coders/yaml_column_test.rb +63 -63
  138. data/test/cases/collection_cache_key_test.rb +115 -115
  139. data/test/cases/column_alias_test.rb +17 -17
  140. data/test/cases/column_definition_test.rb +92 -92
  141. data/test/cases/comment_test.rb +145 -143
  142. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -56
  143. data/test/cases/connection_adapters/connection_handler_test.rb +160 -160
  144. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  145. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -255
  146. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -69
  147. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  148. data/test/cases/connection_adapters/schema_cache_test.rb +61 -61
  149. data/test/cases/connection_adapters/type_lookup_test.rb +118 -118
  150. data/test/cases/connection_management_test.rb +112 -112
  151. data/test/cases/connection_pool_test.rb +521 -521
  152. data/test/cases/connection_specification/resolver_test.rb +131 -131
  153. data/test/cases/core_test.rb +112 -112
  154. data/test/cases/counter_cache_test.rb +214 -214
  155. data/test/cases/custom_locking_test.rb +17 -17
  156. data/test/cases/database_statements_test.rb +34 -34
  157. data/test/cases/date_test.rb +44 -44
  158. data/test/cases/date_time_precision_test.rb +107 -106
  159. data/test/cases/date_time_test.rb +61 -61
  160. data/test/cases/defaults_test.rb +219 -218
  161. data/test/cases/dirty_test.rb +763 -763
  162. data/test/cases/disconnected_test.rb +30 -30
  163. data/test/cases/dup_test.rb +157 -157
  164. data/test/cases/enum_test.rb +444 -444
  165. data/test/cases/errors_test.rb +16 -16
  166. data/test/cases/explain_subscriber_test.rb +64 -64
  167. data/test/cases/explain_test.rb +87 -87
  168. data/test/cases/finder_respond_to_test.rb +60 -60
  169. data/test/cases/finder_test.rb +1294 -1294
  170. data/test/cases/fixture_set/file_test.rb +156 -156
  171. data/test/cases/fixtures_test.rb +988 -988
  172. data/test/cases/forbidden_attributes_protection_test.rb +165 -165
  173. data/test/cases/habtm_destroy_order_test.rb +61 -61
  174. data/test/cases/helper.rb +204 -204
  175. data/test/cases/hot_compatibility_test.rb +142 -142
  176. data/test/cases/i18n_test.rb +45 -45
  177. data/test/cases/inheritance_test.rb +606 -606
  178. data/test/cases/integration_test.rb +155 -155
  179. data/test/cases/invalid_connection_test.rb +24 -24
  180. data/test/cases/invertible_migration_test.rb +387 -387
  181. data/test/cases/json_serialization_test.rb +311 -311
  182. data/test/cases/locking_test.rb +493 -493
  183. data/test/cases/log_subscriber_test.rb +225 -225
  184. data/test/cases/migration/change_schema_test.rb +458 -458
  185. data/test/cases/migration/change_table_test.rb +256 -256
  186. data/test/cases/migration/column_attributes_test.rb +176 -176
  187. data/test/cases/migration/column_positioning_test.rb +56 -56
  188. data/test/cases/migration/columns_test.rb +310 -310
  189. data/test/cases/migration/command_recorder_test.rb +350 -350
  190. data/test/cases/migration/compatibility_test.rb +118 -118
  191. data/test/cases/migration/create_join_table_test.rb +157 -157
  192. data/test/cases/migration/foreign_key_test.rb +362 -360
  193. data/test/cases/migration/helper.rb +39 -39
  194. data/test/cases/migration/index_test.rb +218 -218
  195. data/test/cases/migration/logger_test.rb +36 -36
  196. data/test/cases/migration/pending_migrations_test.rb +52 -52
  197. data/test/cases/migration/references_foreign_key_test.rb +221 -216
  198. data/test/cases/migration/references_index_test.rb +101 -101
  199. data/test/cases/migration/references_statements_test.rb +136 -136
  200. data/test/cases/migration/rename_table_test.rb +93 -93
  201. data/test/cases/migration_test.rb +1157 -1157
  202. data/test/cases/migrator_test.rb +471 -470
  203. data/test/cases/mixin_test.rb +68 -68
  204. data/test/cases/modules_test.rb +172 -172
  205. data/test/cases/multiparameter_attributes_test.rb +372 -372
  206. data/test/cases/multiple_db_test.rb +122 -122
  207. data/test/cases/nested_attributes_test.rb +1098 -1098
  208. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  209. data/test/cases/persistence_test.rb +1001 -1001
  210. data/test/cases/pooled_connections_test.rb +81 -81
  211. data/test/cases/primary_keys_test.rb +376 -376
  212. data/test/cases/query_cache_test.rb +446 -446
  213. data/test/cases/quoting_test.rb +202 -202
  214. data/test/cases/readonly_test.rb +119 -119
  215. data/test/cases/reaper_test.rb +85 -85
  216. data/test/cases/reflection_test.rb +509 -509
  217. data/test/cases/relation/delegation_test.rb +63 -63
  218. data/test/cases/relation/merging_test.rb +157 -157
  219. data/test/cases/relation/mutation_test.rb +183 -183
  220. data/test/cases/relation/or_test.rb +92 -92
  221. data/test/cases/relation/predicate_builder_test.rb +16 -16
  222. data/test/cases/relation/record_fetch_warning_test.rb +40 -40
  223. data/test/cases/relation/where_chain_test.rb +105 -105
  224. data/test/cases/relation/where_clause_test.rb +182 -182
  225. data/test/cases/relation/where_test.rb +322 -322
  226. data/test/cases/relation_test.rb +328 -328
  227. data/test/cases/relations_test.rb +2026 -2026
  228. data/test/cases/reload_models_test.rb +22 -22
  229. data/test/cases/result_test.rb +90 -90
  230. data/test/cases/sanitize_test.rb +176 -176
  231. data/test/cases/schema_dumper_test.rb +457 -457
  232. data/test/cases/schema_loading_test.rb +52 -52
  233. data/test/cases/scoping/default_scoping_test.rb +528 -528
  234. data/test/cases/scoping/named_scoping_test.rb +561 -561
  235. data/test/cases/scoping/relation_scoping_test.rb +400 -400
  236. data/test/cases/secure_token_test.rb +32 -32
  237. data/test/cases/serialization_test.rb +104 -104
  238. data/test/cases/serialized_attribute_test.rb +364 -364
  239. data/test/cases/statement_cache_test.rb +136 -136
  240. data/test/cases/store_test.rb +195 -195
  241. data/test/cases/suppressor_test.rb +63 -63
  242. data/test/cases/tasks/database_tasks_test.rb +462 -462
  243. data/test/cases/tasks/mysql_rake_test.rb +345 -345
  244. data/test/cases/tasks/postgresql_rake_test.rb +304 -304
  245. data/test/cases/tasks/sqlite_rake_test.rb +220 -220
  246. data/test/cases/test_case.rb +131 -131
  247. data/test/cases/test_fixtures_test.rb +36 -36
  248. data/test/cases/time_precision_test.rb +103 -102
  249. data/test/cases/timestamp_test.rb +501 -501
  250. data/test/cases/touch_later_test.rb +121 -121
  251. data/test/cases/transaction_callbacks_test.rb +518 -518
  252. data/test/cases/transaction_isolation_test.rb +106 -106
  253. data/test/cases/transactions_test.rb +835 -834
  254. data/test/cases/type/adapter_specific_registry_test.rb +133 -133
  255. data/test/cases/type/date_time_test.rb +14 -14
  256. data/test/cases/type/integer_test.rb +27 -27
  257. data/test/cases/type/string_test.rb +22 -22
  258. data/test/cases/type/type_map_test.rb +177 -177
  259. data/test/cases/type_test.rb +39 -39
  260. data/test/cases/types_test.rb +24 -24
  261. data/test/cases/unconnected_test.rb +33 -33
  262. data/test/cases/validations/absence_validation_test.rb +73 -73
  263. data/test/cases/validations/association_validation_test.rb +97 -97
  264. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  265. data/test/cases/validations/i18n_validation_test.rb +86 -86
  266. data/test/cases/validations/length_validation_test.rb +79 -79
  267. data/test/cases/validations/presence_validation_test.rb +103 -103
  268. data/test/cases/validations/uniqueness_validation_test.rb +548 -548
  269. data/test/cases/validations_repair_helper.rb +19 -19
  270. data/test/cases/validations_test.rb +194 -194
  271. data/test/cases/view_test.rb +216 -216
  272. data/test/cases/yaml_serialization_test.rb +121 -121
  273. data/test/config.example.yml +97 -97
  274. data/test/config.rb +5 -5
  275. data/test/connections/native_ibm_db/connection.rb +44 -0
  276. data/test/fixtures/accounts.yml +29 -29
  277. data/test/fixtures/admin/accounts.yml +2 -2
  278. data/test/fixtures/admin/users.yml +10 -10
  279. data/test/fixtures/author_addresses.yml +17 -17
  280. data/test/fixtures/author_favorites.yml +3 -3
  281. data/test/fixtures/authors.yml +23 -23
  282. data/test/fixtures/bad_posts.yml +9 -9
  283. data/test/fixtures/binaries.yml +133 -133
  284. data/test/fixtures/books.yml +31 -31
  285. data/test/fixtures/bulbs.yml +5 -5
  286. data/test/fixtures/cars.yml +9 -9
  287. data/test/fixtures/categories.yml +19 -19
  288. data/test/fixtures/categories/special_categories.yml +9 -9
  289. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  290. data/test/fixtures/categories_ordered.yml +7 -7
  291. data/test/fixtures/categories_posts.yml +31 -31
  292. data/test/fixtures/categorizations.yml +23 -23
  293. data/test/fixtures/clubs.yml +8 -8
  294. data/test/fixtures/collections.yml +3 -3
  295. data/test/fixtures/colleges.yml +3 -3
  296. data/test/fixtures/comments.yml +65 -65
  297. data/test/fixtures/companies.yml +67 -67
  298. data/test/fixtures/computers.yml +10 -10
  299. data/test/fixtures/content.yml +3 -3
  300. data/test/fixtures/content_positions.yml +3 -3
  301. data/test/fixtures/courses.yml +8 -8
  302. data/test/fixtures/customers.yml +25 -25
  303. data/test/fixtures/dashboards.yml +6 -6
  304. data/test/fixtures/dead_parrots.yml +5 -5
  305. data/test/fixtures/developers.yml +22 -22
  306. data/test/fixtures/developers_projects.yml +16 -16
  307. data/test/fixtures/dog_lovers.yml +7 -7
  308. data/test/fixtures/dogs.yml +4 -4
  309. data/test/fixtures/doubloons.yml +3 -3
  310. data/test/fixtures/edges.yml +5 -5
  311. data/test/fixtures/entrants.yml +14 -14
  312. data/test/fixtures/essays.yml +6 -6
  313. data/test/fixtures/faces.yml +11 -11
  314. data/test/fixtures/fk_test_has_fk.yml +3 -3
  315. data/test/fixtures/fk_test_has_pk.yml +1 -1
  316. data/test/fixtures/friendships.yml +4 -4
  317. data/test/fixtures/funny_jokes.yml +10 -10
  318. data/test/fixtures/interests.yml +33 -33
  319. data/test/fixtures/items.yml +3 -3
  320. data/test/fixtures/jobs.yml +7 -7
  321. data/test/fixtures/legacy_things.yml +3 -3
  322. data/test/fixtures/live_parrots.yml +4 -4
  323. data/test/fixtures/mateys.yml +4 -4
  324. data/test/fixtures/member_details.yml +8 -8
  325. data/test/fixtures/member_types.yml +6 -6
  326. data/test/fixtures/members.yml +11 -11
  327. data/test/fixtures/memberships.yml +34 -34
  328. data/test/fixtures/men.yml +5 -5
  329. data/test/fixtures/minimalistics.yml +2 -2
  330. data/test/fixtures/minivans.yml +5 -5
  331. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  332. data/test/fixtures/mixins.yml +29 -29
  333. data/test/fixtures/movies.yml +7 -7
  334. data/test/fixtures/naked/yml/accounts.yml +1 -1
  335. data/test/fixtures/naked/yml/companies.yml +1 -1
  336. data/test/fixtures/naked/yml/courses.yml +1 -1
  337. data/test/fixtures/naked/yml/parrots.yml +2 -2
  338. data/test/fixtures/naked/yml/trees.yml +3 -3
  339. data/test/fixtures/nodes.yml +29 -29
  340. data/test/fixtures/organizations.yml +5 -5
  341. data/test/fixtures/other_comments.yml +6 -6
  342. data/test/fixtures/other_dogs.yml +2 -2
  343. data/test/fixtures/other_posts.yml +7 -7
  344. data/test/fixtures/other_topics.yml +42 -42
  345. data/test/fixtures/owners.yml +9 -9
  346. data/test/fixtures/parrots.yml +27 -27
  347. data/test/fixtures/parrots_pirates.yml +7 -7
  348. data/test/fixtures/people.yml +24 -24
  349. data/test/fixtures/peoples_treasures.yml +3 -3
  350. data/test/fixtures/pets.yml +19 -19
  351. data/test/fixtures/pirates.yml +12 -15
  352. data/test/fixtures/posts.yml +80 -80
  353. data/test/fixtures/price_estimates.yml +16 -16
  354. data/test/fixtures/products.yml +4 -4
  355. data/test/fixtures/projects.yml +7 -7
  356. data/test/fixtures/ratings.yml +14 -14
  357. data/test/fixtures/readers.yml +11 -11
  358. data/test/fixtures/references.yml +17 -17
  359. data/test/fixtures/reserved_words/distinct.yml +5 -5
  360. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  361. data/test/fixtures/reserved_words/group.yml +14 -14
  362. data/test/fixtures/reserved_words/select.yml +8 -8
  363. data/test/fixtures/reserved_words/values.yml +7 -7
  364. data/test/fixtures/ships.yml +6 -6
  365. data/test/fixtures/speedometers.yml +8 -8
  366. data/test/fixtures/sponsors.yml +12 -12
  367. data/test/fixtures/string_key_objects.yml +7 -7
  368. data/test/fixtures/subscribers.yml +10 -10
  369. data/test/fixtures/subscriptions.yml +12 -12
  370. data/test/fixtures/taggings.yml +78 -78
  371. data/test/fixtures/tags.yml +11 -11
  372. data/test/fixtures/tasks.yml +7 -7
  373. data/test/fixtures/teapots.yml +3 -3
  374. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  375. data/test/fixtures/to_be_linked/users.yml +10 -10
  376. data/test/fixtures/topics.yml +49 -49
  377. data/test/fixtures/toys.yml +14 -14
  378. data/test/fixtures/traffic_lights.yml +9 -9
  379. data/test/fixtures/treasures.yml +10 -10
  380. data/test/fixtures/trees.yml +3 -3
  381. data/test/fixtures/uuid_children.yml +3 -3
  382. data/test/fixtures/uuid_parents.yml +2 -2
  383. data/test/fixtures/variants.yml +4 -4
  384. data/test/fixtures/vegetables.yml +19 -19
  385. data/test/fixtures/vertices.yml +3 -3
  386. data/test/fixtures/warehouse_things.yml +2 -2
  387. data/test/fixtures/zines.yml +5 -5
  388. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  389. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  390. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  391. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  392. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  393. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  394. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  395. data/test/migrations/rename/1_we_need_things.rb +11 -11
  396. data/test/migrations/rename/2_rename_things.rb +9 -9
  397. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  398. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  399. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  400. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  401. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  402. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  403. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  404. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  405. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  406. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  407. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  408. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  409. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  410. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  411. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  412. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  413. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  414. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  415. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  416. data/test/models/admin.rb +5 -5
  417. data/test/models/admin/account.rb +3 -3
  418. data/test/models/admin/user.rb +40 -40
  419. data/test/models/aircraft.rb +5 -5
  420. data/test/models/arunit2_model.rb +3 -3
  421. data/test/models/author.rb +209 -209
  422. data/test/models/auto_id.rb +4 -4
  423. data/test/models/autoloadable/extra_firm.rb +2 -2
  424. data/test/models/binary.rb +2 -2
  425. data/test/models/bird.rb +12 -12
  426. data/test/models/book.rb +23 -23
  427. data/test/models/boolean.rb +2 -2
  428. data/test/models/bulb.rb +52 -52
  429. data/test/models/cake_designer.rb +3 -3
  430. data/test/models/car.rb +29 -29
  431. data/test/models/carrier.rb +2 -2
  432. data/test/models/cat.rb +10 -10
  433. data/test/models/categorization.rb +19 -19
  434. data/test/models/category.rb +35 -35
  435. data/test/models/chef.rb +8 -8
  436. data/test/models/citation.rb +3 -3
  437. data/test/models/club.rb +25 -25
  438. data/test/models/college.rb +10 -10
  439. data/test/models/column.rb +3 -3
  440. data/test/models/column_name.rb +3 -3
  441. data/test/models/comment.rb +76 -76
  442. data/test/models/company.rb +230 -230
  443. data/test/models/company_in_module.rb +98 -98
  444. data/test/models/computer.rb +3 -3
  445. data/test/models/contact.rb +41 -41
  446. data/test/models/content.rb +40 -40
  447. data/test/models/contract.rb +20 -20
  448. data/test/models/country.rb +7 -7
  449. data/test/models/course.rb +6 -6
  450. data/test/models/customer.rb +83 -83
  451. data/test/models/customer_carrier.rb +14 -14
  452. data/test/models/dashboard.rb +3 -3
  453. data/test/models/default.rb +2 -2
  454. data/test/models/department.rb +4 -4
  455. data/test/models/developer.rb +274 -274
  456. data/test/models/dog.rb +5 -5
  457. data/test/models/dog_lover.rb +5 -5
  458. data/test/models/doubloon.rb +12 -12
  459. data/test/models/drink_designer.rb +3 -3
  460. data/test/models/edge.rb +5 -5
  461. data/test/models/electron.rb +5 -5
  462. data/test/models/engine.rb +4 -4
  463. data/test/models/entrant.rb +3 -3
  464. data/test/models/essay.rb +5 -5
  465. data/test/models/event.rb +3 -3
  466. data/test/models/eye.rb +37 -37
  467. data/test/models/face.rb +9 -9
  468. data/test/models/friendship.rb +6 -6
  469. data/test/models/guid.rb +2 -2
  470. data/test/models/guitar.rb +4 -4
  471. data/test/models/hotel.rb +11 -11
  472. data/test/models/image.rb +3 -3
  473. data/test/models/interest.rb +5 -5
  474. data/test/models/invoice.rb +4 -4
  475. data/test/models/item.rb +7 -7
  476. data/test/models/job.rb +7 -7
  477. data/test/models/joke.rb +7 -7
  478. data/test/models/keyboard.rb +3 -3
  479. data/test/models/legacy_thing.rb +3 -3
  480. data/test/models/lesson.rb +11 -11
  481. data/test/models/line_item.rb +3 -3
  482. data/test/models/liquid.rb +4 -4
  483. data/test/models/man.rb +11 -11
  484. data/test/models/matey.rb +4 -4
  485. data/test/models/member.rb +42 -42
  486. data/test/models/member_detail.rb +8 -8
  487. data/test/models/member_type.rb +3 -3
  488. data/test/models/membership.rb +35 -35
  489. data/test/models/mentor.rb +2 -2
  490. data/test/models/minimalistic.rb +2 -2
  491. data/test/models/minivan.rb +9 -9
  492. data/test/models/mixed_case_monkey.rb +3 -3
  493. data/test/models/mocktail_designer.rb +2 -2
  494. data/test/models/molecule.rb +6 -6
  495. data/test/models/movie.rb +5 -5
  496. data/test/models/node.rb +5 -5
  497. data/test/models/non_primary_key.rb +2 -2
  498. data/test/models/notification.rb +3 -3
  499. data/test/models/order.rb +4 -4
  500. data/test/models/organization.rb +14 -14
  501. data/test/models/other_dog.rb +5 -5
  502. data/test/models/owner.rb +37 -37
  503. data/test/models/parrot.rb +28 -28
  504. data/test/models/person.rb +142 -142
  505. data/test/models/personal_legacy_thing.rb +4 -4
  506. data/test/models/pet.rb +18 -18
  507. data/test/models/pet_treasure.rb +6 -6
  508. data/test/models/pirate.rb +92 -92
  509. data/test/models/possession.rb +3 -3
  510. data/test/models/post.rb +273 -273
  511. data/test/models/price_estimate.rb +4 -4
  512. data/test/models/professor.rb +5 -5
  513. data/test/models/project.rb +40 -40
  514. data/test/models/publisher.rb +2 -2
  515. data/test/models/publisher/article.rb +4 -4
  516. data/test/models/publisher/magazine.rb +3 -3
  517. data/test/models/rating.rb +4 -4
  518. data/test/models/reader.rb +23 -23
  519. data/test/models/recipe.rb +3 -3
  520. data/test/models/record.rb +2 -2
  521. data/test/models/reference.rb +22 -22
  522. data/test/models/reply.rb +61 -61
  523. data/test/models/ship.rb +39 -39
  524. data/test/models/ship_part.rb +8 -8
  525. data/test/models/shop.rb +17 -17
  526. data/test/models/shop_account.rb +6 -6
  527. data/test/models/speedometer.rb +6 -6
  528. data/test/models/sponsor.rb +7 -7
  529. data/test/models/string_key_object.rb +3 -3
  530. data/test/models/student.rb +4 -4
  531. data/test/models/subject.rb +16 -16
  532. data/test/models/subscriber.rb +8 -8
  533. data/test/models/subscription.rb +4 -4
  534. data/test/models/tag.rb +13 -13
  535. data/test/models/tagging.rb +13 -13
  536. data/test/models/task.rb +5 -5
  537. data/test/models/topic.rb +118 -118
  538. data/test/models/toy.rb +6 -6
  539. data/test/models/traffic_light.rb +4 -4
  540. data/test/models/treasure.rb +14 -14
  541. data/test/models/treaty.rb +7 -7
  542. data/test/models/tree.rb +3 -3
  543. data/test/models/tuning_peg.rb +4 -4
  544. data/test/models/tyre.rb +11 -11
  545. data/test/models/user.rb +14 -14
  546. data/test/models/uuid_child.rb +3 -3
  547. data/test/models/uuid_item.rb +6 -6
  548. data/test/models/uuid_parent.rb +3 -3
  549. data/test/models/vegetables.rb +24 -24
  550. data/test/models/vehicle.rb +6 -6
  551. data/test/models/vertex.rb +9 -9
  552. data/test/models/warehouse_thing.rb +5 -5
  553. data/test/models/wheel.rb +3 -3
  554. data/test/models/without_table.rb +3 -3
  555. data/test/models/zine.rb +3 -3
  556. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  557. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  558. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  559. data/test/schema/mysql2_specific_schema.rb +68 -68
  560. data/test/schema/oracle_specific_schema.rb +40 -40
  561. data/test/schema/postgresql_specific_schema.rb +114 -114
  562. data/test/schema/schema.rb +1057 -1057
  563. data/test/schema/schema.rb.original +1057 -1057
  564. data/test/schema/sqlite_specific_schema.rb +18 -18
  565. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  566. data/test/support/config.rb +43 -43
  567. data/test/support/connection.rb +23 -23
  568. data/test/support/connection_helper.rb +14 -14
  569. data/test/support/ddl_helper.rb +8 -8
  570. data/test/support/schema_dumping_helper.rb +20 -20
  571. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -22
  572. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -182
  573. metadata +30 -14
  574. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  575. data/test/fixtures/author_addresses.original +0 -11
  576. data/test/fixtures/authors.original +0 -17
@@ -1,33 +1,33 @@
1
- require 'cases/helper'
2
-
3
- class PostgresqlTypeLookupTest < ActiveRecord::PostgreSQLTestCase
4
- setup do
5
- @connection = ActiveRecord::Base.connection
6
- end
7
-
8
- test "array delimiters are looked up correctly" do
9
- box_array = @connection.type_map.lookup(1020)
10
- int_array = @connection.type_map.lookup(1007)
11
-
12
- assert_equal ';', box_array.delimiter
13
- assert_equal ',', int_array.delimiter
14
- end
15
-
16
- test "array types correctly respect registration of subtypes" do
17
- int_array = @connection.type_map.lookup(1007, -1, "integer[]")
18
- bigint_array = @connection.type_map.lookup(1016, -1, "bigint[]")
19
- big_array = [123456789123456789]
20
-
21
- assert_raises(ActiveModel::RangeError) { int_array.serialize(big_array) }
22
- assert_equal "{123456789123456789}", @connection.type_cast(bigint_array.serialize(big_array))
23
- end
24
-
25
- test "range types correctly respect registration of subtypes" do
26
- int_range = @connection.type_map.lookup(3904, -1, "int4range")
27
- bigint_range = @connection.type_map.lookup(3926, -1, "int8range")
28
- big_range = 0..123456789123456789
29
-
30
- assert_raises(ActiveModel::RangeError) { int_range.serialize(big_range) }
31
- assert_equal "[0,123456789123456789]", bigint_range.serialize(big_range)
32
- end
33
- end
1
+ require 'cases/helper'
2
+
3
+ class PostgresqlTypeLookupTest < ActiveRecord::PostgreSQLTestCase
4
+ setup do
5
+ @connection = ActiveRecord::Base.connection
6
+ end
7
+
8
+ test "array delimiters are looked up correctly" do
9
+ box_array = @connection.type_map.lookup(1020)
10
+ int_array = @connection.type_map.lookup(1007)
11
+
12
+ assert_equal ';', box_array.delimiter
13
+ assert_equal ',', int_array.delimiter
14
+ end
15
+
16
+ test "array types correctly respect registration of subtypes" do
17
+ int_array = @connection.type_map.lookup(1007, -1, "integer[]")
18
+ bigint_array = @connection.type_map.lookup(1016, -1, "bigint[]")
19
+ big_array = [123456789123456789]
20
+
21
+ assert_raises(ActiveModel::RangeError) { int_array.serialize(big_array) }
22
+ assert_equal "{123456789123456789}", @connection.type_cast(bigint_array.serialize(big_array))
23
+ end
24
+
25
+ test "range types correctly respect registration of subtypes" do
26
+ int_range = @connection.type_map.lookup(3904, -1, "int4range")
27
+ bigint_range = @connection.type_map.lookup(3926, -1, "int8range")
28
+ big_range = 0..123456789123456789
29
+
30
+ assert_raises(ActiveModel::RangeError) { int_range.serialize(big_range) }
31
+ assert_equal "[0,123456789123456789]", bigint_range.serialize(big_range)
32
+ end
33
+ end
@@ -1,62 +1,62 @@
1
- require 'cases/helper'
2
- require 'active_record/connection_adapters/postgresql/utils'
3
-
4
- class PostgreSQLUtilsTest < ActiveRecord::PostgreSQLTestCase
5
- Name = ActiveRecord::ConnectionAdapters::PostgreSQL::Name
6
- include ActiveRecord::ConnectionAdapters::PostgreSQL::Utils
7
-
8
- def test_extract_schema_qualified_name
9
- {
10
- %(table_name) => [nil,'table_name'],
11
- %("table.name") => [nil,'table.name'],
12
- %(schema.table_name) => %w{schema table_name},
13
- %("schema".table_name) => %w{schema table_name},
14
- %(schema."table_name") => %w{schema table_name},
15
- %("schema"."table_name") => %w{schema table_name},
16
- %("even spaces".table) => ['even spaces','table'],
17
- %(schema."table.name") => ['schema', 'table.name']
18
- }.each do |given, expect|
19
- assert_equal Name.new(*expect), extract_schema_qualified_name(given)
20
- end
21
- end
22
- end
23
-
24
- class PostgreSQLNameTest < ActiveRecord::PostgreSQLTestCase
25
- Name = ActiveRecord::ConnectionAdapters::PostgreSQL::Name
26
-
27
- test "represents itself as schema.name" do
28
- obj = Name.new("public", "articles")
29
- assert_equal "public.articles", obj.to_s
30
- end
31
-
32
- test "without schema, represents itself as name only" do
33
- obj = Name.new(nil, "articles")
34
- assert_equal "articles", obj.to_s
35
- end
36
-
37
- test "quoted returns a string representation usable in a query" do
38
- assert_equal %("articles"), Name.new(nil, "articles").quoted
39
- assert_equal %("public"."articles"), Name.new("public", "articles").quoted
40
- end
41
-
42
- test "prevents double quoting" do
43
- name = Name.new('"quoted_schema"', '"quoted_table"')
44
- assert_equal "quoted_schema.quoted_table", name.to_s
45
- assert_equal %("quoted_schema"."quoted_table"), name.quoted
46
- end
47
-
48
- test "equality based on state" do
49
- assert_equal Name.new("access", "users"), Name.new("access", "users")
50
- assert_equal Name.new(nil, "users"), Name.new(nil, "users")
51
- assert_not_equal Name.new(nil, "users"), Name.new("access", "users")
52
- assert_not_equal Name.new("access", "users"), Name.new("public", "users")
53
- assert_not_equal Name.new("public", "users"), Name.new("public", "articles")
54
- end
55
-
56
- test "can be used as hash key" do
57
- hash = {Name.new("schema", "article_seq") => "success"}
58
- assert_equal "success", hash[Name.new("schema", "article_seq")]
59
- assert_equal nil, hash[Name.new("schema", "articles")]
60
- assert_equal nil, hash[Name.new("public", "article_seq")]
61
- end
62
- end
1
+ require 'cases/helper'
2
+ require 'active_record/connection_adapters/postgresql/utils'
3
+
4
+ class PostgreSQLUtilsTest < ActiveRecord::PostgreSQLTestCase
5
+ Name = ActiveRecord::ConnectionAdapters::PostgreSQL::Name
6
+ include ActiveRecord::ConnectionAdapters::PostgreSQL::Utils
7
+
8
+ def test_extract_schema_qualified_name
9
+ {
10
+ %(table_name) => [nil,'table_name'],
11
+ %("table.name") => [nil,'table.name'],
12
+ %(schema.table_name) => %w{schema table_name},
13
+ %("schema".table_name) => %w{schema table_name},
14
+ %(schema."table_name") => %w{schema table_name},
15
+ %("schema"."table_name") => %w{schema table_name},
16
+ %("even spaces".table) => ['even spaces','table'],
17
+ %(schema."table.name") => ['schema', 'table.name']
18
+ }.each do |given, expect|
19
+ assert_equal Name.new(*expect), extract_schema_qualified_name(given)
20
+ end
21
+ end
22
+ end
23
+
24
+ class PostgreSQLNameTest < ActiveRecord::PostgreSQLTestCase
25
+ Name = ActiveRecord::ConnectionAdapters::PostgreSQL::Name
26
+
27
+ test "represents itself as schema.name" do
28
+ obj = Name.new("public", "articles")
29
+ assert_equal "public.articles", obj.to_s
30
+ end
31
+
32
+ test "without schema, represents itself as name only" do
33
+ obj = Name.new(nil, "articles")
34
+ assert_equal "articles", obj.to_s
35
+ end
36
+
37
+ test "quoted returns a string representation usable in a query" do
38
+ assert_equal %("articles"), Name.new(nil, "articles").quoted
39
+ assert_equal %("public"."articles"), Name.new("public", "articles").quoted
40
+ end
41
+
42
+ test "prevents double quoting" do
43
+ name = Name.new('"quoted_schema"', '"quoted_table"')
44
+ assert_equal "quoted_schema.quoted_table", name.to_s
45
+ assert_equal %("quoted_schema"."quoted_table"), name.quoted
46
+ end
47
+
48
+ test "equality based on state" do
49
+ assert_equal Name.new("access", "users"), Name.new("access", "users")
50
+ assert_equal Name.new(nil, "users"), Name.new(nil, "users")
51
+ assert_not_equal Name.new(nil, "users"), Name.new("access", "users")
52
+ assert_not_equal Name.new("access", "users"), Name.new("public", "users")
53
+ assert_not_equal Name.new("public", "users"), Name.new("public", "articles")
54
+ end
55
+
56
+ test "can be used as hash key" do
57
+ hash = {Name.new("schema", "article_seq") => "success"}
58
+ assert_equal "success", hash[Name.new("schema", "article_seq")]
59
+ assert_equal nil, hash[Name.new("schema", "articles")]
60
+ assert_equal nil, hash[Name.new("public", "article_seq")]
61
+ end
62
+ end
@@ -1,294 +1,294 @@
1
- require "cases/helper"
2
- require 'support/schema_dumping_helper'
3
-
4
- module PostgresqlUUIDHelper
5
- def connection
6
- @connection ||= ActiveRecord::Base.connection
7
- end
8
-
9
- def drop_table(name)
10
- connection.drop_table name, if_exists: true
11
- end
12
- end
13
-
14
- class PostgresqlUUIDTest < ActiveRecord::PostgreSQLTestCase
15
- include PostgresqlUUIDHelper
16
- include SchemaDumpingHelper
17
-
18
- class UUIDType < ActiveRecord::Base
19
- self.table_name = "uuid_data_type"
20
- end
21
-
22
- setup do
23
- enable_extension!('uuid-ossp', connection)
24
-
25
- connection.create_table "uuid_data_type" do |t|
26
- t.uuid 'guid'
27
- end
28
- end
29
-
30
- teardown do
31
- drop_table "uuid_data_type"
32
- end
33
-
34
- def test_change_column_default
35
- @connection.add_column :uuid_data_type, :thingy, :uuid, null: false, default: "uuid_generate_v1()"
36
- UUIDType.reset_column_information
37
- column = UUIDType.columns_hash['thingy']
38
- assert_equal "uuid_generate_v1()", column.default_function
39
-
40
- @connection.change_column :uuid_data_type, :thingy, :uuid, null: false, default: "uuid_generate_v4()"
41
-
42
- UUIDType.reset_column_information
43
- column = UUIDType.columns_hash['thingy']
44
- assert_equal "uuid_generate_v4()", column.default_function
45
- ensure
46
- UUIDType.reset_column_information
47
- end
48
-
49
- def test_data_type_of_uuid_types
50
- column = UUIDType.columns_hash["guid"]
51
- assert_equal :uuid, column.type
52
- assert_equal "uuid", column.sql_type
53
- assert_not column.array?
54
-
55
- type = UUIDType.type_for_attribute("guid")
56
- assert_not type.binary?
57
- end
58
-
59
- def test_treat_blank_uuid_as_nil
60
- UUIDType.create! guid: ''
61
- assert_equal(nil, UUIDType.last.guid)
62
- end
63
-
64
- def test_treat_invalid_uuid_as_nil
65
- uuid = UUIDType.create! guid: 'foobar'
66
- assert_equal(nil, uuid.guid)
67
- end
68
-
69
- def test_invalid_uuid_dont_modify_before_type_cast
70
- uuid = UUIDType.new guid: 'foobar'
71
- assert_equal 'foobar', uuid.guid_before_type_cast
72
- end
73
-
74
- def test_acceptable_uuid_regex
75
- # Valid uuids
76
- ['A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11',
77
- '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}',
78
- 'a0eebc999c0b4ef8bb6d6bb9bd380a11',
79
- 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11',
80
- '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}',
81
- # The following is not a valid RFC 4122 UUID, but PG doesn't seem to care,
82
- # so we shouldn't block it either. (Pay attention to "fb6d" – the "f" here
83
- # is invalid – it must be one of 8, 9, A, B, a, b according to the spec.)
84
- '{a0eebc99-9c0b-4ef8-fb6d-6bb9bd380a11}',
85
- ].each do |valid_uuid|
86
- uuid = UUIDType.new guid: valid_uuid
87
- assert_not_nil uuid.guid
88
- end
89
-
90
- # Invalid uuids
91
- [['A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'],
92
- Hash.new,
93
- 0,
94
- 0.0,
95
- true,
96
- 'Z0000C99-9C0B-4EF8-BB6D-6BB9BD380A11',
97
- 'a0eebc999r0b4ef8ab6d6bb9bd380a11',
98
- 'a0ee-bc99------4ef8-bb6d-6bb9-bd38-0a11',
99
- '{a0eebc99-bb6d6bb9-bd380a11}'].each do |invalid_uuid|
100
- uuid = UUIDType.new guid: invalid_uuid
101
- assert_nil uuid.guid
102
- end
103
- end
104
-
105
- def test_uuid_formats
106
- ["A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11",
107
- "{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}",
108
- "a0eebc999c0b4ef8bb6d6bb9bd380a11",
109
- "a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11",
110
- "{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}"].each do |valid_uuid|
111
- UUIDType.create(guid: valid_uuid)
112
- uuid = UUIDType.last
113
- assert_equal "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11", uuid.guid
114
- end
115
- end
116
-
117
- def test_schema_dump_with_shorthand
118
- output = dump_table_schema "uuid_data_type"
119
- assert_match %r{t\.uuid "guid"}, output
120
- end
121
-
122
- def test_uniqueness_validation_ignores_uuid
123
- klass = Class.new(ActiveRecord::Base) do
124
- self.table_name = "uuid_data_type"
125
- validates :guid, uniqueness: { case_sensitive: false }
126
-
127
- def self.name
128
- "UUIDType"
129
- end
130
- end
131
-
132
- record = klass.create!(guid: "a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11")
133
- duplicate = klass.new(guid: record.guid)
134
-
135
- assert record.guid.present? # Ensure we actually are testing a UUID
136
- assert_not duplicate.valid?
137
- end
138
- end
139
-
140
- class PostgresqlUUIDGenerationTest < ActiveRecord::PostgreSQLTestCase
141
- include PostgresqlUUIDHelper
142
- include SchemaDumpingHelper
143
-
144
- class UUID < ActiveRecord::Base
145
- self.table_name = 'pg_uuids'
146
- end
147
-
148
- setup do
149
- connection.create_table('pg_uuids', id: :uuid, default: 'uuid_generate_v1()') do |t|
150
- t.string 'name'
151
- t.uuid 'other_uuid', default: 'uuid_generate_v4()'
152
- end
153
-
154
- # Create custom PostgreSQL function to generate UUIDs
155
- # to test dumping tables which columns have defaults with custom functions
156
- connection.execute <<-SQL
157
- CREATE OR REPLACE FUNCTION my_uuid_generator() RETURNS uuid
158
- AS $$ SELECT * FROM uuid_generate_v4() $$
159
- LANGUAGE SQL VOLATILE;
160
- SQL
161
-
162
- # Create such a table with custom function as default value generator
163
- connection.create_table('pg_uuids_2', id: :uuid, default: 'my_uuid_generator()') do |t|
164
- t.string 'name'
165
- t.uuid 'other_uuid_2', default: 'my_uuid_generator()'
166
- end
167
- end
168
-
169
- teardown do
170
- drop_table "pg_uuids"
171
- drop_table 'pg_uuids_2'
172
- connection.execute 'DROP FUNCTION IF EXISTS my_uuid_generator();'
173
- end
174
-
175
- if ActiveRecord::Base.connection.supports_extensions?
176
- def test_id_is_uuid
177
- assert_equal :uuid, UUID.columns_hash['id'].type
178
- assert UUID.primary_key
179
- end
180
-
181
- def test_id_has_a_default
182
- u = UUID.create
183
- assert_not_nil u.id
184
- end
185
-
186
- def test_auto_create_uuid
187
- u = UUID.create
188
- u.reload
189
- assert_not_nil u.other_uuid
190
- end
191
-
192
- def test_pk_and_sequence_for_uuid_primary_key
193
- pk, seq = connection.pk_and_sequence_for('pg_uuids')
194
- assert_equal 'id', pk
195
- assert_equal nil, seq
196
- end
197
-
198
- def test_schema_dumper_for_uuid_primary_key
199
- schema = dump_table_schema "pg_uuids"
200
- assert_match(/\bcreate_table "pg_uuids", id: :uuid, default: -> { "uuid_generate_v1\(\)" }/, schema)
201
- assert_match(/t\.uuid "other_uuid", default: -> { "uuid_generate_v4\(\)" }/, schema)
202
- end
203
-
204
- def test_schema_dumper_for_uuid_primary_key_with_custom_default
205
- schema = dump_table_schema "pg_uuids_2"
206
- assert_match(/\bcreate_table "pg_uuids_2", id: :uuid, default: -> { "my_uuid_generator\(\)" }/, schema)
207
- assert_match(/t\.uuid "other_uuid_2", default: -> { "my_uuid_generator\(\)" }/, schema)
208
- end
209
- end
210
- end
211
-
212
- class PostgresqlUUIDTestNilDefault < ActiveRecord::PostgreSQLTestCase
213
- include PostgresqlUUIDHelper
214
- include SchemaDumpingHelper
215
-
216
- setup do
217
- connection.create_table('pg_uuids', id: false) do |t|
218
- t.primary_key :id, :uuid, default: nil
219
- t.string 'name'
220
- end
221
- end
222
-
223
- teardown do
224
- drop_table "pg_uuids"
225
- end
226
-
227
- if ActiveRecord::Base.connection.supports_extensions?
228
- def test_id_allows_default_override_via_nil
229
- col_desc = connection.execute("SELECT pg_get_expr(d.adbin, d.adrelid) as default
230
- FROM pg_attribute a
231
- LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
232
- WHERE a.attname='id' AND a.attrelid = 'pg_uuids'::regclass").first
233
- assert_nil col_desc["default"]
234
- end
235
-
236
- def test_schema_dumper_for_uuid_primary_key_with_default_override_via_nil
237
- schema = dump_table_schema "pg_uuids"
238
- assert_match(/\bcreate_table "pg_uuids", id: :uuid, default: nil/, schema)
239
- end
240
- end
241
- end
242
-
243
- class PostgresqlUUIDTestInverseOf < ActiveRecord::PostgreSQLTestCase
244
- include PostgresqlUUIDHelper
245
-
246
- class UuidPost < ActiveRecord::Base
247
- self.table_name = 'pg_uuid_posts'
248
- has_many :uuid_comments, inverse_of: :uuid_post
249
- end
250
-
251
- class UuidComment < ActiveRecord::Base
252
- self.table_name = 'pg_uuid_comments'
253
- belongs_to :uuid_post
254
- end
255
-
256
- setup do
257
- connection.transaction do
258
- connection.create_table('pg_uuid_posts', id: :uuid) do |t|
259
- t.string 'title'
260
- end
261
- connection.create_table('pg_uuid_comments', id: :uuid) do |t|
262
- t.references :uuid_post, type: :uuid
263
- t.string 'content'
264
- end
265
- end
266
- end
267
-
268
- teardown do
269
- drop_table "pg_uuid_comments"
270
- drop_table "pg_uuid_posts"
271
- end
272
-
273
- if ActiveRecord::Base.connection.supports_extensions?
274
- def test_collection_association_with_uuid
275
- post = UuidPost.create!
276
- comment = post.uuid_comments.create!
277
- assert post.uuid_comments.find(comment.id)
278
- end
279
-
280
- def test_find_with_uuid
281
- UuidPost.create!
282
- assert_raise ActiveRecord::RecordNotFound do
283
- UuidPost.find(123456)
284
- end
285
-
286
- end
287
-
288
- def test_find_by_with_uuid
289
- UuidPost.create!
290
- assert_nil UuidPost.find_by(id: 789)
291
- end
292
- end
293
-
294
- end
1
+ require "cases/helper"
2
+ require 'support/schema_dumping_helper'
3
+
4
+ module PostgresqlUUIDHelper
5
+ def connection
6
+ @connection ||= ActiveRecord::Base.connection
7
+ end
8
+
9
+ def drop_table(name)
10
+ connection.drop_table name, if_exists: true
11
+ end
12
+ end
13
+
14
+ class PostgresqlUUIDTest < ActiveRecord::PostgreSQLTestCase
15
+ include PostgresqlUUIDHelper
16
+ include SchemaDumpingHelper
17
+
18
+ class UUIDType < ActiveRecord::Base
19
+ self.table_name = "uuid_data_type"
20
+ end
21
+
22
+ setup do
23
+ enable_extension!('uuid-ossp', connection)
24
+
25
+ connection.create_table "uuid_data_type" do |t|
26
+ t.uuid 'guid'
27
+ end
28
+ end
29
+
30
+ teardown do
31
+ drop_table "uuid_data_type"
32
+ end
33
+
34
+ def test_change_column_default
35
+ @connection.add_column :uuid_data_type, :thingy, :uuid, null: false, default: "uuid_generate_v1()"
36
+ UUIDType.reset_column_information
37
+ column = UUIDType.columns_hash['thingy']
38
+ assert_equal "uuid_generate_v1()", column.default_function
39
+
40
+ @connection.change_column :uuid_data_type, :thingy, :uuid, null: false, default: "uuid_generate_v4()"
41
+
42
+ UUIDType.reset_column_information
43
+ column = UUIDType.columns_hash['thingy']
44
+ assert_equal "uuid_generate_v4()", column.default_function
45
+ ensure
46
+ UUIDType.reset_column_information
47
+ end
48
+
49
+ def test_data_type_of_uuid_types
50
+ column = UUIDType.columns_hash["guid"]
51
+ assert_equal :uuid, column.type
52
+ assert_equal "uuid", column.sql_type
53
+ assert_not column.array?
54
+
55
+ type = UUIDType.type_for_attribute("guid")
56
+ assert_not type.binary?
57
+ end
58
+
59
+ def test_treat_blank_uuid_as_nil
60
+ UUIDType.create! guid: ''
61
+ assert_equal(nil, UUIDType.last.guid)
62
+ end
63
+
64
+ def test_treat_invalid_uuid_as_nil
65
+ uuid = UUIDType.create! guid: 'foobar'
66
+ assert_equal(nil, uuid.guid)
67
+ end
68
+
69
+ def test_invalid_uuid_dont_modify_before_type_cast
70
+ uuid = UUIDType.new guid: 'foobar'
71
+ assert_equal 'foobar', uuid.guid_before_type_cast
72
+ end
73
+
74
+ def test_acceptable_uuid_regex
75
+ # Valid uuids
76
+ ['A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11',
77
+ '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}',
78
+ 'a0eebc999c0b4ef8bb6d6bb9bd380a11',
79
+ 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11',
80
+ '{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}',
81
+ # The following is not a valid RFC 4122 UUID, but PG doesn't seem to care,
82
+ # so we shouldn't block it either. (Pay attention to "fb6d" – the "f" here
83
+ # is invalid – it must be one of 8, 9, A, B, a, b according to the spec.)
84
+ '{a0eebc99-9c0b-4ef8-fb6d-6bb9bd380a11}',
85
+ ].each do |valid_uuid|
86
+ uuid = UUIDType.new guid: valid_uuid
87
+ assert_not_nil uuid.guid
88
+ end
89
+
90
+ # Invalid uuids
91
+ [['A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'],
92
+ Hash.new,
93
+ 0,
94
+ 0.0,
95
+ true,
96
+ 'Z0000C99-9C0B-4EF8-BB6D-6BB9BD380A11',
97
+ 'a0eebc999r0b4ef8ab6d6bb9bd380a11',
98
+ 'a0ee-bc99------4ef8-bb6d-6bb9-bd38-0a11',
99
+ '{a0eebc99-bb6d6bb9-bd380a11}'].each do |invalid_uuid|
100
+ uuid = UUIDType.new guid: invalid_uuid
101
+ assert_nil uuid.guid
102
+ end
103
+ end
104
+
105
+ def test_uuid_formats
106
+ ["A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11",
107
+ "{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}",
108
+ "a0eebc999c0b4ef8bb6d6bb9bd380a11",
109
+ "a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11",
110
+ "{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}"].each do |valid_uuid|
111
+ UUIDType.create(guid: valid_uuid)
112
+ uuid = UUIDType.last
113
+ assert_equal "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11", uuid.guid
114
+ end
115
+ end
116
+
117
+ def test_schema_dump_with_shorthand
118
+ output = dump_table_schema "uuid_data_type"
119
+ assert_match %r{t\.uuid "guid"}, output
120
+ end
121
+
122
+ def test_uniqueness_validation_ignores_uuid
123
+ klass = Class.new(ActiveRecord::Base) do
124
+ self.table_name = "uuid_data_type"
125
+ validates :guid, uniqueness: { case_sensitive: false }
126
+
127
+ def self.name
128
+ "UUIDType"
129
+ end
130
+ end
131
+
132
+ record = klass.create!(guid: "a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11")
133
+ duplicate = klass.new(guid: record.guid)
134
+
135
+ assert record.guid.present? # Ensure we actually are testing a UUID
136
+ assert_not duplicate.valid?
137
+ end
138
+ end
139
+
140
+ class PostgresqlUUIDGenerationTest < ActiveRecord::PostgreSQLTestCase
141
+ include PostgresqlUUIDHelper
142
+ include SchemaDumpingHelper
143
+
144
+ class UUID < ActiveRecord::Base
145
+ self.table_name = 'pg_uuids'
146
+ end
147
+
148
+ setup do
149
+ connection.create_table('pg_uuids', id: :uuid, default: 'uuid_generate_v1()') do |t|
150
+ t.string 'name'
151
+ t.uuid 'other_uuid', default: 'uuid_generate_v4()'
152
+ end
153
+
154
+ # Create custom PostgreSQL function to generate UUIDs
155
+ # to test dumping tables which columns have defaults with custom functions
156
+ connection.execute <<-SQL
157
+ CREATE OR REPLACE FUNCTION my_uuid_generator() RETURNS uuid
158
+ AS $$ SELECT * FROM uuid_generate_v4() $$
159
+ LANGUAGE SQL VOLATILE;
160
+ SQL
161
+
162
+ # Create such a table with custom function as default value generator
163
+ connection.create_table('pg_uuids_2', id: :uuid, default: 'my_uuid_generator()') do |t|
164
+ t.string 'name'
165
+ t.uuid 'other_uuid_2', default: 'my_uuid_generator()'
166
+ end
167
+ end
168
+
169
+ teardown do
170
+ drop_table "pg_uuids"
171
+ drop_table 'pg_uuids_2'
172
+ connection.execute 'DROP FUNCTION IF EXISTS my_uuid_generator();'
173
+ end
174
+
175
+ if ActiveRecord::Base.connection.supports_extensions?
176
+ def test_id_is_uuid
177
+ assert_equal :uuid, UUID.columns_hash['id'].type
178
+ assert UUID.primary_key
179
+ end
180
+
181
+ def test_id_has_a_default
182
+ u = UUID.create
183
+ assert_not_nil u.id
184
+ end
185
+
186
+ def test_auto_create_uuid
187
+ u = UUID.create
188
+ u.reload
189
+ assert_not_nil u.other_uuid
190
+ end
191
+
192
+ def test_pk_and_sequence_for_uuid_primary_key
193
+ pk, seq = connection.pk_and_sequence_for('pg_uuids')
194
+ assert_equal 'id', pk
195
+ assert_equal nil, seq
196
+ end
197
+
198
+ def test_schema_dumper_for_uuid_primary_key
199
+ schema = dump_table_schema "pg_uuids"
200
+ assert_match(/\bcreate_table "pg_uuids", id: :uuid, default: -> { "uuid_generate_v1\(\)" }/, schema)
201
+ assert_match(/t\.uuid "other_uuid", default: -> { "uuid_generate_v4\(\)" }/, schema)
202
+ end
203
+
204
+ def test_schema_dumper_for_uuid_primary_key_with_custom_default
205
+ schema = dump_table_schema "pg_uuids_2"
206
+ assert_match(/\bcreate_table "pg_uuids_2", id: :uuid, default: -> { "my_uuid_generator\(\)" }/, schema)
207
+ assert_match(/t\.uuid "other_uuid_2", default: -> { "my_uuid_generator\(\)" }/, schema)
208
+ end
209
+ end
210
+ end
211
+
212
+ class PostgresqlUUIDTestNilDefault < ActiveRecord::PostgreSQLTestCase
213
+ include PostgresqlUUIDHelper
214
+ include SchemaDumpingHelper
215
+
216
+ setup do
217
+ connection.create_table('pg_uuids', id: false) do |t|
218
+ t.primary_key :id, :uuid, default: nil
219
+ t.string 'name'
220
+ end
221
+ end
222
+
223
+ teardown do
224
+ drop_table "pg_uuids"
225
+ end
226
+
227
+ if ActiveRecord::Base.connection.supports_extensions?
228
+ def test_id_allows_default_override_via_nil
229
+ col_desc = connection.execute("SELECT pg_get_expr(d.adbin, d.adrelid) as default
230
+ FROM pg_attribute a
231
+ LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
232
+ WHERE a.attname='id' AND a.attrelid = 'pg_uuids'::regclass").first
233
+ assert_nil col_desc["default"]
234
+ end
235
+
236
+ def test_schema_dumper_for_uuid_primary_key_with_default_override_via_nil
237
+ schema = dump_table_schema "pg_uuids"
238
+ assert_match(/\bcreate_table "pg_uuids", id: :uuid, default: nil/, schema)
239
+ end
240
+ end
241
+ end
242
+
243
+ class PostgresqlUUIDTestInverseOf < ActiveRecord::PostgreSQLTestCase
244
+ include PostgresqlUUIDHelper
245
+
246
+ class UuidPost < ActiveRecord::Base
247
+ self.table_name = 'pg_uuid_posts'
248
+ has_many :uuid_comments, inverse_of: :uuid_post
249
+ end
250
+
251
+ class UuidComment < ActiveRecord::Base
252
+ self.table_name = 'pg_uuid_comments'
253
+ belongs_to :uuid_post
254
+ end
255
+
256
+ setup do
257
+ connection.transaction do
258
+ connection.create_table('pg_uuid_posts', id: :uuid) do |t|
259
+ t.string 'title'
260
+ end
261
+ connection.create_table('pg_uuid_comments', id: :uuid) do |t|
262
+ t.references :uuid_post, type: :uuid
263
+ t.string 'content'
264
+ end
265
+ end
266
+ end
267
+
268
+ teardown do
269
+ drop_table "pg_uuid_comments"
270
+ drop_table "pg_uuid_posts"
271
+ end
272
+
273
+ if ActiveRecord::Base.connection.supports_extensions?
274
+ def test_collection_association_with_uuid
275
+ post = UuidPost.create!
276
+ comment = post.uuid_comments.create!
277
+ assert post.uuid_comments.find(comment.id)
278
+ end
279
+
280
+ def test_find_with_uuid
281
+ UuidPost.create!
282
+ assert_raise ActiveRecord::RecordNotFound do
283
+ UuidPost.find(123456)
284
+ end
285
+
286
+ end
287
+
288
+ def test_find_by_with_uuid
289
+ UuidPost.create!
290
+ assert_nil UuidPost.find_by(id: 789)
291
+ end
292
+ end
293
+
294
+ end