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,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