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
@@ -1,19 +1,34 @@
1
- require "cases/helper"
2
-
3
- class DatabaseStatementsTest < ActiveRecord::TestCase
4
- def setup
5
- @connection = ActiveRecord::Base.connection
6
- end
7
-
8
- def test_insert_should_return_the_inserted_id
9
- # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
10
- if current_adapter?(:OracleAdapter)
11
- sequence_name = "accounts_seq"
12
- id_value = @connection.next_sequence_value(sequence_name)
13
- id = @connection.insert("INSERT INTO accounts (id, firm_id,credit_limit) VALUES (accounts_seq.nextval,42,5000)", nil, :id, id_value, sequence_name)
14
- else
15
- id = @connection.insert("INSERT INTO accounts (firm_id,credit_limit) VALUES (42,5000)")
16
- end
17
- assert_not_nil id
18
- end
19
- end
1
+ require "cases/helper"
2
+
3
+ class DatabaseStatementsTest < ActiveRecord::TestCase
4
+ def setup
5
+ @connection = ActiveRecord::Base.connection
6
+ end
7
+
8
+ def test_insert_should_return_the_inserted_id
9
+ assert_not_nil return_the_inserted_id(method: :insert)
10
+ end
11
+
12
+ def test_create_should_return_the_inserted_id
13
+ assert_not_nil return_the_inserted_id(method: :create)
14
+ end
15
+
16
+ def test_insert_update_delete_sql_is_deprecated
17
+ assert_deprecated { @connection.insert_sql("INSERT INTO accounts (firm_id,credit_limit) VALUES (42,5000)") }
18
+ assert_deprecated { @connection.update_sql("UPDATE accounts SET credit_limit = 6000 WHERE firm_id = 42") }
19
+ assert_deprecated { @connection.delete_sql("DELETE FROM accounts WHERE firm_id = 42") }
20
+ end
21
+
22
+ private
23
+
24
+ def return_the_inserted_id(method:)
25
+ # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
26
+ if current_adapter?(:OracleAdapter)
27
+ sequence_name = "accounts_seq"
28
+ id_value = @connection.next_sequence_value(sequence_name)
29
+ @connection.send(method, "INSERT INTO accounts (id, firm_id,credit_limit) VALUES (accounts_seq.nextval,42,5000)", nil, :id, id_value, sequence_name)
30
+ else
31
+ @connection.send(method, "INSERT INTO accounts (firm_id,credit_limit) VALUES (42,5000)")
32
+ end
33
+ end
34
+ end
@@ -1,32 +1,44 @@
1
- require 'cases/helper'
2
- require 'models/topic'
3
-
4
- class InvalidDateTest < ActiveRecord::TestCase
5
- def test_assign_valid_dates
6
- valid_dates = [[2007, 11, 30], [1993, 2, 28], [2008, 2, 29]]
7
-
8
- invalid_dates = [[2007, 11, 31], [1993, 2, 29], [2007, 2, 29]]
9
-
10
- valid_dates.each do |date_src|
11
- topic = Topic.new("last_read(1i)" => date_src[0].to_s, "last_read(2i)" => date_src[1].to_s, "last_read(3i)" => date_src[2].to_s)
12
- # Oracle DATE columns are datetime columns and Oracle adapter returns Time value
13
- if current_adapter?(:OracleAdapter)
14
- assert_equal(topic.last_read.to_date, Date.new(*date_src))
15
- else
16
- assert_equal(topic.last_read, Date.new(*date_src))
17
- end
18
- end
19
-
20
- invalid_dates.each do |date_src|
21
- assert_nothing_raised do
22
- topic = Topic.new({"last_read(1i)" => date_src[0].to_s, "last_read(2i)" => date_src[1].to_s, "last_read(3i)" => date_src[2].to_s})
23
- # Oracle DATE columns are datetime columns and Oracle adapter returns Time value
24
- if current_adapter?(:OracleAdapter)
25
- assert_equal(topic.last_read.to_date, Time.local(*date_src).to_date, "The date should be modified according to the behavior of the Time object")
26
- else
27
- assert_equal(topic.last_read, Time.local(*date_src).to_date, "The date should be modified according to the behavior of the Time object")
28
- end
29
- end
30
- end
31
- end
32
- end
1
+ require 'cases/helper'
2
+ require 'models/topic'
3
+
4
+ class DateTest < ActiveRecord::TestCase
5
+ def test_date_with_time_value
6
+ time_value = Time.new(2016, 05, 11, 19, 0, 0)
7
+ topic = Topic.create(last_read: time_value)
8
+ assert_equal topic, Topic.find_by(last_read: time_value)
9
+ end
10
+
11
+ def test_date_with_string_value
12
+ string_value = '2016-05-11 19:00:00'
13
+ topic = Topic.create(last_read: string_value)
14
+ assert_equal topic, Topic.find_by(last_read: string_value)
15
+ end
16
+
17
+ def test_assign_valid_dates
18
+ valid_dates = [[2007, 11, 30], [1993, 2, 28], [2008, 2, 29]]
19
+
20
+ invalid_dates = [[2007, 11, 31], [1993, 2, 29], [2007, 2, 29]]
21
+
22
+ valid_dates.each do |date_src|
23
+ topic = Topic.new("last_read(1i)" => date_src[0].to_s, "last_read(2i)" => date_src[1].to_s, "last_read(3i)" => date_src[2].to_s)
24
+ # Oracle DATE columns are datetime columns and Oracle adapter returns Time value
25
+ if current_adapter?(:OracleAdapter)
26
+ assert_equal(topic.last_read.to_date, Date.new(*date_src))
27
+ else
28
+ assert_equal(topic.last_read, Date.new(*date_src))
29
+ end
30
+ end
31
+
32
+ invalid_dates.each do |date_src|
33
+ assert_nothing_raised do
34
+ topic = Topic.new({"last_read(1i)" => date_src[0].to_s, "last_read(2i)" => date_src[1].to_s, "last_read(3i)" => date_src[2].to_s})
35
+ # Oracle DATE columns are datetime columns and Oracle adapter returns Time value
36
+ if current_adapter?(:OracleAdapter)
37
+ assert_equal(topic.last_read.to_date, Time.local(*date_src).to_date, "The date should be modified according to the behavior of the Time object")
38
+ else
39
+ assert_equal(topic.last_read, Time.local(*date_src).to_date, "The date should be modified according to the behavior of the Time object")
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,107 @@
1
+ require 'cases/helper'
2
+ require 'support/schema_dumping_helper'
3
+
4
+ if subsecond_precision_supported?
5
+ class DateTimePrecisionTest < ActiveRecord::TestCase
6
+ include SchemaDumpingHelper
7
+ self.use_transactional_tests = false
8
+
9
+ class Foo < ActiveRecord::Base; end
10
+
11
+ setup do
12
+ @connection = ActiveRecord::Base.connection
13
+ Foo.reset_column_information
14
+ end
15
+
16
+ teardown do
17
+ @connection.drop_table :foos
18
+ #, if_exists: true
19
+ end
20
+
21
+ def test_datetime_data_type_with_precision
22
+ @connection.create_table(:foos, force: true)
23
+ @connection.add_column :foos, :created_at, :datetime, precision: 0
24
+ @connection.add_column :foos, :updated_at, :datetime, precision: 5
25
+ assert_equal 0, Foo.columns_hash['created_at'].precision
26
+ assert_equal 5, Foo.columns_hash['updated_at'].precision
27
+ end
28
+
29
+ def test_datetime_precision_is_truncated_on_assignment
30
+ @connection.create_table(:foos, force: true)
31
+ @connection.add_column :foos, :created_at, :datetime, precision: 0
32
+ @connection.add_column :foos, :updated_at, :datetime, precision: 6
33
+
34
+ time = ::Time.now.change(nsec: 123456789)
35
+ foo = Foo.new(created_at: time, updated_at: time)
36
+
37
+ assert_equal 0, foo.created_at.nsec
38
+ assert_equal 123456000, foo.updated_at.nsec
39
+
40
+ foo.save!
41
+ foo.reload
42
+
43
+ assert_equal 0, foo.created_at.nsec
44
+ assert_equal 123456000, foo.updated_at.nsec
45
+ end
46
+
47
+ def test_timestamps_helper_with_custom_precision
48
+ @connection.create_table(:foos, force: true) do |t|
49
+ t.timestamps precision: 4
50
+ end
51
+ assert_equal 4, Foo.columns_hash['created_at'].precision
52
+ assert_equal 4, Foo.columns_hash['updated_at'].precision
53
+ end
54
+
55
+ def test_passing_precision_to_datetime_does_not_set_limit
56
+ @connection.create_table(:foos, force: true) do |t|
57
+ t.timestamps precision: 4
58
+ end
59
+ assert_nil Foo.columns_hash['created_at'].limit
60
+ assert_nil Foo.columns_hash['updated_at'].limit
61
+ end
62
+
63
+ def test_invalid_datetime_precision_raises_error
64
+ assert_raises ActiveRecord::ActiveRecordError do
65
+ @connection.create_table(:foos, force: true) do |t|
66
+ t.timestamps precision: 7
67
+ end
68
+ end
69
+ end
70
+
71
+ def test_formatting_datetime_according_to_precision
72
+ @connection.create_table(:foos, force: true) do |t|
73
+ t.datetime :created_at, precision: 0
74
+ t.datetime :updated_at, precision: 4
75
+ end
76
+ date = ::Time.utc(2014, 8, 17, 12, 30, 0, 999999)
77
+ Foo.create!(created_at: date, updated_at: date)
78
+ assert foo = Foo.find_by(created_at: date)
79
+ assert_equal 1, Foo.where(updated_at: date).count
80
+ assert_equal date.to_s, foo.created_at.to_s
81
+ assert_equal date.to_s, foo.updated_at.to_s
82
+ assert_equal 000000, foo.created_at.usec
83
+ assert_equal 999900, foo.updated_at.usec
84
+ end
85
+
86
+ def test_schema_dump_includes_datetime_precision
87
+ @connection.create_table(:foos, force: true) do |t|
88
+ t.timestamps precision: 6
89
+ end
90
+ output = dump_table_schema("foos")
91
+ assert_match %r{t\.datetime\s+"created_at",\s+precision: 6,\s+null: false$}, output
92
+ assert_match %r{t\.datetime\s+"updated_at",\s+precision: 6,\s+null: false$}, output
93
+ end
94
+
95
+ if current_adapter?(:PostgreSQLAdapter, :SQLServerAdapter)
96
+ def test_datetime_precision_with_zero_should_be_dumped
97
+ @connection.create_table(:foos, force: true) do |t|
98
+ t.timestamps precision: 0
99
+ end
100
+ output = dump_table_schema("foos")
101
+ assert_match %r{t\.datetime\s+"created_at",\s+precision: 0,\s+null: false$}, output
102
+ assert_match %r{t\.datetime\s+"updated_at",\s+precision: 0,\s+null: false$}, output
103
+ end
104
+ end
105
+
106
+ end
107
+ end
@@ -1,61 +1,61 @@
1
- require "cases/helper"
2
- require 'models/topic'
3
- require 'models/task'
4
-
5
- class DateTimeTest < ActiveRecord::TestCase
6
- include InTimeZone
7
-
8
- def test_saves_both_date_and_time
9
- with_env_tz 'America/New_York' do
10
- with_timezone_config default: :utc do
11
- time_values = [1807, 2, 10, 15, 30, 45]
12
- # create DateTime value with local time zone offset
13
- local_offset = Rational(Time.local(*time_values).utc_offset, 86400)
14
- now = DateTime.civil(*(time_values + [local_offset]))
15
-
16
- task = Task.new
17
- task.starting = now
18
- task.save!
19
-
20
- # check against Time.local, since some platforms will return a Time instead of a DateTime
21
- assert_equal Time.local(*time_values), Task.find(task.id).starting
22
- end
23
- end
24
- end
25
-
26
- def test_assign_empty_date_time
27
- task = Task.new
28
- task.starting = ''
29
- task.ending = nil
30
- assert_nil task.starting
31
- assert_nil task.ending
32
- end
33
-
34
- def test_assign_bad_date_time_with_timezone
35
- in_time_zone "Pacific Time (US & Canada)" do
36
- task = Task.new
37
- task.starting = '2014-07-01T24:59:59GMT'
38
- assert_nil task.starting
39
- end
40
- end
41
-
42
- def test_assign_empty_date
43
- topic = Topic.new
44
- topic.last_read = ''
45
- assert_nil topic.last_read
46
- end
47
-
48
- def test_assign_empty_time
49
- topic = Topic.new
50
- topic.bonus_time = ''
51
- assert_nil topic.bonus_time
52
- end
53
-
54
- def test_assign_in_local_timezone
55
- now = DateTime.now
56
- with_timezone_config default: :local do
57
- task = Task.new starting: now
58
- assert_equal now, task.starting
59
- end
60
- end
61
- end
1
+ require "cases/helper"
2
+ require 'models/topic'
3
+ require 'models/task'
4
+
5
+ class DateTimeTest < ActiveRecord::TestCase
6
+ include InTimeZone
7
+
8
+ def test_saves_both_date_and_time
9
+ with_env_tz 'America/New_York' do
10
+ with_timezone_config default: :utc do
11
+ time_values = [1807, 2, 10, 15, 30, 45]
12
+ # create DateTime value with local time zone offset
13
+ local_offset = Rational(Time.local(*time_values).utc_offset, 86400)
14
+ now = DateTime.civil(*(time_values + [local_offset]))
15
+
16
+ task = Task.new
17
+ task.starting = now
18
+ task.save!
19
+
20
+ # check against Time.local, since some platforms will return a Time instead of a DateTime
21
+ assert_equal Time.local(*time_values), Task.find(task.id).starting
22
+ end
23
+ end
24
+ end
25
+
26
+ def test_assign_empty_date_time
27
+ task = Task.new
28
+ task.starting = ''
29
+ task.ending = nil
30
+ assert_nil task.starting
31
+ assert_nil task.ending
32
+ end
33
+
34
+ def test_assign_bad_date_time_with_timezone
35
+ in_time_zone "Pacific Time (US & Canada)" do
36
+ task = Task.new
37
+ task.starting = '2014-07-01T24:59:59GMT'
38
+ assert_nil task.starting
39
+ end
40
+ end
41
+
42
+ def test_assign_empty_date
43
+ topic = Topic.new
44
+ topic.last_read = ''
45
+ assert_nil topic.last_read
46
+ end
47
+
48
+ def test_assign_empty_time
49
+ topic = Topic.new
50
+ topic.bonus_time = ''
51
+ assert_nil topic.bonus_time
52
+ end
53
+
54
+ def test_assign_in_local_timezone
55
+ now = DateTime.now
56
+ with_timezone_config default: :local do
57
+ task = Task.new starting: now
58
+ assert_equal now, task.starting
59
+ end
60
+ end
61
+ end
@@ -1,223 +1,219 @@
1
- require "cases/helper"
2
- require 'models/default'
3
- require 'models/entrant'
4
-
5
- class DefaultTest < ActiveRecord::TestCase
6
- def test_nil_defaults_for_not_null_columns
7
- column_defaults =
8
- if current_adapter?(:MysqlAdapter) && (Mysql.client_version < 50051 || (50100..50122).include?(Mysql.client_version))
9
- { 'id' => nil, 'name' => '', 'course_id' => nil }
10
- else
11
- { 'id' => nil, 'name' => nil, 'course_id' => nil }
12
- end
13
-
14
- column_defaults.each do |name, default|
15
- column = Entrant.columns_hash[name]
16
- assert !column.null, "#{name} column should be NOT NULL"
17
- assert_equal default, column.default, "#{name} column should be DEFAULT #{default.inspect}"
18
- end
19
- end
20
-
21
- if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
22
- def test_default_integers
23
- default = Default.new
24
- assert_instance_of Fixnum, default.positive_integer
25
- assert_equal 1, default.positive_integer
26
- assert_instance_of Fixnum, default.negative_integer
27
- assert_equal(-1, default.negative_integer)
28
- assert_instance_of BigDecimal, default.decimal_number
29
- assert_equal BigDecimal.new("2.78"), default.decimal_number
30
- end
31
- end
32
-
33
- if current_adapter?(:PostgreSQLAdapter)
34
- def test_multiline_default_text
35
- # older postgres versions represent the default with escapes ("\\012" for a newline)
36
- assert( "--- []\n\n" == Default.columns_hash['multiline_default'].default ||
37
- "--- []\\012\\012" == Default.columns_hash['multiline_default'].default)
38
- end
39
-
40
- def test_default_negative_integer
41
- assert_equal "-1", Default.columns_hash['negative_integer'].default
42
- end
43
- end
44
- end
45
-
46
- class DefaultStringsTest < ActiveRecord::TestCase
47
- class DefaultString < ActiveRecord::Base; end
48
-
49
- setup do
50
- @connection = ActiveRecord::Base.connection
51
- @connection.create_table :default_strings do |t|
52
- t.string :string_col, default: "Smith"
53
- t.string :string_col_with_quotes, default: "O'Connor"
54
- end
55
- DefaultString.reset_column_information
56
- end
57
-
58
- def test_default_strings
59
- assert_equal "Smith", DefaultString.new.string_col
60
- end
61
-
62
- def test_default_strings_containing_single_quotes
63
- assert_equal "O'Connor", DefaultString.new.string_col_with_quotes
64
- end
65
-
66
- teardown do
67
- @connection.drop_table :default_strings
68
- end
69
- end
70
-
71
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
72
- class DefaultsTestWithoutTransactionalFixtures < ActiveRecord::TestCase
73
- # ActiveRecord::Base#create! (and #save and other related methods) will
74
- # open a new transaction. When in transactional fixtures mode, this will
75
- # cause Active Record to create a new savepoint. However, since MySQL doesn't
76
- # support DDL transactions, creating a table will result in any created
77
- # savepoints to be automatically released. This in turn causes the savepoint
78
- # release code in AbstractAdapter#transaction to fail.
79
- #
80
- # We don't want that to happen, so we disable transactional fixtures here.
81
- self.use_transactional_fixtures = false
82
-
83
- def using_strict(strict)
84
- connection = ActiveRecord::Base.remove_connection
85
- ActiveRecord::Base.establish_connection connection.merge(strict: strict)
86
- yield
87
- ensure
88
- ActiveRecord::Base.remove_connection
89
- ActiveRecord::Base.establish_connection connection
90
- end
91
-
92
- # MySQL cannot have defaults on text/blob columns. It reports the
93
- # default value as null.
94
- #
95
- # Despite this, in non-strict mode, MySQL will use an empty string
96
- # as the default value of the field, if no other value is
97
- # specified.
98
- #
99
- # Therefore, in non-strict mode, we want column.default to report
100
- # an empty string as its default, to be consistent with that.
101
- #
102
- # In strict mode, column.default should be nil.
103
- def test_mysql_text_not_null_defaults_non_strict
104
- using_strict(false) do
105
- with_text_blob_not_null_table do |klass|
106
- assert_equal '', klass.columns_hash['non_null_blob'].default
107
- assert_equal '', klass.columns_hash['non_null_text'].default
108
-
109
- assert_nil klass.columns_hash['null_blob'].default
110
- assert_nil klass.columns_hash['null_text'].default
111
-
112
- instance = klass.create!
113
-
114
- assert_equal '', instance.non_null_text
115
- assert_equal '', instance.non_null_blob
116
-
117
- assert_nil instance.null_text
118
- assert_nil instance.null_blob
119
- end
120
- end
121
- end
122
-
123
- def test_mysql_text_not_null_defaults_strict
124
- using_strict(true) do
125
- with_text_blob_not_null_table do |klass|
126
- assert_nil klass.columns_hash['non_null_blob'].default
127
- assert_nil klass.columns_hash['non_null_text'].default
128
- assert_nil klass.columns_hash['null_blob'].default
129
- assert_nil klass.columns_hash['null_text'].default
130
-
131
- assert_raises(ActiveRecord::StatementInvalid) { klass.create }
132
- end
133
- end
134
- end
135
-
136
- def with_text_blob_not_null_table
137
- klass = Class.new(ActiveRecord::Base)
138
- klass.table_name = 'test_mysql_text_not_null_defaults'
139
- klass.connection.create_table klass.table_name do |t|
140
- t.column :non_null_text, :text, :null => false
141
- t.column :non_null_blob, :blob, :null => false
142
- t.column :null_text, :text, :null => true
143
- t.column :null_blob, :blob, :null => true
144
- end
145
-
146
- yield klass
147
- ensure
148
- klass.connection.drop_table(klass.table_name) rescue nil
149
- end
150
-
151
- # MySQL uses an implicit default 0 rather than NULL unless in strict mode.
152
- # We use an implicit NULL so schema.rb is compatible with other databases.
153
- def test_mysql_integer_not_null_defaults
154
- klass = Class.new(ActiveRecord::Base)
155
- klass.table_name = 'test_integer_not_null_default_zero'
156
- klass.connection.create_table klass.table_name do |t|
157
- t.column :zero, :integer, :null => false, :default => 0
158
- t.column :omit, :integer, :null => false
159
- end
160
-
161
- assert_equal '0', klass.columns_hash['zero'].default
162
- assert !klass.columns_hash['zero'].null
163
- # 0 in MySQL 4, nil in 5.
164
- assert [0, nil].include?(klass.columns_hash['omit'].default)
165
- assert !klass.columns_hash['omit'].null
166
-
167
- assert_raise(ActiveRecord::StatementInvalid) { klass.create! }
168
-
169
- assert_nothing_raised do
170
- instance = klass.create!(:omit => 1)
171
- assert_equal 0, instance.zero
172
- assert_equal 1, instance.omit
173
- end
174
- ensure
175
- klass.connection.drop_table(klass.table_name) rescue nil
176
- end
177
- end
178
- end
179
-
180
- if current_adapter?(:PostgreSQLAdapter)
181
- class DefaultsUsingMultipleSchemasAndDomainTest < ActiveSupport::TestCase
182
- def setup
183
- @connection = ActiveRecord::Base.connection
184
-
185
- @old_search_path = @connection.schema_search_path
186
- @connection.schema_search_path = "schema_1, pg_catalog"
187
- @connection.create_table "defaults" do |t|
188
- t.text "text_col", :default => "some value"
189
- t.string "string_col", :default => "some value"
190
- end
191
- Default.reset_column_information
192
- end
193
-
194
- def test_text_defaults_in_new_schema_when_overriding_domain
195
- assert_equal "some value", Default.new.text_col, "Default of text column was not correctly parse"
196
- end
197
-
198
- def test_string_defaults_in_new_schema_when_overriding_domain
199
- assert_equal "some value", Default.new.string_col, "Default of string column was not correctly parse"
200
- end
201
-
202
- def test_bpchar_defaults_in_new_schema_when_overriding_domain
203
- @connection.execute "ALTER TABLE defaults ADD bpchar_col bpchar DEFAULT 'some value'"
204
- Default.reset_column_information
205
- assert_equal "some value", Default.new.bpchar_col, "Default of bpchar column was not correctly parse"
206
- end
207
-
208
- def test_text_defaults_after_updating_column_default
209
- @connection.execute "ALTER TABLE defaults ALTER COLUMN text_col SET DEFAULT 'some text'::schema_1.text"
210
- assert_equal "some text", Default.new.text_col, "Default of text column was not correctly parse after updating default using '::text' since postgreSQL will add parens to the default in db"
211
- end
212
-
213
- def test_default_containing_quote_and_colons
214
- @connection.execute "ALTER TABLE defaults ALTER COLUMN string_col SET DEFAULT 'foo''::bar'"
215
- assert_equal "foo'::bar", Default.new.string_col
216
- end
217
-
218
- teardown do
219
- @connection.schema_search_path = @old_search_path
220
- Default.reset_column_information
221
- end
222
- end
223
- end
1
+ require "cases/helper"
2
+ require 'support/schema_dumping_helper'
3
+ require 'models/default'
4
+ require 'models/entrant'
5
+
6
+ class DefaultTest < ActiveRecord::TestCase
7
+ def test_nil_defaults_for_not_null_columns
8
+ %w(id name course_id).each do |name|
9
+ column = Entrant.columns_hash[name]
10
+ assert !column.null, "#{name} column should be NOT NULL"
11
+ assert_not column.default, "#{name} column should be DEFAULT 'nil'"
12
+ end
13
+ end
14
+
15
+ if current_adapter?(:PostgreSQLAdapter)
16
+ def test_multiline_default_text
17
+ record = Default.new
18
+ # older postgres versions represent the default with escapes ("\\012" for a newline)
19
+ assert("--- []\n\n" == record.multiline_default || "--- []\\012\\012" == record.multiline_default)
20
+ end
21
+ end
22
+ end
23
+
24
+ class DefaultNumbersTest < ActiveRecord::TestCase
25
+ class DefaultNumber < ActiveRecord::Base; end
26
+
27
+ setup do
28
+ @connection = ActiveRecord::Base.connection
29
+ @connection.create_table :default_numbers do |t|
30
+ t.integer :positive_integer, default: 7
31
+ t.integer :negative_integer, default: -5
32
+ t.decimal :decimal_number, default: "2.78", precision: 5, scale: 2
33
+ end
34
+ end
35
+
36
+ teardown do
37
+ @connection.drop_table :default_numbers
38
+ #, if_exists: true
39
+ end
40
+
41
+ def test_default_positive_integer
42
+ record = DefaultNumber.new
43
+ assert_equal 7, record.positive_integer
44
+ assert_equal "7", record.positive_integer_before_type_cast
45
+ end
46
+
47
+ def test_default_negative_integer
48
+ record = DefaultNumber.new
49
+ assert_equal (-5), record.negative_integer
50
+ assert_equal "-5", record.negative_integer_before_type_cast
51
+ end
52
+
53
+ def test_default_decimal_number
54
+ record = DefaultNumber.new
55
+ assert_equal BigDecimal.new("2.78"), record.decimal_number
56
+ assert_equal "2.78", record.decimal_number_before_type_cast
57
+ end
58
+ end
59
+
60
+ class DefaultStringsTest < ActiveRecord::TestCase
61
+ class DefaultString < ActiveRecord::Base; end
62
+
63
+ setup do
64
+ @connection = ActiveRecord::Base.connection
65
+ @connection.create_table :default_strings do |t|
66
+ t.string :string_col, default: "Smith"
67
+ t.string :string_col_with_quotes, default: "O'Connor"
68
+ end
69
+ DefaultString.reset_column_information
70
+ end
71
+
72
+ def test_default_strings
73
+ assert_equal "Smith", DefaultString.new.string_col
74
+ end
75
+
76
+ def test_default_strings_containing_single_quotes
77
+ assert_equal "O'Connor", DefaultString.new.string_col_with_quotes
78
+ end
79
+
80
+ teardown do
81
+ @connection.drop_table :default_strings
82
+ end
83
+ end
84
+
85
+ if current_adapter?(:PostgreSQLAdapter)
86
+ class PostgresqlDefaultExpressionTest < ActiveRecord::TestCase
87
+ include SchemaDumpingHelper
88
+
89
+ test "schema dump includes default expression" do
90
+ output = dump_table_schema("defaults")
91
+ assert_match %r/t\.date\s+"modified_date",\s+default: -> { "\('now'::text\)::date" }/, output
92
+ assert_match %r/t\.date\s+"modified_date_function",\s+default: -> { "now\(\)" }/, output
93
+ assert_match %r/t\.datetime\s+"modified_time",\s+default: -> { "now\(\)" }/, output
94
+ assert_match %r/t\.datetime\s+"modified_time_function",\s+default: -> { "now\(\)" }/, output
95
+ end
96
+ end
97
+ end
98
+
99
+ if current_adapter?(:Mysql2Adapter)
100
+ class MysqlDefaultExpressionTest < ActiveRecord::TestCase
101
+ include SchemaDumpingHelper
102
+
103
+ if ActiveRecord::Base.connection.version >= '5.6.0'
104
+ test "schema dump includes default expression" do
105
+ output = dump_table_schema("datetime_defaults")
106
+ assert_match %r/t\.datetime\s+"modified_datetime",\s+default: -> { "CURRENT_TIMESTAMP" }/, output
107
+ end
108
+ end
109
+ end
110
+
111
+ class DefaultsTestWithoutTransactionalFixtures < ActiveRecord::TestCase
112
+ # ActiveRecord::Base#create! (and #save and other related methods) will
113
+ # open a new transaction. When in transactional tests mode, this will
114
+ # cause Active Record to create a new savepoint. However, since MySQL doesn't
115
+ # support DDL transactions, creating a table will result in any created
116
+ # savepoints to be automatically released. This in turn causes the savepoint
117
+ # release code in AbstractAdapter#transaction to fail.
118
+ #
119
+ # We don't want that to happen, so we disable transactional tests here.
120
+ self.use_transactional_tests = false
121
+
122
+ def using_strict(strict)
123
+ connection = ActiveRecord::Base.remove_connection
124
+ ActiveRecord::Base.establish_connection connection.merge(strict: strict)
125
+ yield
126
+ ensure
127
+ ActiveRecord::Base.remove_connection
128
+ ActiveRecord::Base.establish_connection connection
129
+ end
130
+
131
+ # MySQL cannot have defaults on text/blob columns. It reports the
132
+ # default value as null.
133
+ #
134
+ # Despite this, in non-strict mode, MySQL will use an empty string
135
+ # as the default value of the field, if no other value is
136
+ # specified.
137
+ #
138
+ # Therefore, in non-strict mode, we want column.default to report
139
+ # an empty string as its default, to be consistent with that.
140
+ #
141
+ # In strict mode, column.default should be nil.
142
+ def test_mysql_text_not_null_defaults_non_strict
143
+ using_strict(false) do
144
+ with_text_blob_not_null_table do |klass|
145
+ record = klass.new
146
+ assert_equal '', record.non_null_blob
147
+ assert_equal '', record.non_null_text
148
+
149
+ assert_nil record.null_blob
150
+ assert_nil record.null_text
151
+
152
+ record.save!
153
+ record.reload
154
+
155
+ assert_equal '', record.non_null_text
156
+ assert_equal '', record.non_null_blob
157
+
158
+ assert_nil record.null_text
159
+ assert_nil record.null_blob
160
+ end
161
+ end
162
+ end
163
+
164
+ def test_mysql_text_not_null_defaults_strict
165
+ using_strict(true) do
166
+ with_text_blob_not_null_table do |klass|
167
+ record = klass.new
168
+ assert_nil record.non_null_blob
169
+ assert_nil record.non_null_text
170
+ assert_nil record.null_blob
171
+ assert_nil record.null_text
172
+
173
+ assert_raises(ActiveRecord::StatementInvalid) { klass.create }
174
+ end
175
+ end
176
+ end
177
+
178
+ def with_text_blob_not_null_table
179
+ klass = Class.new(ActiveRecord::Base)
180
+ klass.table_name = 'test_mysql_text_not_null_defaults'
181
+ klass.connection.create_table klass.table_name do |t|
182
+ t.column :non_null_text, :text, :null => false
183
+ t.column :non_null_blob, :blob, :null => false
184
+ t.column :null_text, :text, :null => true
185
+ t.column :null_blob, :blob, :null => true
186
+ end
187
+
188
+ yield klass
189
+ ensure
190
+ klass.connection.drop_table(klass.table_name) rescue nil
191
+ end
192
+
193
+ # MySQL uses an implicit default 0 rather than NULL unless in strict mode.
194
+ # We use an implicit NULL so schema.rb is compatible with other databases.
195
+ def test_mysql_integer_not_null_defaults
196
+ klass = Class.new(ActiveRecord::Base)
197
+ klass.table_name = 'test_integer_not_null_default_zero'
198
+ klass.connection.create_table klass.table_name do |t|
199
+ t.column :zero, :integer, :null => false, :default => 0
200
+ t.column :omit, :integer, :null => false
201
+ end
202
+
203
+ assert_equal '0', klass.columns_hash['zero'].default
204
+ assert !klass.columns_hash['zero'].null
205
+ assert_equal nil, klass.columns_hash['omit'].default
206
+ assert !klass.columns_hash['omit'].null
207
+
208
+ assert_raise(ActiveRecord::StatementInvalid) { klass.create! }
209
+
210
+ assert_nothing_raised do
211
+ instance = klass.create!(:omit => 1)
212
+ assert_equal 0, instance.zero
213
+ assert_equal 1, instance.omit
214
+ end
215
+ ensure
216
+ klass.connection.drop_table(klass.table_name) rescue nil
217
+ end
218
+ end
219
+ end