ibm_db 3.0.5-x86-mingw32 → 4.0.0-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (586) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/ParameterizedQueries README +6 -6
  6. data/README +208 -225
  7. data/ext/Makefile.nt32 +181 -181
  8. data/ext/Makefile.nt32.191 +212 -212
  9. data/ext/extconf.rb +291 -291
  10. data/ext/ibm_db.c +11887 -11887
  11. data/ext/ruby_ibm_db.h +241 -241
  12. data/ext/ruby_ibm_db_cli.c +866 -866
  13. data/ext/ruby_ibm_db_cli.h +500 -500
  14. data/init.rb +41 -41
  15. data/lib/IBM_DB.rb +27 -27
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3452 -3177
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +5 -2
  18. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  19. data/lib/mswin32/ibm_db.rb +91 -123
  20. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  21. data/test/active_record/connection_adapters/fake_adapter.rb +49 -46
  22. data/test/assets/example.log +1 -1
  23. data/test/assets/test.txt +1 -1
  24. data/test/cases/adapter_test.rb +351 -276
  25. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  26. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  27. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  28. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  29. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  30. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  31. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  32. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  33. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  34. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  35. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  36. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  37. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  38. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  39. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  40. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  41. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  42. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  43. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  44. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  45. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  46. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  47. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  48. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  49. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  50. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  51. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  52. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  53. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  54. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  55. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  56. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  57. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  58. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  59. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  60. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  61. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  62. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  63. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  64. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  65. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  66. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  67. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  68. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  69. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  70. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  71. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  72. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  73. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  74. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  75. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  76. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  77. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  78. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  79. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  80. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  81. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  82. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  83. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  84. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  85. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  86. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  87. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  88. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  89. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  90. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  91. data/test/cases/aggregations_test.rb +168 -158
  92. data/test/cases/ar_schema_test.rb +146 -161
  93. data/test/cases/associations/association_scope_test.rb +16 -21
  94. data/test/cases/associations/belongs_to_associations_test.rb +1141 -1029
  95. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  96. data/test/cases/associations/callbacks_test.rb +190 -192
  97. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  98. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  99. data/test/cases/associations/eager_load_nested_include_test.rb +126 -128
  100. data/test/cases/associations/eager_singularization_test.rb +148 -148
  101. data/test/cases/associations/eager_test.rb +1514 -1429
  102. data/test/cases/associations/extension_test.rb +87 -82
  103. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +1004 -972
  104. data/test/cases/associations/has_many_associations_test.rb +2501 -2182
  105. data/test/cases/associations/has_many_through_associations_test.rb +1271 -1204
  106. data/test/cases/associations/has_one_associations_test.rb +707 -610
  107. data/test/cases/associations/has_one_through_associations_test.rb +383 -380
  108. data/test/cases/associations/inner_join_association_test.rb +139 -139
  109. data/test/cases/associations/inverse_associations_test.rb +733 -706
  110. data/test/cases/associations/join_model_test.rb +777 -754
  111. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  112. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  113. data/test/cases/associations/required_test.rb +102 -82
  114. data/test/cases/associations_test.rb +385 -380
  115. data/test/cases/attribute_decorators_test.rb +125 -125
  116. data/test/cases/attribute_methods/read_test.rb +60 -60
  117. data/test/cases/attribute_methods_test.rb +1009 -952
  118. data/test/cases/attribute_set_test.rb +270 -210
  119. data/test/cases/attribute_test.rb +246 -180
  120. data/test/cases/attributes_test.rb +253 -136
  121. data/test/cases/autosave_association_test.rb +1708 -1595
  122. data/test/cases/base_test.rb +1713 -1664
  123. data/test/cases/batches_test.rb +489 -212
  124. data/test/cases/binary_test.rb +44 -52
  125. data/test/cases/bind_parameter_test.rb +110 -100
  126. data/test/cases/cache_key_test.rb +25 -0
  127. data/test/cases/calculations_test.rb +798 -646
  128. data/test/cases/callbacks_test.rb +636 -543
  129. data/test/cases/clone_test.rb +40 -40
  130. data/test/cases/coders/json_test.rb +15 -0
  131. data/test/cases/coders/yaml_column_test.rb +63 -63
  132. data/test/cases/collection_cache_key_test.rb +115 -0
  133. data/test/cases/column_alias_test.rb +17 -17
  134. data/test/cases/column_definition_test.rb +92 -123
  135. data/test/cases/comment_test.rb +143 -0
  136. data/test/cases/connection_adapters/adapter_leasing_test.rb +56 -54
  137. data/test/cases/connection_adapters/connection_handler_test.rb +160 -53
  138. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  139. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +255 -293
  140. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +69 -65
  141. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  142. data/test/cases/connection_adapters/schema_cache_test.rb +61 -56
  143. data/test/cases/connection_adapters/type_lookup_test.rb +118 -110
  144. data/test/cases/connection_management_test.rb +112 -122
  145. data/test/cases/connection_pool_test.rb +521 -346
  146. data/test/cases/connection_specification/resolver_test.rb +131 -116
  147. data/test/cases/core_test.rb +112 -112
  148. data/test/cases/counter_cache_test.rb +214 -209
  149. data/test/cases/custom_locking_test.rb +17 -17
  150. data/test/cases/database_statements_test.rb +34 -19
  151. data/test/cases/{invalid_date_test.rb → date_test.rb} +44 -32
  152. data/test/cases/date_time_precision_test.rb +106 -0
  153. data/test/cases/date_time_test.rb +61 -61
  154. data/test/cases/defaults_test.rb +218 -223
  155. data/test/cases/dirty_test.rb +763 -785
  156. data/test/cases/disconnected_test.rb +30 -28
  157. data/test/cases/dup_test.rb +157 -157
  158. data/test/cases/enum_test.rb +444 -290
  159. data/test/cases/errors_test.rb +16 -0
  160. data/test/cases/explain_subscriber_test.rb +64 -64
  161. data/test/cases/explain_test.rb +87 -76
  162. data/test/cases/finder_respond_to_test.rb +60 -60
  163. data/test/cases/finder_test.rb +1294 -1169
  164. data/test/cases/fixture_set/file_test.rb +156 -138
  165. data/test/cases/fixtures_test.rb +988 -908
  166. data/test/cases/forbidden_attributes_protection_test.rb +165 -99
  167. data/test/cases/habtm_destroy_order_test.rb +61 -61
  168. data/test/cases/helper.rb +204 -210
  169. data/test/cases/hot_compatibility_test.rb +142 -54
  170. data/test/cases/i18n_test.rb +45 -45
  171. data/test/cases/inheritance_test.rb +606 -375
  172. data/test/cases/integration_test.rb +155 -139
  173. data/test/cases/invalid_connection_test.rb +24 -22
  174. data/test/cases/invertible_migration_test.rb +387 -295
  175. data/test/cases/json_serialization_test.rb +311 -302
  176. data/test/cases/locking_test.rb +493 -477
  177. data/test/cases/log_subscriber_test.rb +225 -136
  178. data/test/cases/migration/change_schema_test.rb +458 -512
  179. data/test/cases/migration/change_table_test.rb +256 -224
  180. data/test/cases/migration/column_attributes_test.rb +176 -192
  181. data/test/cases/migration/column_positioning_test.rb +56 -56
  182. data/test/cases/migration/columns_test.rb +310 -304
  183. data/test/cases/migration/command_recorder_test.rb +350 -305
  184. data/test/cases/migration/compatibility_test.rb +118 -0
  185. data/test/cases/migration/create_join_table_test.rb +157 -148
  186. data/test/cases/migration/foreign_key_test.rb +360 -328
  187. data/test/cases/migration/helper.rb +39 -39
  188. data/test/cases/migration/index_test.rb +218 -216
  189. data/test/cases/migration/logger_test.rb +36 -36
  190. data/test/cases/migration/pending_migrations_test.rb +52 -53
  191. data/test/cases/migration/references_foreign_key_test.rb +216 -169
  192. data/test/cases/migration/references_index_test.rb +101 -101
  193. data/test/cases/migration/references_statements_test.rb +136 -116
  194. data/test/cases/migration/rename_table_test.rb +93 -93
  195. data/test/cases/migration_test.rb +1157 -959
  196. data/test/cases/migrator_test.rb +470 -388
  197. data/test/cases/mixin_test.rb +68 -70
  198. data/test/cases/modules_test.rb +172 -173
  199. data/test/cases/multiparameter_attributes_test.rb +372 -350
  200. data/test/cases/multiple_db_test.rb +122 -115
  201. data/test/cases/nested_attributes_test.rb +1098 -1070
  202. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  203. data/test/cases/persistence_test.rb +1001 -909
  204. data/test/cases/pooled_connections_test.rb +81 -81
  205. data/test/cases/primary_keys_test.rb +376 -237
  206. data/test/cases/query_cache_test.rb +446 -326
  207. data/test/cases/quoting_test.rb +202 -156
  208. data/test/cases/readonly_test.rb +119 -118
  209. data/test/cases/reaper_test.rb +85 -85
  210. data/test/cases/reflection_test.rb +509 -463
  211. data/test/cases/relation/delegation_test.rb +63 -68
  212. data/test/cases/relation/merging_test.rb +157 -161
  213. data/test/cases/relation/mutation_test.rb +183 -165
  214. data/test/cases/relation/or_test.rb +92 -0
  215. data/test/cases/relation/predicate_builder_test.rb +16 -14
  216. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  217. data/test/cases/relation/where_chain_test.rb +105 -181
  218. data/test/cases/relation/where_clause_test.rb +182 -0
  219. data/test/cases/relation/where_test.rb +322 -300
  220. data/test/cases/relation_test.rb +328 -319
  221. data/test/cases/relations_test.rb +2026 -1815
  222. data/test/cases/reload_models_test.rb +22 -22
  223. data/test/cases/result_test.rb +90 -80
  224. data/test/cases/sanitize_test.rb +176 -83
  225. data/test/cases/schema_dumper_test.rb +457 -463
  226. data/test/cases/schema_loading_test.rb +52 -0
  227. data/test/cases/scoping/default_scoping_test.rb +528 -454
  228. data/test/cases/scoping/named_scoping_test.rb +561 -524
  229. data/test/cases/scoping/relation_scoping_test.rb +400 -357
  230. data/test/cases/secure_token_test.rb +32 -0
  231. data/test/cases/serialization_test.rb +104 -104
  232. data/test/cases/serialized_attribute_test.rb +364 -277
  233. data/test/cases/statement_cache_test.rb +136 -98
  234. data/test/cases/store_test.rb +195 -194
  235. data/test/cases/suppressor_test.rb +63 -0
  236. data/test/cases/tasks/database_tasks_test.rb +462 -398
  237. data/test/cases/tasks/mysql_rake_test.rb +345 -324
  238. data/test/cases/tasks/postgresql_rake_test.rb +304 -250
  239. data/test/cases/tasks/sqlite_rake_test.rb +220 -193
  240. data/test/cases/test_case.rb +131 -123
  241. data/test/cases/test_fixtures_test.rb +36 -0
  242. data/test/cases/time_precision_test.rb +102 -0
  243. data/test/cases/timestamp_test.rb +501 -467
  244. data/test/cases/touch_later_test.rb +121 -0
  245. data/test/cases/transaction_callbacks_test.rb +518 -452
  246. data/test/cases/transaction_isolation_test.rb +106 -106
  247. data/test/cases/transactions_test.rb +834 -817
  248. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  249. data/test/cases/type/date_time_test.rb +14 -0
  250. data/test/cases/type/integer_test.rb +27 -121
  251. data/test/cases/type/string_test.rb +22 -36
  252. data/test/cases/type/type_map_test.rb +177 -177
  253. data/test/cases/type_test.rb +39 -0
  254. data/test/cases/types_test.rb +24 -141
  255. data/test/cases/unconnected_test.rb +33 -33
  256. data/test/cases/validations/absence_validation_test.rb +73 -0
  257. data/test/cases/validations/association_validation_test.rb +97 -86
  258. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  259. data/test/cases/validations/i18n_validation_test.rb +86 -90
  260. data/test/cases/validations/length_validation_test.rb +79 -47
  261. data/test/cases/validations/presence_validation_test.rb +103 -68
  262. data/test/cases/validations/uniqueness_validation_test.rb +548 -457
  263. data/test/cases/validations_repair_helper.rb +19 -23
  264. data/test/cases/validations_test.rb +194 -165
  265. data/test/cases/view_test.rb +216 -119
  266. data/test/cases/yaml_serialization_test.rb +121 -126
  267. data/test/config.example.yml +97 -0
  268. data/test/config.rb +5 -5
  269. data/test/fixtures/accounts.yml +29 -29
  270. data/test/fixtures/admin/accounts.yml +2 -2
  271. data/test/fixtures/admin/users.yml +10 -10
  272. data/test/fixtures/author_addresses.original +11 -0
  273. data/test/fixtures/author_addresses.yml +17 -17
  274. data/test/fixtures/author_favorites.yml +3 -3
  275. data/test/fixtures/authors.original +17 -0
  276. data/test/fixtures/authors.yml +23 -23
  277. data/test/fixtures/bad_posts.yml +9 -0
  278. data/test/fixtures/binaries.yml +133 -133
  279. data/test/fixtures/books.yml +31 -11
  280. data/test/fixtures/bulbs.yml +5 -5
  281. data/test/fixtures/cars.yml +9 -9
  282. data/test/fixtures/categories.yml +19 -19
  283. data/test/fixtures/categories/special_categories.yml +9 -9
  284. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  285. data/test/fixtures/categories_ordered.yml +7 -7
  286. data/test/fixtures/categories_posts.yml +31 -31
  287. data/test/fixtures/categorizations.yml +23 -23
  288. data/test/fixtures/clubs.yml +8 -8
  289. data/test/fixtures/collections.yml +3 -3
  290. data/test/fixtures/colleges.yml +3 -3
  291. data/test/fixtures/comments.yml +65 -65
  292. data/test/fixtures/companies.yml +67 -67
  293. data/test/fixtures/computers.yml +10 -10
  294. data/test/fixtures/content.yml +3 -0
  295. data/test/fixtures/content_positions.yml +3 -0
  296. data/test/fixtures/courses.yml +8 -8
  297. data/test/fixtures/customers.yml +25 -25
  298. data/test/fixtures/dashboards.yml +6 -6
  299. data/test/fixtures/dead_parrots.yml +5 -0
  300. data/test/fixtures/developers.yml +22 -22
  301. data/test/fixtures/developers_projects.yml +16 -16
  302. data/test/fixtures/dog_lovers.yml +7 -7
  303. data/test/fixtures/dogs.yml +4 -4
  304. data/test/fixtures/doubloons.yml +3 -3
  305. data/test/fixtures/edges.yml +5 -5
  306. data/test/fixtures/entrants.yml +14 -14
  307. data/test/fixtures/essays.yml +6 -6
  308. data/test/fixtures/faces.yml +11 -11
  309. data/test/fixtures/fk_test_has_fk.yml +3 -3
  310. data/test/fixtures/fk_test_has_pk.yml +1 -1
  311. data/test/fixtures/friendships.yml +4 -4
  312. data/test/fixtures/funny_jokes.yml +10 -10
  313. data/test/fixtures/interests.yml +33 -33
  314. data/test/fixtures/items.yml +3 -3
  315. data/test/fixtures/jobs.yml +7 -7
  316. data/test/fixtures/legacy_things.yml +3 -3
  317. data/test/fixtures/live_parrots.yml +4 -0
  318. data/test/fixtures/mateys.yml +4 -4
  319. data/test/fixtures/member_details.yml +8 -8
  320. data/test/fixtures/member_types.yml +6 -6
  321. data/test/fixtures/members.yml +11 -11
  322. data/test/fixtures/memberships.yml +34 -34
  323. data/test/fixtures/men.yml +5 -5
  324. data/test/fixtures/minimalistics.yml +2 -2
  325. data/test/fixtures/minivans.yml +5 -5
  326. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  327. data/test/fixtures/mixins.yml +29 -29
  328. data/test/fixtures/movies.yml +7 -7
  329. data/test/fixtures/naked/yml/accounts.yml +1 -1
  330. data/test/fixtures/naked/yml/companies.yml +1 -1
  331. data/test/fixtures/naked/yml/courses.yml +1 -1
  332. data/test/fixtures/naked/yml/parrots.yml +2 -0
  333. data/test/fixtures/naked/yml/trees.yml +3 -0
  334. data/test/fixtures/nodes.yml +29 -0
  335. data/test/fixtures/organizations.yml +5 -5
  336. data/test/fixtures/other_comments.yml +6 -0
  337. data/test/fixtures/other_dogs.yml +2 -0
  338. data/test/fixtures/other_posts.yml +7 -0
  339. data/test/fixtures/other_topics.yml +42 -42
  340. data/test/fixtures/owners.yml +9 -9
  341. data/test/fixtures/parrots.yml +27 -27
  342. data/test/fixtures/parrots_pirates.yml +7 -7
  343. data/test/fixtures/people.yml +24 -24
  344. data/test/fixtures/peoples_treasures.yml +3 -3
  345. data/test/fixtures/pets.yml +19 -19
  346. data/test/fixtures/pirates.yml +15 -12
  347. data/test/fixtures/posts.yml +80 -80
  348. data/test/fixtures/price_estimates.yml +16 -7
  349. data/test/fixtures/products.yml +4 -4
  350. data/test/fixtures/projects.yml +7 -7
  351. data/test/fixtures/ratings.yml +14 -14
  352. data/test/fixtures/readers.yml +11 -11
  353. data/test/fixtures/references.yml +17 -17
  354. data/test/fixtures/reserved_words/distinct.yml +5 -5
  355. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  356. data/test/fixtures/reserved_words/group.yml +14 -14
  357. data/test/fixtures/reserved_words/select.yml +8 -8
  358. data/test/fixtures/reserved_words/values.yml +7 -7
  359. data/test/fixtures/ships.yml +6 -6
  360. data/test/fixtures/speedometers.yml +8 -8
  361. data/test/fixtures/sponsors.yml +12 -12
  362. data/test/fixtures/string_key_objects.yml +7 -7
  363. data/test/fixtures/subscribers.yml +10 -10
  364. data/test/fixtures/subscriptions.yml +12 -12
  365. data/test/fixtures/taggings.yml +78 -78
  366. data/test/fixtures/tags.yml +11 -11
  367. data/test/fixtures/tasks.yml +7 -7
  368. data/test/fixtures/teapots.yml +3 -3
  369. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  370. data/test/fixtures/to_be_linked/users.yml +10 -10
  371. data/test/fixtures/topics.yml +49 -49
  372. data/test/fixtures/toys.yml +14 -14
  373. data/test/fixtures/traffic_lights.yml +9 -9
  374. data/test/fixtures/treasures.yml +10 -10
  375. data/test/fixtures/trees.yml +3 -0
  376. data/test/fixtures/uuid_children.yml +3 -3
  377. data/test/fixtures/uuid_parents.yml +2 -2
  378. data/test/fixtures/variants.yml +4 -4
  379. data/test/fixtures/vegetables.yml +19 -19
  380. data/test/fixtures/vertices.yml +3 -3
  381. data/test/fixtures/warehouse_things.yml +2 -2
  382. data/test/fixtures/zines.yml +5 -5
  383. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  384. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  385. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  386. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -9
  387. data/test/migrations/missing/1_people_have_last_names.rb +9 -9
  388. data/test/migrations/missing/3_we_need_reminders.rb +12 -12
  389. data/test/migrations/missing/4_innocent_jointable.rb +12 -12
  390. data/test/migrations/rename/1_we_need_things.rb +11 -11
  391. data/test/migrations/rename/2_rename_things.rb +9 -9
  392. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  393. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  394. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  395. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  396. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  397. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  398. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  399. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  400. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  401. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  402. data/test/migrations/valid/2_we_need_reminders.rb +12 -12
  403. data/test/migrations/valid/3_innocent_jointable.rb +12 -12
  404. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  405. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -12
  406. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -12
  407. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  408. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  409. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  410. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  411. data/test/models/admin.rb +5 -5
  412. data/test/models/admin/account.rb +3 -3
  413. data/test/models/admin/randomly_named_c1.rb +6 -2
  414. data/test/models/admin/user.rb +40 -40
  415. data/test/models/aircraft.rb +5 -4
  416. data/test/models/arunit2_model.rb +3 -3
  417. data/test/models/author.rb +209 -212
  418. data/test/models/auto_id.rb +4 -4
  419. data/test/models/autoloadable/extra_firm.rb +2 -2
  420. data/test/models/binary.rb +2 -2
  421. data/test/models/bird.rb +12 -12
  422. data/test/models/book.rb +23 -18
  423. data/test/models/boolean.rb +2 -2
  424. data/test/models/bulb.rb +52 -51
  425. data/test/models/cake_designer.rb +3 -3
  426. data/test/models/car.rb +29 -26
  427. data/test/models/carrier.rb +2 -2
  428. data/test/models/cat.rb +10 -0
  429. data/test/models/categorization.rb +19 -19
  430. data/test/models/category.rb +35 -35
  431. data/test/models/chef.rb +8 -7
  432. data/test/models/citation.rb +3 -3
  433. data/test/models/club.rb +25 -23
  434. data/test/models/college.rb +10 -10
  435. data/test/models/column.rb +3 -3
  436. data/test/models/column_name.rb +3 -3
  437. data/test/models/comment.rb +76 -64
  438. data/test/models/company.rb +230 -228
  439. data/test/models/company_in_module.rb +98 -98
  440. data/test/models/computer.rb +3 -3
  441. data/test/models/contact.rb +41 -41
  442. data/test/models/content.rb +40 -0
  443. data/test/models/contract.rb +20 -20
  444. data/test/models/country.rb +7 -7
  445. data/test/models/course.rb +6 -6
  446. data/test/models/customer.rb +83 -77
  447. data/test/models/customer_carrier.rb +14 -14
  448. data/test/models/dashboard.rb +3 -3
  449. data/test/models/default.rb +2 -2
  450. data/test/models/department.rb +4 -4
  451. data/test/models/developer.rb +274 -255
  452. data/test/models/dog.rb +5 -5
  453. data/test/models/dog_lover.rb +5 -5
  454. data/test/models/doubloon.rb +12 -12
  455. data/test/models/drink_designer.rb +3 -3
  456. data/test/models/edge.rb +5 -5
  457. data/test/models/electron.rb +5 -5
  458. data/test/models/engine.rb +4 -4
  459. data/test/models/entrant.rb +3 -3
  460. data/test/models/essay.rb +5 -5
  461. data/test/models/event.rb +3 -3
  462. data/test/models/eye.rb +37 -37
  463. data/test/models/face.rb +9 -9
  464. data/test/models/friendship.rb +6 -6
  465. data/test/models/guid.rb +2 -2
  466. data/test/models/guitar.rb +4 -0
  467. data/test/models/hotel.rb +11 -9
  468. data/test/models/image.rb +3 -3
  469. data/test/models/interest.rb +5 -5
  470. data/test/models/invoice.rb +4 -4
  471. data/test/models/item.rb +7 -7
  472. data/test/models/job.rb +7 -7
  473. data/test/models/joke.rb +7 -7
  474. data/test/models/keyboard.rb +3 -3
  475. data/test/models/legacy_thing.rb +3 -3
  476. data/test/models/lesson.rb +11 -11
  477. data/test/models/line_item.rb +3 -3
  478. data/test/models/liquid.rb +4 -4
  479. data/test/models/man.rb +11 -11
  480. data/test/models/matey.rb +4 -4
  481. data/test/models/member.rb +42 -41
  482. data/test/models/member_detail.rb +8 -7
  483. data/test/models/member_type.rb +3 -3
  484. data/test/models/membership.rb +35 -35
  485. data/test/models/mentor.rb +3 -0
  486. data/test/models/minimalistic.rb +2 -2
  487. data/test/models/minivan.rb +9 -9
  488. data/test/models/mixed_case_monkey.rb +3 -3
  489. data/test/models/mocktail_designer.rb +2 -0
  490. data/test/models/molecule.rb +6 -6
  491. data/test/models/movie.rb +5 -5
  492. data/test/models/node.rb +5 -0
  493. data/test/models/non_primary_key.rb +2 -0
  494. data/test/models/notification.rb +3 -0
  495. data/test/models/order.rb +4 -4
  496. data/test/models/organization.rb +14 -14
  497. data/test/models/other_dog.rb +5 -0
  498. data/test/models/owner.rb +37 -34
  499. data/test/models/parrot.rb +28 -29
  500. data/test/models/person.rb +142 -143
  501. data/test/models/personal_legacy_thing.rb +4 -4
  502. data/test/models/pet.rb +18 -15
  503. data/test/models/pet_treasure.rb +6 -0
  504. data/test/models/pirate.rb +92 -92
  505. data/test/models/possession.rb +3 -3
  506. data/test/models/post.rb +273 -264
  507. data/test/models/price_estimate.rb +4 -4
  508. data/test/models/professor.rb +5 -5
  509. data/test/models/project.rb +40 -31
  510. data/test/models/publisher.rb +2 -2
  511. data/test/models/publisher/article.rb +4 -4
  512. data/test/models/publisher/magazine.rb +3 -3
  513. data/test/models/randomly_named_c1.rb +1 -1
  514. data/test/models/rating.rb +4 -4
  515. data/test/models/reader.rb +23 -23
  516. data/test/models/recipe.rb +3 -0
  517. data/test/models/record.rb +2 -2
  518. data/test/models/reference.rb +22 -22
  519. data/test/models/reply.rb +61 -61
  520. data/test/models/ship.rb +39 -33
  521. data/test/models/ship_part.rb +8 -8
  522. data/test/models/shop.rb +17 -17
  523. data/test/models/shop_account.rb +6 -6
  524. data/test/models/speedometer.rb +6 -6
  525. data/test/models/sponsor.rb +7 -7
  526. data/test/models/string_key_object.rb +3 -3
  527. data/test/models/student.rb +4 -4
  528. data/test/models/subject.rb +16 -16
  529. data/test/models/subscriber.rb +8 -8
  530. data/test/models/subscription.rb +4 -4
  531. data/test/models/tag.rb +13 -7
  532. data/test/models/tagging.rb +13 -13
  533. data/test/models/task.rb +5 -5
  534. data/test/models/topic.rb +118 -124
  535. data/test/models/toy.rb +6 -6
  536. data/test/models/traffic_light.rb +4 -4
  537. data/test/models/treasure.rb +14 -14
  538. data/test/models/treaty.rb +7 -7
  539. data/test/models/tree.rb +3 -0
  540. data/test/models/tuning_peg.rb +4 -0
  541. data/test/models/tyre.rb +11 -11
  542. data/test/models/user.rb +14 -0
  543. data/test/models/uuid_child.rb +3 -3
  544. data/test/models/uuid_item.rb +6 -0
  545. data/test/models/uuid_parent.rb +3 -3
  546. data/test/models/vegetables.rb +24 -24
  547. data/test/models/vehicle.rb +6 -6
  548. data/test/models/vertex.rb +9 -9
  549. data/test/models/warehouse_thing.rb +5 -5
  550. data/test/models/wheel.rb +3 -3
  551. data/test/models/without_table.rb +3 -3
  552. data/test/models/zine.rb +3 -3
  553. data/test/schema/mysql2_specific_schema.rb +68 -58
  554. data/test/schema/oracle_specific_schema.rb +40 -43
  555. data/test/schema/postgresql_specific_schema.rb +114 -202
  556. data/test/schema/schema.rb +1057 -952
  557. data/test/schema/schema.rb.original +1057 -0
  558. data/test/schema/sqlite_specific_schema.rb +18 -22
  559. data/test/support/config.rb +43 -43
  560. data/test/support/connection.rb +23 -22
  561. data/test/support/connection_helper.rb +14 -14
  562. data/test/support/ddl_helper.rb +8 -8
  563. data/test/support/schema_dumping_helper.rb +20 -20
  564. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  565. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  566. metadata +129 -28
  567. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  568. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  569. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  570. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  571. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  572. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  573. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  574. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  575. data/test/cases/migration/table_and_index_test.rb +0 -24
  576. data/test/cases/relation/where_test2.rb +0 -36
  577. data/test/cases/type/decimal_test.rb +0 -56
  578. data/test/cases/type/unsigned_integer_test.rb +0 -18
  579. data/test/cases/xml_serialization_test.rb +0 -457
  580. data/test/connections/native_ibm_db/connection.rb +0 -44
  581. data/test/fixtures/naked/csv/accounts.csv +0 -1
  582. data/test/schema/i5/ibm_db_specific_schema.rb +0 -137
  583. data/test/schema/ids/ibm_db_specific_schema.rb +0 -140
  584. data/test/schema/luw/ibm_db_specific_schema.rb +0 -137
  585. data/test/schema/mysql_specific_schema.rb +0 -70
  586. data/test/schema/zOS/ibm_db_specific_schema.rb +0 -208
@@ -0,0 +1,25 @@
1
+ require "cases/helper"
2
+ require "active_support/core_ext/numeric/bytes"
3
+
4
+ class PostgresqlIntegerTest < ActiveRecord::PostgreSQLTestCase
5
+ class PgInteger < ActiveRecord::Base
6
+ end
7
+
8
+ def setup
9
+ @connection = ActiveRecord::Base.connection
10
+
11
+ @connection.transaction do
12
+ @connection.create_table "pg_integers", force: true do |t|
13
+ t.integer :quota, limit: 8, default: 2.gigabytes
14
+ end
15
+ end
16
+ end
17
+
18
+ teardown do
19
+ @connection.drop_table "pg_integers", if_exists: true
20
+ end
21
+
22
+ test "schema properly respects bigint ranges" do
23
+ assert_equal 2.gigabytes, PgInteger.new.quota
24
+ end
25
+ end
@@ -0,0 +1,237 @@
1
+ require "cases/helper"
2
+ require 'support/schema_dumping_helper'
3
+
4
+ module PostgresqlJSONSharedTestCases
5
+ include SchemaDumpingHelper
6
+
7
+ class JsonDataType < ActiveRecord::Base
8
+ self.table_name = 'json_data_type'
9
+
10
+ store_accessor :settings, :resolution
11
+ end
12
+
13
+ def setup
14
+ @connection = ActiveRecord::Base.connection
15
+ begin
16
+ @connection.create_table('json_data_type') do |t|
17
+ t.public_send column_type, 'payload', default: {} # t.json 'payload', default: {}
18
+ t.public_send column_type, 'settings' # t.json 'settings'
19
+ t.public_send column_type, 'objects', array: true # t.json 'objects', array: true
20
+ end
21
+ rescue ActiveRecord::StatementInvalid
22
+ skip "do not test on PostgreSQL without #{column_type} type."
23
+ end
24
+ end
25
+
26
+ def teardown
27
+ @connection.drop_table :json_data_type, if_exists: true
28
+ JsonDataType.reset_column_information
29
+ end
30
+
31
+ def test_column
32
+ column = JsonDataType.columns_hash["payload"]
33
+ assert_equal column_type, column.type
34
+ assert_equal column_type.to_s, column.sql_type
35
+ assert_not column.array?
36
+
37
+ type = JsonDataType.type_for_attribute("payload")
38
+ assert_not type.binary?
39
+ end
40
+
41
+ def test_default
42
+ @connection.add_column 'json_data_type', 'permissions', column_type, default: {"users": "read", "posts": ["read", "write"]}
43
+ JsonDataType.reset_column_information
44
+
45
+ assert_equal({"users"=>"read", "posts"=>["read", "write"]}, JsonDataType.column_defaults['permissions'])
46
+ assert_equal({"users"=>"read", "posts"=>["read", "write"]}, JsonDataType.new.permissions)
47
+ ensure
48
+ JsonDataType.reset_column_information
49
+ end
50
+
51
+ def test_change_table_supports_json
52
+ @connection.transaction do
53
+ @connection.change_table('json_data_type') do |t|
54
+ t.public_send column_type, 'users', default: '{}' # t.json 'users', default: '{}'
55
+ end
56
+ JsonDataType.reset_column_information
57
+ column = JsonDataType.columns_hash['users']
58
+ assert_equal column_type, column.type
59
+
60
+ raise ActiveRecord::Rollback # reset the schema change
61
+ end
62
+ ensure
63
+ JsonDataType.reset_column_information
64
+ end
65
+
66
+ def test_schema_dumping
67
+ output = dump_table_schema("json_data_type")
68
+ assert_match(/t\.#{column_type.to_s}\s+"payload",\s+default: {}/, output)
69
+ end
70
+
71
+ def test_cast_value_on_write
72
+ x = JsonDataType.new payload: {"string" => "foo", :symbol => :bar}
73
+ assert_equal({"string" => "foo", :symbol => :bar}, x.payload_before_type_cast)
74
+ assert_equal({"string" => "foo", "symbol" => "bar"}, x.payload)
75
+ x.save
76
+ assert_equal({"string" => "foo", "symbol" => "bar"}, x.reload.payload)
77
+ end
78
+
79
+ def test_deserialize_with_array
80
+ x = JsonDataType.new(objects: ["foo" => "bar"])
81
+ assert_equal ["foo" => "bar"], x.objects
82
+ x.save!
83
+ assert_equal ["foo" => "bar"], x.objects
84
+ x.reload
85
+ assert_equal ["foo" => "bar"], x.objects
86
+ end
87
+
88
+ def test_type_cast_json
89
+ type = JsonDataType.type_for_attribute("payload")
90
+
91
+ data = "{\"a_key\":\"a_value\"}"
92
+ hash = type.deserialize(data)
93
+ assert_equal({'a_key' => 'a_value'}, hash)
94
+ assert_equal({'a_key' => 'a_value'}, type.deserialize(data))
95
+
96
+ assert_equal({}, type.deserialize("{}"))
97
+ assert_equal({'key'=>nil}, type.deserialize('{"key": null}'))
98
+ assert_equal({'c'=>'}','"a"'=>'b "a b'}, type.deserialize(%q({"c":"}", "\"a\"":"b \"a b"})))
99
+ end
100
+
101
+ def test_rewrite
102
+ @connection.execute "insert into json_data_type (payload) VALUES ('{\"k\":\"v\"}')"
103
+ x = JsonDataType.first
104
+ x.payload = { '"a\'' => 'b' }
105
+ assert x.save!
106
+ end
107
+
108
+ def test_select
109
+ @connection.execute "insert into json_data_type (payload) VALUES ('{\"k\":\"v\"}')"
110
+ x = JsonDataType.first
111
+ assert_equal({'k' => 'v'}, x.payload)
112
+ end
113
+
114
+ def test_select_multikey
115
+ @connection.execute %q|insert into json_data_type (payload) VALUES ('{"k1":"v1", "k2":"v2", "k3":[1,2,3]}')|
116
+ x = JsonDataType.first
117
+ assert_equal({'k1' => 'v1', 'k2' => 'v2', 'k3' => [1,2,3]}, x.payload)
118
+ end
119
+
120
+ def test_null_json
121
+ @connection.execute %q|insert into json_data_type (payload) VALUES(null)|
122
+ x = JsonDataType.first
123
+ assert_equal(nil, x.payload)
124
+ end
125
+
126
+ def test_select_nil_json_after_create
127
+ json = JsonDataType.create(payload: nil)
128
+ x = JsonDataType.where(payload:nil).first
129
+ assert_equal(json, x)
130
+ end
131
+
132
+ def test_select_nil_json_after_update
133
+ json = JsonDataType.create(payload: "foo")
134
+ x = JsonDataType.where(payload:nil).first
135
+ assert_equal(nil, x)
136
+
137
+ json.update_attributes payload: nil
138
+ x = JsonDataType.where(payload:nil).first
139
+ assert_equal(json.reload, x)
140
+ end
141
+
142
+ def test_select_array_json_value
143
+ @connection.execute %q|insert into json_data_type (payload) VALUES ('["v0",{"k1":"v1"}]')|
144
+ x = JsonDataType.first
145
+ assert_equal(['v0', {'k1' => 'v1'}], x.payload)
146
+ end
147
+
148
+ def test_rewrite_array_json_value
149
+ @connection.execute %q|insert into json_data_type (payload) VALUES ('["v0",{"k1":"v1"}]')|
150
+ x = JsonDataType.first
151
+ x.payload = ['v1', {'k2' => 'v2'}, 'v3']
152
+ assert x.save!
153
+ end
154
+
155
+ def test_with_store_accessors
156
+ x = JsonDataType.new(resolution: "320×480")
157
+ assert_equal "320×480", x.resolution
158
+
159
+ x.save!
160
+ x = JsonDataType.first
161
+ assert_equal "320×480", x.resolution
162
+
163
+ x.resolution = "640×1136"
164
+ x.save!
165
+
166
+ x = JsonDataType.first
167
+ assert_equal "640×1136", x.resolution
168
+ end
169
+
170
+ def test_duplication_with_store_accessors
171
+ x = JsonDataType.new(resolution: "320×480")
172
+ assert_equal "320×480", x.resolution
173
+
174
+ y = x.dup
175
+ assert_equal "320×480", y.resolution
176
+ end
177
+
178
+ def test_yaml_round_trip_with_store_accessors
179
+ x = JsonDataType.new(resolution: "320×480")
180
+ assert_equal "320×480", x.resolution
181
+
182
+ y = YAML.load(YAML.dump(x))
183
+ assert_equal "320×480", y.resolution
184
+ end
185
+
186
+ def test_changes_in_place
187
+ json = JsonDataType.new
188
+ assert_not json.changed?
189
+
190
+ json.payload = { 'one' => 'two' }
191
+ assert json.changed?
192
+ assert json.payload_changed?
193
+
194
+ json.save!
195
+ assert_not json.changed?
196
+
197
+ json.payload['three'] = 'four'
198
+ assert json.payload_changed?
199
+
200
+ json.save!
201
+ json.reload
202
+
203
+ assert_equal({ 'one' => 'two', 'three' => 'four' }, json.payload)
204
+ assert_not json.changed?
205
+ end
206
+
207
+ def test_assigning_string_literal
208
+ json = JsonDataType.create(payload: "foo")
209
+ assert_equal "foo", json.payload
210
+ end
211
+
212
+ def test_assigning_number
213
+ json = JsonDataType.create(payload: 1.234)
214
+ assert_equal 1.234, json.payload
215
+ end
216
+
217
+ def test_assigning_boolean
218
+ json = JsonDataType.create(payload: true)
219
+ assert_equal true, json.payload
220
+ end
221
+ end
222
+
223
+ class PostgresqlJSONTest < ActiveRecord::PostgreSQLTestCase
224
+ include PostgresqlJSONSharedTestCases
225
+
226
+ def column_type
227
+ :json
228
+ end
229
+ end
230
+
231
+ class PostgresqlJSONBTest < ActiveRecord::PostgreSQLTestCase
232
+ include PostgresqlJSONSharedTestCases
233
+
234
+ def column_type
235
+ :jsonb
236
+ end
237
+ end
@@ -0,0 +1,53 @@
1
+ require "cases/helper"
2
+ require 'support/schema_dumping_helper'
3
+
4
+ class PostgresqlLtreeTest < ActiveRecord::PostgreSQLTestCase
5
+ include SchemaDumpingHelper
6
+ class Ltree < ActiveRecord::Base
7
+ self.table_name = 'ltrees'
8
+ end
9
+
10
+ def setup
11
+ @connection = ActiveRecord::Base.connection
12
+
13
+ enable_extension!('ltree', @connection)
14
+
15
+ @connection.transaction do
16
+ @connection.create_table('ltrees') do |t|
17
+ t.ltree 'path'
18
+ end
19
+ end
20
+ rescue ActiveRecord::StatementInvalid
21
+ skip "do not test on PG without ltree"
22
+ end
23
+
24
+ teardown do
25
+ @connection.drop_table 'ltrees', if_exists: true
26
+ end
27
+
28
+ def test_column
29
+ column = Ltree.columns_hash['path']
30
+ assert_equal :ltree, column.type
31
+ assert_equal "ltree", column.sql_type
32
+ assert_not column.array?
33
+
34
+ type = Ltree.type_for_attribute('path')
35
+ assert_not type.binary?
36
+ end
37
+
38
+ def test_write
39
+ ltree = Ltree.new(path: '1.2.3.4')
40
+ assert ltree.save!
41
+ end
42
+
43
+ def test_select
44
+ @connection.execute "insert into ltrees (path) VALUES ('1.2.3')"
45
+ ltree = Ltree.first
46
+ assert_equal '1.2.3', ltree.path
47
+ end
48
+
49
+ def test_schema_dump_with_shorthand
50
+ output = dump_table_schema("ltrees")
51
+ assert_match %r[t\.ltree "path"], output
52
+ end
53
+ end
@@ -0,0 +1,96 @@
1
+ require "cases/helper"
2
+ require 'support/schema_dumping_helper'
3
+
4
+ class PostgresqlMoneyTest < ActiveRecord::PostgreSQLTestCase
5
+ include SchemaDumpingHelper
6
+
7
+ class PostgresqlMoney < ActiveRecord::Base; end
8
+
9
+ setup do
10
+ @connection = ActiveRecord::Base.connection
11
+ @connection.execute("set lc_monetary = 'C'")
12
+ @connection.create_table('postgresql_moneys', force: true) do |t|
13
+ t.money "wealth"
14
+ t.money "depth", default: "150.55"
15
+ end
16
+ end
17
+
18
+ teardown do
19
+ @connection.drop_table 'postgresql_moneys', if_exists: true
20
+ end
21
+
22
+ def test_column
23
+ column = PostgresqlMoney.columns_hash["wealth"]
24
+ assert_equal :money, column.type
25
+ assert_equal "money", column.sql_type
26
+ assert_equal 2, column.scale
27
+ assert_not column.array?
28
+
29
+ type = PostgresqlMoney.type_for_attribute("wealth")
30
+ assert_not type.binary?
31
+ end
32
+
33
+ def test_default
34
+ assert_equal BigDecimal.new("150.55"), PostgresqlMoney.column_defaults['depth']
35
+ assert_equal BigDecimal.new("150.55"), PostgresqlMoney.new.depth
36
+ end
37
+
38
+ def test_money_values
39
+ @connection.execute("INSERT INTO postgresql_moneys (id, wealth) VALUES (1, '567.89'::money)")
40
+ @connection.execute("INSERT INTO postgresql_moneys (id, wealth) VALUES (2, '-567.89'::money)")
41
+
42
+ first_money = PostgresqlMoney.find(1)
43
+ second_money = PostgresqlMoney.find(2)
44
+ assert_equal 567.89, first_money.wealth
45
+ assert_equal(-567.89, second_money.wealth)
46
+ end
47
+
48
+ def test_money_type_cast
49
+ type = PostgresqlMoney.type_for_attribute('wealth')
50
+ assert_equal(12345678.12, type.cast("$12,345,678.12"))
51
+ assert_equal(12345678.12, type.cast("$12.345.678,12"))
52
+ assert_equal(-1.15, type.cast("-$1.15"))
53
+ assert_equal(-2.25, type.cast("($2.25)"))
54
+ end
55
+
56
+ def test_schema_dumping
57
+ output = dump_table_schema("postgresql_moneys")
58
+ assert_match %r{t\.money\s+"wealth",\s+scale: 2$}, output
59
+ assert_match %r{t\.money\s+"depth",\s+scale: 2,\s+default: "150\.55"$}, output
60
+ end
61
+
62
+ def test_create_and_update_money
63
+ money = PostgresqlMoney.create(wealth: "987.65")
64
+ assert_equal 987.65, money.wealth
65
+
66
+ new_value = BigDecimal.new('123.45')
67
+ money.wealth = new_value
68
+ money.save!
69
+ money.reload
70
+ assert_equal new_value, money.wealth
71
+ end
72
+
73
+ def test_update_all_with_money_string
74
+ money = PostgresqlMoney.create!
75
+ PostgresqlMoney.update_all(wealth: "987.65")
76
+ money.reload
77
+
78
+ assert_equal 987.65, money.wealth
79
+ end
80
+
81
+ def test_update_all_with_money_big_decimal
82
+ money = PostgresqlMoney.create!
83
+ PostgresqlMoney.update_all(wealth: '123.45'.to_d)
84
+ money.reload
85
+
86
+ assert_equal 123.45, money.wealth
87
+ end
88
+
89
+ def test_update_all_with_money_numeric
90
+ money = PostgresqlMoney.create!
91
+ PostgresqlMoney.update_all(wealth: 123.45)
92
+ money.reload
93
+
94
+ assert_equal 123.45, money.wealth
95
+ end
96
+ end
@@ -0,0 +1,94 @@
1
+ require "cases/helper"
2
+ require 'support/schema_dumping_helper'
3
+
4
+ class PostgresqlNetworkTest < ActiveRecord::PostgreSQLTestCase
5
+ include SchemaDumpingHelper
6
+ class PostgresqlNetworkAddress < ActiveRecord::Base; end
7
+
8
+ setup do
9
+ @connection = ActiveRecord::Base.connection
10
+ @connection.create_table('postgresql_network_addresses', force: true) do |t|
11
+ t.inet 'inet_address', default: "192.168.1.1"
12
+ t.cidr 'cidr_address', default: "192.168.1.0/24"
13
+ t.macaddr 'mac_address', default: "ff:ff:ff:ff:ff:ff"
14
+ end
15
+ end
16
+
17
+ teardown do
18
+ @connection.drop_table 'postgresql_network_addresses', if_exists: true
19
+ end
20
+
21
+ def test_cidr_column
22
+ column = PostgresqlNetworkAddress.columns_hash["cidr_address"]
23
+ assert_equal :cidr, column.type
24
+ assert_equal "cidr", column.sql_type
25
+ assert_not column.array?
26
+
27
+ type = PostgresqlNetworkAddress.type_for_attribute("cidr_address")
28
+ assert_not type.binary?
29
+ end
30
+
31
+ def test_inet_column
32
+ column = PostgresqlNetworkAddress.columns_hash["inet_address"]
33
+ assert_equal :inet, column.type
34
+ assert_equal "inet", column.sql_type
35
+ assert_not column.array?
36
+
37
+ type = PostgresqlNetworkAddress.type_for_attribute("inet_address")
38
+ assert_not type.binary?
39
+ end
40
+
41
+ def test_macaddr_column
42
+ column = PostgresqlNetworkAddress.columns_hash["mac_address"]
43
+ assert_equal :macaddr, column.type
44
+ assert_equal "macaddr", column.sql_type
45
+ assert_not column.array?
46
+
47
+ type = PostgresqlNetworkAddress.type_for_attribute("mac_address")
48
+ assert_not type.binary?
49
+ end
50
+
51
+ def test_network_types
52
+ PostgresqlNetworkAddress.create(cidr_address: '192.168.0.0/24',
53
+ inet_address: '172.16.1.254/32',
54
+ mac_address: '01:23:45:67:89:0a')
55
+
56
+ address = PostgresqlNetworkAddress.first
57
+ assert_equal IPAddr.new('192.168.0.0/24'), address.cidr_address
58
+ assert_equal IPAddr.new('172.16.1.254'), address.inet_address
59
+ assert_equal '01:23:45:67:89:0a', address.mac_address
60
+
61
+ address.cidr_address = '10.1.2.3/32'
62
+ address.inet_address = '10.0.0.0/8'
63
+ address.mac_address = 'bc:de:f0:12:34:56'
64
+
65
+ address.save!
66
+ assert address.reload
67
+ assert_equal IPAddr.new('10.1.2.3/32'), address.cidr_address
68
+ assert_equal IPAddr.new('10.0.0.0/8'), address.inet_address
69
+ assert_equal 'bc:de:f0:12:34:56', address.mac_address
70
+ end
71
+
72
+ def test_invalid_network_address
73
+ invalid_address = PostgresqlNetworkAddress.new(cidr_address: 'invalid addr',
74
+ inet_address: 'invalid addr')
75
+ assert_nil invalid_address.cidr_address
76
+ assert_nil invalid_address.inet_address
77
+ assert_equal 'invalid addr', invalid_address.cidr_address_before_type_cast
78
+ assert_equal 'invalid addr', invalid_address.inet_address_before_type_cast
79
+ assert invalid_address.save
80
+
81
+ invalid_address.reload
82
+ assert_nil invalid_address.cidr_address
83
+ assert_nil invalid_address.inet_address
84
+ assert_nil invalid_address.cidr_address_before_type_cast
85
+ assert_nil invalid_address.inet_address_before_type_cast
86
+ end
87
+
88
+ def test_schema_dump_with_shorthand
89
+ output = dump_table_schema("postgresql_network_addresses")
90
+ assert_match %r{t\.inet\s+"inet_address",\s+default: "192\.168\.1\.1"}, output
91
+ assert_match %r{t\.cidr\s+"cidr_address",\s+default: "192\.168\.1\.0/24"}, output
92
+ assert_match %r{t\.macaddr\s+"mac_address",\s+default: "ff:ff:ff:ff:ff:ff"}, output
93
+ end
94
+ end