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,133 @@
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ class AdapterSpecificRegistryTest < ActiveRecord::TestCase
5
+ test "a class can be registered for a symbol" do
6
+ registry = Type::AdapterSpecificRegistry.new
7
+ registry.register(:foo, ::String)
8
+ registry.register(:bar, ::Array)
9
+
10
+ assert_equal "", registry.lookup(:foo)
11
+ assert_equal [], registry.lookup(:bar)
12
+ end
13
+
14
+ test "a block can be registered" do
15
+ registry = Type::AdapterSpecificRegistry.new
16
+ registry.register(:foo) do |*args|
17
+ [*args, "block for foo"]
18
+ end
19
+ registry.register(:bar) do |*args|
20
+ [*args, "block for bar"]
21
+ end
22
+
23
+ assert_equal [:foo, 1, "block for foo"], registry.lookup(:foo, 1)
24
+ assert_equal [:foo, 2, "block for foo"], registry.lookup(:foo, 2)
25
+ assert_equal [:bar, 1, 2, 3, "block for bar"], registry.lookup(:bar, 1, 2, 3)
26
+ end
27
+
28
+ test "filtering by adapter" do
29
+ registry = Type::AdapterSpecificRegistry.new
30
+ registry.register(:foo, String, adapter: :sqlite3)
31
+ registry.register(:foo, Array, adapter: :postgresql)
32
+
33
+ assert_equal "", registry.lookup(:foo, adapter: :sqlite3)
34
+ assert_equal [], registry.lookup(:foo, adapter: :postgresql)
35
+ end
36
+
37
+ test "an error is raised if both a generic and adapter specific type match" do
38
+ registry = Type::AdapterSpecificRegistry.new
39
+ registry.register(:foo, String)
40
+ registry.register(:foo, Array, adapter: :postgresql)
41
+
42
+ assert_raises TypeConflictError do
43
+ registry.lookup(:foo, adapter: :postgresql)
44
+ end
45
+ assert_equal "", registry.lookup(:foo, adapter: :sqlite3)
46
+ end
47
+
48
+ test "a generic type can explicitly override an adapter specific type" do
49
+ registry = Type::AdapterSpecificRegistry.new
50
+ registry.register(:foo, String, override: true)
51
+ registry.register(:foo, Array, adapter: :postgresql)
52
+
53
+ assert_equal "", registry.lookup(:foo, adapter: :postgresql)
54
+ assert_equal "", registry.lookup(:foo, adapter: :sqlite3)
55
+ end
56
+
57
+ test "a generic type can explicitly allow an adapter type to be used instead" do
58
+ registry = Type::AdapterSpecificRegistry.new
59
+ registry.register(:foo, String, override: false)
60
+ registry.register(:foo, Array, adapter: :postgresql)
61
+
62
+ assert_equal [], registry.lookup(:foo, adapter: :postgresql)
63
+ assert_equal "", registry.lookup(:foo, adapter: :sqlite3)
64
+ end
65
+
66
+ test "a reasonable error is given when no type is found" do
67
+ registry = Type::AdapterSpecificRegistry.new
68
+
69
+ e = assert_raises(ArgumentError) do
70
+ registry.lookup(:foo)
71
+ end
72
+
73
+ assert_equal "Unknown type :foo", e.message
74
+ end
75
+
76
+ test "construct args are passed to the type" do
77
+ type = Struct.new(:args)
78
+ registry = Type::AdapterSpecificRegistry.new
79
+ registry.register(:foo, type)
80
+
81
+ assert_equal type.new, registry.lookup(:foo)
82
+ assert_equal type.new(:ordered_arg), registry.lookup(:foo, :ordered_arg)
83
+ assert_equal type.new(keyword: :arg), registry.lookup(:foo, keyword: :arg)
84
+ assert_equal type.new(keyword: :arg), registry.lookup(:foo, keyword: :arg, adapter: :postgresql)
85
+ end
86
+
87
+ test "registering a modifier" do
88
+ decoration = Struct.new(:value)
89
+ registry = Type::AdapterSpecificRegistry.new
90
+ registry.register(:foo, String)
91
+ registry.register(:bar, Hash)
92
+ registry.add_modifier({ array: true }, decoration)
93
+
94
+ assert_equal decoration.new(""), registry.lookup(:foo, array: true)
95
+ assert_equal decoration.new({}), registry.lookup(:bar, array: true)
96
+ assert_equal "", registry.lookup(:foo)
97
+ end
98
+
99
+ test "registering multiple modifiers" do
100
+ decoration = Struct.new(:value)
101
+ other_decoration = Struct.new(:value)
102
+ registry = Type::AdapterSpecificRegistry.new
103
+ registry.register(:foo, String)
104
+ registry.add_modifier({ array: true }, decoration)
105
+ registry.add_modifier({ range: true }, other_decoration)
106
+
107
+ assert_equal "", registry.lookup(:foo)
108
+ assert_equal decoration.new(""), registry.lookup(:foo, array: true)
109
+ assert_equal other_decoration.new(""), registry.lookup(:foo, range: true)
110
+ assert_equal(
111
+ decoration.new(other_decoration.new("")),
112
+ registry.lookup(:foo, array: true, range: true)
113
+ )
114
+ end
115
+
116
+ test "registering adapter specific modifiers" do
117
+ decoration = Struct.new(:value)
118
+ type = Struct.new(:args)
119
+ registry = Type::AdapterSpecificRegistry.new
120
+ registry.register(:foo, type)
121
+ registry.add_modifier({ array: true }, decoration, adapter: :postgresql)
122
+
123
+ assert_equal(
124
+ decoration.new(type.new(keyword: :arg)),
125
+ registry.lookup(:foo, array: true, adapter: :postgresql, keyword: :arg)
126
+ )
127
+ assert_equal(
128
+ type.new(array: true),
129
+ registry.lookup(:foo, array: true, adapter: :sqlite3)
130
+ )
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,14 @@
1
+ require "cases/helper"
2
+ require "models/task"
3
+
4
+ module ActiveRecord
5
+ module Type
6
+ class IntegerTest < ActiveRecord::TestCase
7
+ def test_datetime_seconds_precision_applied_to_timestamp
8
+ skip "This test is invalid if subsecond precision isn't supported" unless subsecond_precision_supported?
9
+ p = Task.create!(starting: ::Time.now)
10
+ assert_equal p.starting.usec, p.reload.starting.usec
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,121 +1,27 @@
1
- require "cases/helper"
2
- require "models/company"
3
-
4
- module ActiveRecord
5
- module Type
6
- class IntegerTest < ActiveRecord::TestCase
7
- test "simple values" do
8
- type = Type::Integer.new
9
- assert_equal 1, type.type_cast_from_user(1)
10
- assert_equal 1, type.type_cast_from_user('1')
11
- assert_equal 1, type.type_cast_from_user('1ignore')
12
- assert_equal 0, type.type_cast_from_user('bad1')
13
- assert_equal 0, type.type_cast_from_user('bad')
14
- assert_equal 1, type.type_cast_from_user(1.7)
15
- assert_equal 0, type.type_cast_from_user(false)
16
- assert_equal 1, type.type_cast_from_user(true)
17
- assert_nil type.type_cast_from_user(nil)
18
- end
19
-
20
- test "random objects cast to nil" do
21
- type = Type::Integer.new
22
- assert_nil type.type_cast_from_user([1,2])
23
- assert_nil type.type_cast_from_user({1 => 2})
24
- assert_nil type.type_cast_from_user((1..2))
25
- end
26
-
27
- test "casting ActiveRecord models" do
28
- type = Type::Integer.new
29
- firm = Firm.create(:name => 'Apple')
30
- assert_nil type.type_cast_from_user(firm)
31
- end
32
-
33
- test "casting objects without to_i" do
34
- type = Type::Integer.new
35
- assert_nil type.type_cast_from_user(::Object.new)
36
- end
37
-
38
- test "casting nan and infinity" do
39
- type = Type::Integer.new
40
- assert_nil type.type_cast_from_user(::Float::NAN)
41
- assert_nil type.type_cast_from_user(1.0/0.0)
42
- end
43
-
44
- test "changed?" do
45
- type = Type::Integer.new
46
-
47
- assert type.changed?(5, 5, '5wibble')
48
- assert_not type.changed?(5, 5, '5')
49
- assert_not type.changed?(5, 5, '5.0')
50
- assert_not type.changed?(-5, -5, '-5')
51
- assert_not type.changed?(-5, -5, '-5.0')
52
- assert_not type.changed?(nil, nil, nil)
53
- end
54
-
55
- test "values below int min value are out of range" do
56
- assert_raises(::RangeError) do
57
- Integer.new.type_cast_for_database(-2147483649)
58
- end
59
- end
60
-
61
- test "values above int max value are out of range" do
62
- assert_raises(::RangeError) do
63
- Integer.new.type_cast_for_database(2147483648)
64
- end
65
- end
66
-
67
- test "very small numbers are out of range" do
68
- assert_raises(::RangeError) do
69
- Integer.new.type_cast_for_database(-9999999999999999999999999999999)
70
- end
71
- end
72
-
73
- test "very large numbers are out of range" do
74
- assert_raises(::RangeError) do
75
- Integer.new.type_cast_for_database(9999999999999999999999999999999)
76
- end
77
- end
78
-
79
- test "normal numbers are in range" do
80
- type = Integer.new
81
- assert_equal(0, type.type_cast_for_database(0))
82
- assert_equal(-1, type.type_cast_for_database(-1))
83
- assert_equal(1, type.type_cast_for_database(1))
84
- end
85
-
86
- test "int max value is in range" do
87
- assert_equal(2147483647, Integer.new.type_cast_for_database(2147483647))
88
- end
89
-
90
- test "int min value is in range" do
91
- assert_equal(-2147483648, Integer.new.type_cast_for_database(-2147483648))
92
- end
93
-
94
- test "columns with a larger limit have larger ranges" do
95
- type = Integer.new(limit: 8)
96
-
97
- assert_equal(9223372036854775807, type.type_cast_for_database(9223372036854775807))
98
- assert_equal(-9223372036854775808, type.type_cast_for_database(-9223372036854775808))
99
- assert_raises(::RangeError) do
100
- type.type_cast_for_database(-9999999999999999999999999999999)
101
- end
102
- assert_raises(::RangeError) do
103
- type.type_cast_for_database(9999999999999999999999999999999)
104
- end
105
- end
106
-
107
- test "values which are out of range can be re-assigned" do
108
- klass = Class.new(ActiveRecord::Base) do
109
- self.table_name = 'posts'
110
- attribute :foo, Type::Integer.new
111
- end
112
- model = klass.new
113
-
114
- model.foo = 2147483648
115
- model.foo = 1
116
-
117
- assert_equal 1, model.foo
118
- end
119
- end
120
- end
121
- end
1
+ require "cases/helper"
2
+ require "models/company"
3
+
4
+ module ActiveRecord
5
+ module Type
6
+ class IntegerTest < ActiveRecord::TestCase
7
+ test "casting ActiveRecord models" do
8
+ type = Type::Integer.new
9
+ firm = Firm.create(:name => 'Apple')
10
+ assert_nil type.cast(firm)
11
+ end
12
+
13
+ test "values which are out of range can be re-assigned" do
14
+ klass = Class.new(ActiveRecord::Base) do
15
+ self.table_name = 'posts'
16
+ attribute :foo, :integer
17
+ end
18
+ model = klass.new
19
+
20
+ model.foo = 2147483648
21
+ model.foo = 1
22
+
23
+ assert_equal 1, model.foo
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,36 +1,22 @@
1
- require 'cases/helper'
2
-
3
- module ActiveRecord
4
- class StringTypeTest < ActiveRecord::TestCase
5
- test "type casting" do
6
- type = Type::String.new
7
- assert_equal "t", type.type_cast_from_user(true)
8
- assert_equal "f", type.type_cast_from_user(false)
9
- assert_equal "123", type.type_cast_from_user(123)
10
- end
11
-
12
- test "values are duped coming out" do
13
- s = "foo"
14
- type = Type::String.new
15
- assert_not_same s, type.type_cast_from_user(s)
16
- assert_not_same s, type.type_cast_from_database(s)
17
- end
18
-
19
- test "string mutations are detected" do
20
- klass = Class.new(Base)
21
- klass.table_name = 'authors'
22
-
23
- author = klass.create!(name: 'Sean')
24
- assert_not author.changed?
25
-
26
- author.name << ' Griffin'
27
- assert author.name_changed?
28
-
29
- author.save!
30
- author.reload
31
-
32
- assert_equal 'Sean Griffin', author.name
33
- assert_not author.changed?
34
- end
35
- end
36
- end
1
+ require 'cases/helper'
2
+
3
+ module ActiveRecord
4
+ class StringTypeTest < ActiveRecord::TestCase
5
+ test "string mutations are detected" do
6
+ klass = Class.new(Base)
7
+ klass.table_name = 'authors'
8
+
9
+ author = klass.create!(name: 'Sean')
10
+ assert_not author.changed?
11
+
12
+ author.name << ' Griffin'
13
+ assert author.name_changed?
14
+
15
+ author.save!
16
+ author.reload
17
+
18
+ assert_equal 'Sean Griffin', author.name
19
+ assert_not author.changed?
20
+ end
21
+ end
22
+ end
@@ -1,177 +1,177 @@
1
- require "cases/helper"
2
-
3
- module ActiveRecord
4
- module Type
5
- class TypeMapTest < ActiveRecord::TestCase
6
- def test_default_type
7
- mapping = TypeMap.new
8
-
9
- assert_kind_of Value, mapping.lookup(:undefined)
10
- end
11
-
12
- def test_registering_types
13
- boolean = Boolean.new
14
- mapping = TypeMap.new
15
-
16
- mapping.register_type(/boolean/i, boolean)
17
-
18
- assert_equal mapping.lookup('boolean'), boolean
19
- end
20
-
21
- def test_overriding_registered_types
22
- time = Time.new
23
- timestamp = DateTime.new
24
- mapping = TypeMap.new
25
-
26
- mapping.register_type(/time/i, time)
27
- mapping.register_type(/time/i, timestamp)
28
-
29
- assert_equal mapping.lookup('time'), timestamp
30
- end
31
-
32
- def test_fuzzy_lookup
33
- string = String.new
34
- mapping = TypeMap.new
35
-
36
- mapping.register_type(/varchar/i, string)
37
-
38
- assert_equal mapping.lookup('varchar(20)'), string
39
- end
40
-
41
- def test_aliasing_types
42
- string = String.new
43
- mapping = TypeMap.new
44
-
45
- mapping.register_type(/string/i, string)
46
- mapping.alias_type(/varchar/i, 'string')
47
-
48
- assert_equal mapping.lookup('varchar'), string
49
- end
50
-
51
- def test_changing_type_changes_aliases
52
- time = Time.new
53
- timestamp = DateTime.new
54
- mapping = TypeMap.new
55
-
56
- mapping.register_type(/timestamp/i, time)
57
- mapping.alias_type(/datetime/i, 'timestamp')
58
- mapping.register_type(/timestamp/i, timestamp)
59
-
60
- assert_equal mapping.lookup('datetime'), timestamp
61
- end
62
-
63
- def test_aliases_keep_metadata
64
- mapping = TypeMap.new
65
-
66
- mapping.register_type(/decimal/i) { |sql_type| sql_type }
67
- mapping.alias_type(/number/i, 'decimal')
68
-
69
- assert_equal mapping.lookup('number(20)'), 'decimal(20)'
70
- assert_equal mapping.lookup('number'), 'decimal'
71
- end
72
-
73
- def test_register_proc
74
- string = String.new
75
- binary = Binary.new
76
- mapping = TypeMap.new
77
-
78
- mapping.register_type(/varchar/i) do |type|
79
- if type.include?('(')
80
- string
81
- else
82
- binary
83
- end
84
- end
85
-
86
- assert_equal mapping.lookup('varchar(20)'), string
87
- assert_equal mapping.lookup('varchar'), binary
88
- end
89
-
90
- def test_additional_lookup_args
91
- mapping = TypeMap.new
92
-
93
- mapping.register_type(/varchar/i) do |type, limit|
94
- if limit > 255
95
- 'text'
96
- else
97
- 'string'
98
- end
99
- end
100
- mapping.alias_type(/string/i, 'varchar')
101
-
102
- assert_equal mapping.lookup('varchar', 200), 'string'
103
- assert_equal mapping.lookup('varchar', 400), 'text'
104
- assert_equal mapping.lookup('string', 400), 'text'
105
- end
106
-
107
- def test_requires_value_or_block
108
- mapping = TypeMap.new
109
-
110
- assert_raises(ArgumentError) do
111
- mapping.register_type(/only key/i)
112
- end
113
- end
114
-
115
- def test_lookup_non_strings
116
- mapping = HashLookupTypeMap.new
117
-
118
- mapping.register_type(1, 'string')
119
- mapping.register_type(2, 'int')
120
- mapping.alias_type(3, 1)
121
-
122
- assert_equal mapping.lookup(1), 'string'
123
- assert_equal mapping.lookup(2), 'int'
124
- assert_equal mapping.lookup(3), 'string'
125
- assert_kind_of Type::Value, mapping.lookup(4)
126
- end
127
-
128
- def test_fetch
129
- mapping = TypeMap.new
130
- mapping.register_type(1, "string")
131
-
132
- assert_equal "string", mapping.fetch(1) { "int" }
133
- assert_equal "int", mapping.fetch(2) { "int" }
134
- end
135
-
136
- def test_fetch_yields_args
137
- mapping = TypeMap.new
138
-
139
- assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
140
- assert_equal "bar-1-2-3", mapping.fetch("bar", 1, 2, 3) { |*args| args.join("-") }
141
- end
142
-
143
- def test_fetch_memoizes
144
- mapping = TypeMap.new
145
-
146
- looked_up = false
147
- mapping.register_type(1) do
148
- fail if looked_up
149
- looked_up = true
150
- "string"
151
- end
152
-
153
- assert_equal "string", mapping.fetch(1)
154
- assert_equal "string", mapping.fetch(1)
155
- end
156
-
157
- def test_fetch_memoizes_on_args
158
- mapping = TypeMap.new
159
- mapping.register_type("foo") { |*args| args.join("-") }
160
-
161
- assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
162
- assert_equal "foo-2-3-4", mapping.fetch("foo", 2, 3, 4) { |*args| args.join("-") }
163
- end
164
-
165
- def test_register_clears_cache
166
- mapping = TypeMap.new
167
-
168
- mapping.register_type(1, "string")
169
- mapping.lookup(1)
170
- mapping.register_type(1, "int")
171
-
172
- assert_equal "int", mapping.lookup(1)
173
- end
174
- end
175
- end
176
- end
177
-
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ module Type
5
+ class TypeMapTest < ActiveRecord::TestCase
6
+ def test_default_type
7
+ mapping = TypeMap.new
8
+
9
+ assert_kind_of Value, mapping.lookup(:undefined)
10
+ end
11
+
12
+ def test_registering_types
13
+ boolean = Boolean.new
14
+ mapping = TypeMap.new
15
+
16
+ mapping.register_type(/boolean/i, boolean)
17
+
18
+ assert_equal mapping.lookup('boolean'), boolean
19
+ end
20
+
21
+ def test_overriding_registered_types
22
+ time = Time.new
23
+ timestamp = DateTime.new
24
+ mapping = TypeMap.new
25
+
26
+ mapping.register_type(/time/i, time)
27
+ mapping.register_type(/time/i, timestamp)
28
+
29
+ assert_equal mapping.lookup('time'), timestamp
30
+ end
31
+
32
+ def test_fuzzy_lookup
33
+ string = String.new
34
+ mapping = TypeMap.new
35
+
36
+ mapping.register_type(/varchar/i, string)
37
+
38
+ assert_equal mapping.lookup('varchar(20)'), string
39
+ end
40
+
41
+ def test_aliasing_types
42
+ string = String.new
43
+ mapping = TypeMap.new
44
+
45
+ mapping.register_type(/string/i, string)
46
+ mapping.alias_type(/varchar/i, 'string')
47
+
48
+ assert_equal mapping.lookup('varchar'), string
49
+ end
50
+
51
+ def test_changing_type_changes_aliases
52
+ time = Time.new
53
+ timestamp = DateTime.new
54
+ mapping = TypeMap.new
55
+
56
+ mapping.register_type(/timestamp/i, time)
57
+ mapping.alias_type(/datetime/i, 'timestamp')
58
+ mapping.register_type(/timestamp/i, timestamp)
59
+
60
+ assert_equal mapping.lookup('datetime'), timestamp
61
+ end
62
+
63
+ def test_aliases_keep_metadata
64
+ mapping = TypeMap.new
65
+
66
+ mapping.register_type(/decimal/i) { |sql_type| sql_type }
67
+ mapping.alias_type(/number/i, 'decimal')
68
+
69
+ assert_equal mapping.lookup('number(20)'), 'decimal(20)'
70
+ assert_equal mapping.lookup('number'), 'decimal'
71
+ end
72
+
73
+ def test_register_proc
74
+ string = String.new
75
+ binary = Binary.new
76
+ mapping = TypeMap.new
77
+
78
+ mapping.register_type(/varchar/i) do |type|
79
+ if type.include?('(')
80
+ string
81
+ else
82
+ binary
83
+ end
84
+ end
85
+
86
+ assert_equal mapping.lookup('varchar(20)'), string
87
+ assert_equal mapping.lookup('varchar'), binary
88
+ end
89
+
90
+ def test_additional_lookup_args
91
+ mapping = TypeMap.new
92
+
93
+ mapping.register_type(/varchar/i) do |type, limit|
94
+ if limit > 255
95
+ 'text'
96
+ else
97
+ 'string'
98
+ end
99
+ end
100
+ mapping.alias_type(/string/i, 'varchar')
101
+
102
+ assert_equal mapping.lookup('varchar', 200), 'string'
103
+ assert_equal mapping.lookup('varchar', 400), 'text'
104
+ assert_equal mapping.lookup('string', 400), 'text'
105
+ end
106
+
107
+ def test_requires_value_or_block
108
+ mapping = TypeMap.new
109
+
110
+ assert_raises(ArgumentError) do
111
+ mapping.register_type(/only key/i)
112
+ end
113
+ end
114
+
115
+ def test_lookup_non_strings
116
+ mapping = HashLookupTypeMap.new
117
+
118
+ mapping.register_type(1, 'string')
119
+ mapping.register_type(2, 'int')
120
+ mapping.alias_type(3, 1)
121
+
122
+ assert_equal mapping.lookup(1), 'string'
123
+ assert_equal mapping.lookup(2), 'int'
124
+ assert_equal mapping.lookup(3), 'string'
125
+ assert_kind_of Type::Value, mapping.lookup(4)
126
+ end
127
+
128
+ def test_fetch
129
+ mapping = TypeMap.new
130
+ mapping.register_type(1, "string")
131
+
132
+ assert_equal "string", mapping.fetch(1) { "int" }
133
+ assert_equal "int", mapping.fetch(2) { "int" }
134
+ end
135
+
136
+ def test_fetch_yields_args
137
+ mapping = TypeMap.new
138
+
139
+ assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
140
+ assert_equal "bar-1-2-3", mapping.fetch("bar", 1, 2, 3) { |*args| args.join("-") }
141
+ end
142
+
143
+ def test_fetch_memoizes
144
+ mapping = TypeMap.new
145
+
146
+ looked_up = false
147
+ mapping.register_type(1) do
148
+ fail if looked_up
149
+ looked_up = true
150
+ "string"
151
+ end
152
+
153
+ assert_equal "string", mapping.fetch(1)
154
+ assert_equal "string", mapping.fetch(1)
155
+ end
156
+
157
+ def test_fetch_memoizes_on_args
158
+ mapping = TypeMap.new
159
+ mapping.register_type("foo") { |*args| args.join("-") }
160
+
161
+ assert_equal "foo-1-2-3", mapping.fetch("foo", 1, 2, 3) { |*args| args.join("-") }
162
+ assert_equal "foo-2-3-4", mapping.fetch("foo", 2, 3, 4) { |*args| args.join("-") }
163
+ end
164
+
165
+ def test_register_clears_cache
166
+ mapping = TypeMap.new
167
+
168
+ mapping.register_type(1, "string")
169
+ mapping.lookup(1)
170
+ mapping.register_type(1, "int")
171
+
172
+ assert_equal "int", mapping.lookup(1)
173
+ end
174
+ end
175
+ end
176
+ end
177
+