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
@@ -0,0 +1,257 @@
1
+ require "cases/helper"
2
+ require 'support/connection_helper'
3
+
4
+ module ActiveRecord
5
+ class PostgresqlConnectionTest < ActiveRecord::PostgreSQLTestCase
6
+ include ConnectionHelper
7
+
8
+ class NonExistentTable < ActiveRecord::Base
9
+ end
10
+
11
+ fixtures :comments
12
+
13
+ def setup
14
+ super
15
+ @subscriber = SQLSubscriber.new
16
+ @subscription = ActiveSupport::Notifications.subscribe('sql.active_record', @subscriber)
17
+ @connection = ActiveRecord::Base.connection
18
+ end
19
+
20
+ def teardown
21
+ ActiveSupport::Notifications.unsubscribe(@subscription)
22
+ super
23
+ end
24
+
25
+ def test_truncate
26
+ count = ActiveRecord::Base.connection.execute("select count(*) from comments").first['count'].to_i
27
+ assert_operator count, :>, 0
28
+ ActiveRecord::Base.connection.truncate("comments")
29
+ count = ActiveRecord::Base.connection.execute("select count(*) from comments").first['count'].to_i
30
+ assert_equal 0, count
31
+ end
32
+
33
+ def test_encoding
34
+ assert_not_nil @connection.encoding
35
+ end
36
+
37
+ def test_collation
38
+ assert_not_nil @connection.collation
39
+ end
40
+
41
+ def test_ctype
42
+ assert_not_nil @connection.ctype
43
+ end
44
+
45
+ def test_default_client_min_messages
46
+ assert_equal "warning", @connection.client_min_messages
47
+ end
48
+
49
+ # Ensure, we can set connection params using the example of Generic
50
+ # Query Optimizer (geqo). It is 'on' per default.
51
+ def test_connection_options
52
+ params = ActiveRecord::Base.connection_config.dup
53
+ params[:options] = "-c geqo=off"
54
+ NonExistentTable.establish_connection(params)
55
+
56
+ # Verify the connection param has been applied.
57
+ expect = NonExistentTable.connection.query('show geqo').first.first
58
+ assert_equal 'off', expect
59
+ end
60
+
61
+ def test_reset
62
+ @connection.query('ROLLBACK')
63
+ @connection.query('SET geqo TO off')
64
+
65
+ # Verify the setting has been applied.
66
+ expect = @connection.query('show geqo').first.first
67
+ assert_equal 'off', expect
68
+
69
+ @connection.reset!
70
+
71
+ # Verify the setting has been cleared.
72
+ expect = @connection.query('show geqo').first.first
73
+ assert_equal 'on', expect
74
+ end
75
+
76
+ def test_reset_with_transaction
77
+ @connection.query('ROLLBACK')
78
+ @connection.query('SET geqo TO off')
79
+
80
+ # Verify the setting has been applied.
81
+ expect = @connection.query('show geqo').first.first
82
+ assert_equal 'off', expect
83
+
84
+ @connection.query('BEGIN')
85
+ @connection.reset!
86
+
87
+ # Verify the setting has been cleared.
88
+ expect = @connection.query('show geqo').first.first
89
+ assert_equal 'on', expect
90
+ end
91
+
92
+ def test_tables_logs_name
93
+ ActiveSupport::Deprecation.silence { @connection.tables('hello') }
94
+ assert_equal 'SCHEMA', @subscriber.logged[0][1]
95
+ end
96
+
97
+ def test_indexes_logs_name
98
+ @connection.indexes('items', 'hello')
99
+ assert_equal 'SCHEMA', @subscriber.logged[0][1]
100
+ end
101
+
102
+ def test_table_exists_logs_name
103
+ ActiveSupport::Deprecation.silence { @connection.table_exists?('items') }
104
+ assert_equal 'SCHEMA', @subscriber.logged[0][1]
105
+ end
106
+
107
+ def test_table_alias_length_logs_name
108
+ @connection.instance_variable_set("@max_identifier_length", nil)
109
+ @connection.table_alias_length
110
+ assert_equal 'SCHEMA', @subscriber.logged[0][1]
111
+ end
112
+
113
+ def test_current_database_logs_name
114
+ @connection.current_database
115
+ assert_equal 'SCHEMA', @subscriber.logged[0][1]
116
+ end
117
+
118
+ def test_encoding_logs_name
119
+ @connection.encoding
120
+ assert_equal 'SCHEMA', @subscriber.logged[0][1]
121
+ end
122
+
123
+ def test_schema_names_logs_name
124
+ @connection.schema_names
125
+ assert_equal 'SCHEMA', @subscriber.logged[0][1]
126
+ end
127
+
128
+ if ActiveRecord::Base.connection.prepared_statements
129
+ def test_statement_key_is_logged
130
+ bind = Relation::QueryAttribute.new(nil, 1, Type::Value.new)
131
+ @connection.exec_query('SELECT $1::integer', 'SQL', [bind], prepare: true)
132
+ name = @subscriber.payloads.last[:statement_name]
133
+ assert name
134
+ res = @connection.exec_query("EXPLAIN (FORMAT JSON) EXECUTE #{name}(1)")
135
+ plan = res.column_types['QUERY PLAN'].deserialize res.rows.first.first
136
+ assert_operator plan.length, :>, 0
137
+ end
138
+ end
139
+
140
+ # Must have PostgreSQL >= 9.2, or with_manual_interventions set to
141
+ # true for this test to run.
142
+ #
143
+ # When prompted, restart the PostgreSQL server with the
144
+ # "-m fast" option or kill the individual connection assuming
145
+ # you know the incantation to do that.
146
+ # To restart PostgreSQL 9.1 on OS X, installed via MacPorts, ...
147
+ # sudo su postgres -c "pg_ctl restart -D /opt/local/var/db/postgresql91/defaultdb/ -m fast"
148
+ def test_reconnection_after_actual_disconnection_with_verify
149
+ original_connection_pid = @connection.query('select pg_backend_pid()')
150
+
151
+ # Sanity check.
152
+ assert @connection.active?
153
+
154
+ if @connection.send(:postgresql_version) >= 90200
155
+ secondary_connection = ActiveRecord::Base.connection_pool.checkout
156
+ secondary_connection.query("select pg_terminate_backend(#{original_connection_pid.first.first})")
157
+ ActiveRecord::Base.connection_pool.checkin(secondary_connection)
158
+ elsif ARTest.config['with_manual_interventions']
159
+ puts 'Kill the connection now (e.g. by restarting the PostgreSQL ' +
160
+ 'server with the "-m fast" option) and then press enter.'
161
+ $stdin.gets
162
+ else
163
+ # We're not capable of terminating the backend ourselves, and
164
+ # we're not allowed to seek assistance; bail out without
165
+ # actually testing anything.
166
+ return
167
+ end
168
+
169
+ @connection.verify!
170
+
171
+ assert @connection.active?
172
+
173
+ # If we get no exception here, then either we re-connected successfully, or
174
+ # we never actually got disconnected.
175
+ new_connection_pid = @connection.query('select pg_backend_pid()')
176
+
177
+ assert_not_equal original_connection_pid, new_connection_pid,
178
+ "umm -- looks like you didn't break the connection, because we're still " +
179
+ "successfully querying with the same connection pid."
180
+ ensure
181
+ # Repair all fixture connections so other tests won't break.
182
+ @fixture_connections.each(&:verify!)
183
+ end
184
+
185
+ def test_set_session_variable_true
186
+ run_without_connection do |orig_connection|
187
+ ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => true}}))
188
+ set_true = ActiveRecord::Base.connection.exec_query "SHOW DEBUG_PRINT_PLAN"
189
+ assert_equal set_true.rows, [["on"]]
190
+ end
191
+ end
192
+
193
+ def test_set_session_variable_false
194
+ run_without_connection do |orig_connection|
195
+ ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => false}}))
196
+ set_false = ActiveRecord::Base.connection.exec_query "SHOW DEBUG_PRINT_PLAN"
197
+ assert_equal set_false.rows, [["off"]]
198
+ end
199
+ end
200
+
201
+ def test_set_session_variable_nil
202
+ run_without_connection do |orig_connection|
203
+ # This should be a no-op that does not raise an error
204
+ ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => nil}}))
205
+ end
206
+ end
207
+
208
+ def test_set_session_variable_default
209
+ run_without_connection do |orig_connection|
210
+ # This should execute a query that does not raise an error
211
+ ActiveRecord::Base.establish_connection(orig_connection.deep_merge({:variables => {:debug_print_plan => :default}}))
212
+ end
213
+ end
214
+
215
+ def test_get_and_release_advisory_lock
216
+ lock_id = 5295901941911233559
217
+ list_advisory_locks = <<-SQL
218
+ SELECT locktype,
219
+ (classid::bigint << 32) | objid::bigint AS lock_id
220
+ FROM pg_locks
221
+ WHERE locktype = 'advisory'
222
+ SQL
223
+
224
+ got_lock = @connection.get_advisory_lock(lock_id)
225
+ assert got_lock, "get_advisory_lock should have returned true but it didn't"
226
+
227
+ advisory_lock = @connection.query(list_advisory_locks).find {|l| l[1] == lock_id}
228
+ assert advisory_lock,
229
+ "expected to find an advisory lock with lock_id #{lock_id} but there wasn't one"
230
+
231
+ released_lock = @connection.release_advisory_lock(lock_id)
232
+ assert released_lock, "expected release_advisory_lock to return true but it didn't"
233
+
234
+ advisory_locks = @connection.query(list_advisory_locks).select {|l| l[1] == lock_id}
235
+ assert_empty advisory_locks,
236
+ "expected to have released advisory lock with lock_id #{lock_id} but it was still held"
237
+ end
238
+
239
+ def test_release_non_existent_advisory_lock
240
+ fake_lock_id = 2940075057017742022
241
+ with_warning_suppression do
242
+ released_non_existent_lock = @connection.release_advisory_lock(fake_lock_id)
243
+ assert_equal released_non_existent_lock, false,
244
+ 'expected release_advisory_lock to return false when there was no lock to release'
245
+ end
246
+ end
247
+
248
+ protected
249
+
250
+ def with_warning_suppression
251
+ log_level = @connection.client_min_messages
252
+ @connection.client_min_messages = 'error'
253
+ yield
254
+ @connection.client_min_messages = log_level
255
+ end
256
+ end
257
+ end
@@ -0,0 +1,92 @@
1
+ require "cases/helper"
2
+ require 'support/ddl_helper'
3
+
4
+
5
+ class PostgresqlTime < ActiveRecord::Base
6
+ end
7
+
8
+ class PostgresqlOid < ActiveRecord::Base
9
+ end
10
+
11
+ class PostgresqlLtree < ActiveRecord::Base
12
+ end
13
+
14
+ class PostgresqlDataTypeTest < ActiveRecord::PostgreSQLTestCase
15
+ self.use_transactional_tests = false
16
+
17
+ def setup
18
+ @connection = ActiveRecord::Base.connection
19
+
20
+ @connection.execute("INSERT INTO postgresql_times (id, time_interval, scaled_time_interval) VALUES (1, '1 year 2 days ago', '3 weeks ago')")
21
+ @first_time = PostgresqlTime.find(1)
22
+
23
+ @connection.execute("INSERT INTO postgresql_oids (id, obj_id) VALUES (1, 1234)")
24
+ @first_oid = PostgresqlOid.find(1)
25
+ end
26
+
27
+ teardown do
28
+ [PostgresqlTime, PostgresqlOid].each(&:delete_all)
29
+ end
30
+
31
+ def test_data_type_of_time_types
32
+ assert_equal :string, @first_time.column_for_attribute(:time_interval).type
33
+ assert_equal :string, @first_time.column_for_attribute(:scaled_time_interval).type
34
+ end
35
+
36
+ def test_data_type_of_oid_types
37
+ assert_equal :integer, @first_oid.column_for_attribute(:obj_id).type
38
+ end
39
+
40
+ def test_time_values
41
+ assert_equal '-1 years -2 days', @first_time.time_interval
42
+ assert_equal '-21 days', @first_time.scaled_time_interval
43
+ end
44
+
45
+ def test_oid_values
46
+ assert_equal 1234, @first_oid.obj_id
47
+ end
48
+
49
+ def test_update_time
50
+ @first_time.time_interval = '2 years 3 minutes'
51
+ assert @first_time.save
52
+ assert @first_time.reload
53
+ assert_equal '2 years 00:03:00', @first_time.time_interval
54
+ end
55
+
56
+ def test_update_oid
57
+ new_value = 567890
58
+ @first_oid.obj_id = new_value
59
+ assert @first_oid.save
60
+ assert @first_oid.reload
61
+ assert_equal new_value, @first_oid.obj_id
62
+ end
63
+
64
+ def test_text_columns_are_limitless_the_upper_limit_is_one_GB
65
+ assert_equal 'text', @connection.type_to_sql(:text, 100_000)
66
+ assert_raise ActiveRecord::ActiveRecordError do
67
+ @connection.type_to_sql :text, 4294967295
68
+ end
69
+ end
70
+ end
71
+
72
+ class PostgresqlInternalDataTypeTest < ActiveRecord::PostgreSQLTestCase
73
+ include DdlHelper
74
+
75
+ setup do
76
+ @connection = ActiveRecord::Base.connection
77
+ end
78
+
79
+ def test_name_column_type
80
+ with_example_table @connection, 'ex', 'data name' do
81
+ column = @connection.columns('ex').find { |col| col.name == 'data' }
82
+ assert_equal :string, column.type
83
+ end
84
+ end
85
+
86
+ def test_char_column_type
87
+ with_example_table @connection, 'ex', 'data "char"' do
88
+ column = @connection.columns('ex').find { |col| col.name == 'data' }
89
+ assert_equal :string, column.type
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,47 @@
1
+ require "cases/helper"
2
+ require 'support/connection_helper'
3
+
4
+ class PostgresqlDomainTest < ActiveRecord::PostgreSQLTestCase
5
+ include ConnectionHelper
6
+
7
+ class PostgresqlDomain < ActiveRecord::Base
8
+ self.table_name = "postgresql_domains"
9
+ end
10
+
11
+ def setup
12
+ @connection = ActiveRecord::Base.connection
13
+ @connection.transaction do
14
+ @connection.execute "CREATE DOMAIN custom_money as numeric(8,2)"
15
+ @connection.create_table('postgresql_domains') do |t|
16
+ t.column :price, :custom_money
17
+ end
18
+ end
19
+ end
20
+
21
+ teardown do
22
+ @connection.drop_table 'postgresql_domains', if_exists: true
23
+ @connection.execute 'DROP DOMAIN IF EXISTS custom_money'
24
+ reset_connection
25
+ end
26
+
27
+ def test_column
28
+ column = PostgresqlDomain.columns_hash["price"]
29
+ assert_equal :decimal, column.type
30
+ assert_equal "custom_money", column.sql_type
31
+ assert_not column.array?
32
+
33
+ type = PostgresqlDomain.type_for_attribute("price")
34
+ assert_not type.binary?
35
+ end
36
+
37
+ def test_domain_acts_like_basetype
38
+ PostgresqlDomain.create price: ""
39
+ record = PostgresqlDomain.first
40
+ assert_nil record.price
41
+
42
+ record.price = "34.15"
43
+ record.save!
44
+
45
+ assert_equal BigDecimal.new("34.15"), record.reload.price
46
+ end
47
+ end
@@ -0,0 +1,91 @@
1
+ require "cases/helper"
2
+ require 'support/connection_helper'
3
+
4
+ class PostgresqlEnumTest < ActiveRecord::PostgreSQLTestCase
5
+ include ConnectionHelper
6
+
7
+ class PostgresqlEnum < ActiveRecord::Base
8
+ self.table_name = "postgresql_enums"
9
+ end
10
+
11
+ def setup
12
+ @connection = ActiveRecord::Base.connection
13
+ @connection.transaction do
14
+ @connection.execute <<-SQL
15
+ CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
16
+ SQL
17
+ @connection.create_table('postgresql_enums') do |t|
18
+ t.column :current_mood, :mood
19
+ end
20
+ end
21
+ end
22
+
23
+ teardown do
24
+ @connection.drop_table 'postgresql_enums', if_exists: true
25
+ @connection.execute 'DROP TYPE IF EXISTS mood'
26
+ reset_connection
27
+ end
28
+
29
+ def test_column
30
+ column = PostgresqlEnum.columns_hash["current_mood"]
31
+ assert_equal :enum, column.type
32
+ assert_equal "mood", column.sql_type
33
+ assert_not column.array?
34
+
35
+ type = PostgresqlEnum.type_for_attribute("current_mood")
36
+ assert_not type.binary?
37
+ end
38
+
39
+ def test_enum_defaults
40
+ @connection.add_column 'postgresql_enums', 'good_mood', :mood, default: 'happy'
41
+ PostgresqlEnum.reset_column_information
42
+
43
+ assert_equal "happy", PostgresqlEnum.column_defaults['good_mood']
44
+ assert_equal "happy", PostgresqlEnum.new.good_mood
45
+ ensure
46
+ PostgresqlEnum.reset_column_information
47
+ end
48
+
49
+ def test_enum_mapping
50
+ @connection.execute "INSERT INTO postgresql_enums VALUES (1, 'sad');"
51
+ enum = PostgresqlEnum.first
52
+ assert_equal "sad", enum.current_mood
53
+
54
+ enum.current_mood = "happy"
55
+ enum.save!
56
+
57
+ assert_equal "happy", enum.reload.current_mood
58
+ end
59
+
60
+ def test_invalid_enum_update
61
+ @connection.execute "INSERT INTO postgresql_enums VALUES (1, 'sad');"
62
+ enum = PostgresqlEnum.first
63
+ enum.current_mood = "angry"
64
+
65
+ assert_raise ActiveRecord::StatementInvalid do
66
+ enum.save
67
+ end
68
+ end
69
+
70
+ def test_no_oid_warning
71
+ @connection.execute "INSERT INTO postgresql_enums VALUES (1, 'sad');"
72
+ stderr_output = capture(:stderr) { PostgresqlEnum.first }
73
+
74
+ assert stderr_output.blank?
75
+ end
76
+
77
+ def test_enum_type_cast
78
+ enum = PostgresqlEnum.new
79
+ enum.current_mood = :happy
80
+
81
+ assert_equal "happy", enum.current_mood
82
+ end
83
+
84
+ def test_assigning_enum_to_nil
85
+ model = PostgresqlEnum.new(current_mood: nil)
86
+
87
+ assert_nil model.current_mood
88
+ assert model.save
89
+ assert_nil model.reload.current_mood
90
+ end
91
+ end