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
Binary file
@@ -1,26 +0,0 @@
1
- require "cases/helper"
2
-
3
- class DeprecatedCounterCacheOnHasManyThroughTest < ActiveRecord::TestCase
4
- class Post < ActiveRecord::Base
5
- has_many :taggings, as: :taggable
6
- has_many :tags, through: :taggings
7
- end
8
-
9
- class Tagging < ActiveRecord::Base
10
- belongs_to :taggable, polymorphic: true
11
- belongs_to :tag
12
- end
13
-
14
- class Tag < ActiveRecord::Base
15
- end
16
-
17
- test "counter caches are updated in the database if the belongs_to association doesn't specify a counter cache" do
18
- post = Post.create!(title: 'Hello', body: 'World!')
19
- assert_deprecated { post.tags << Tag.create!(name: 'whatever') }
20
-
21
- assert_equal 1, post.tags.size
22
- assert_equal 1, post.tags_count
23
- assert_equal 1, post.reload.tags.size
24
- assert_equal 1, post.reload.tags_count
25
- end
26
- end
@@ -1,29 +0,0 @@
1
- require "cases/helper"
2
-
3
- module ActiveRecord
4
- module AttributeMethods
5
- class SerializationTest < ActiveSupport::TestCase
6
- class FakeColumn < Struct.new(:name)
7
- def type; :integer; end
8
- def type_cast(s); "#{s}!"; end
9
- end
10
-
11
- class NullCoder
12
- def load(v); v; end
13
- end
14
-
15
- def test_type_cast_serialized_value
16
- value = Serialization::Attribute.new(NullCoder.new, "Hello world", :serialized)
17
- type = Serialization::Type.new(FakeColumn.new)
18
- assert_equal "Hello world!", type.type_cast(value)
19
- end
20
-
21
- def test_type_cast_unserialized_value
22
- value = Serialization::Attribute.new(nil, "Hello world", :unserialized)
23
- type = Serialization::Type.new(FakeColumn.new)
24
- type.type_cast(value)
25
- assert_equal "Hello world", type.type_cast(value)
26
- end
27
- end
28
- end
29
- end
@@ -1,448 +0,0 @@
1
- require 'cases/helper'
2
-
3
- module ActiveRecord
4
- class Migration
5
- class ChangeSchemaTest < ActiveRecord::TestCase
6
- attr_reader :connection, :table_name
7
-
8
- def setup
9
- super
10
- @connection = ActiveRecord::Base.connection
11
- @table_name = :testings
12
- end
13
-
14
- teardown do
15
- connection.drop_table :testings rescue nil
16
- ActiveRecord::Base.primary_key_prefix_type = nil
17
- ActiveRecord::Base.clear_cache!
18
- end
19
-
20
- def test_create_table_without_id
21
- testing_table_with_only_foo_attribute do
22
- assert_equal connection.columns(:testings).size, 1
23
- end
24
- end
25
-
26
- unless current_adapter?(:IBM_DBAdapter)
27
- # For DB2: Cannot add a primary key to a table with some rows already in it as it violates the unique constraint
28
- # Secondly GENERATED BY DEFAULT AS IDENTITY cannot be applied in a alter table command.
29
- # as this will be wrong sql syntax for DB
30
- def test_add_column_with_primary_key_attribute
31
- testing_table_with_only_foo_attribute do
32
- connection.add_column :testings, :id, :primary_key
33
- assert_equal connection.columns(:testings).size, 2
34
- end
35
- end
36
- end
37
-
38
- def test_create_table_adds_id
39
- connection.create_table :testings do |t|
40
- t.column :foo, :string
41
- end
42
-
43
- assert_equal %w(id foo), connection.columns(:testings).map(&:name)
44
- end
45
-
46
- def test_create_table_with_not_null_column
47
- connection.create_table :testings do |t|
48
- t.column :foo, :string, :null => false
49
- end
50
-
51
- assert_raises(ActiveRecord::StatementInvalid) do
52
- connection.execute "insert into testings (foo) values (NULL)"
53
- end
54
- end
55
-
56
- def test_create_table_with_defaults
57
- # MySQL doesn't allow defaults on TEXT or BLOB columns.
58
- mysql = current_adapter?(:MysqlAdapter, :Mysql2Adapter)
59
-
60
- connection.create_table :testings do |t|
61
- t.column :one, :string, :default => "hello"
62
- t.column :two, :boolean, :default => true
63
- t.column :three, :boolean, :default => false
64
- t.column :four, :integer, :default => 1
65
- t.column :five, :text, :default => "hello" unless mysql
66
- end
67
-
68
- columns = connection.columns(:testings)
69
- one = columns.detect { |c| c.name == "one" }
70
- two = columns.detect { |c| c.name == "two" }
71
- three = columns.detect { |c| c.name == "three" }
72
- four = columns.detect { |c| c.name == "four" }
73
- five = columns.detect { |c| c.name == "five" } unless mysql
74
-
75
- assert_equal "hello", one.default
76
- assert_equal true, two.type_cast_from_database(two.default)
77
- assert_equal false, three.type_cast_from_database(three.default)
78
- assert_equal '1', four.default
79
- assert_equal "hello", five.default unless mysql
80
- end
81
-
82
- if current_adapter?(:PostgreSQLAdapter)
83
- def test_add_column_with_array
84
- connection.create_table :testings
85
- connection.add_column :testings, :foo, :string, :array => true
86
-
87
- columns = connection.columns(:testings)
88
- array_column = columns.detect { |c| c.name == "foo" }
89
-
90
- assert array_column.array
91
- end
92
-
93
- def test_create_table_with_array_column
94
- connection.create_table :testings do |t|
95
- t.string :foo, :array => true
96
- end
97
-
98
- columns = connection.columns(:testings)
99
- array_column = columns.detect { |c| c.name == "foo" }
100
-
101
- assert array_column.array
102
- end
103
- end
104
-
105
- def test_create_table_with_bigint
106
- connection.create_table :testings do |t|
107
- t.bigint :eight_int
108
- end
109
- columns = connection.columns(:testings)
110
- eight = columns.detect { |c| c.name == "eight_int" }
111
-
112
- if current_adapter?(:OracleAdapter)
113
- assert_equal 'NUMBER(19)', eight.sql_type
114
- elsif current_adapter?(:SQLite3Adapter)
115
- assert_equal 'bigint', eight.sql_type
116
- else
117
- assert_equal :integer, eight.type
118
- assert_equal 8, eight.limit
119
- end
120
- ensure
121
- connection.drop_table :testings
122
- end
123
-
124
- def test_create_table_with_limits
125
- connection.create_table :testings do |t|
126
- t.column :foo, :string, :limit => 255
127
-
128
- t.column :default_int, :integer
129
-
130
- t.column :one_int, :integer, :limit => 1
131
- t.column :four_int, :integer, :limit => 4
132
- t.column :eight_int, :integer, :limit => 8
133
- end
134
-
135
- columns = connection.columns(:testings)
136
- foo = columns.detect { |c| c.name == "foo" }
137
- assert_equal 255, foo.limit
138
-
139
- default = columns.detect { |c| c.name == "default_int" }
140
- one = columns.detect { |c| c.name == "one_int" }
141
- four = columns.detect { |c| c.name == "four_int" }
142
- eight = columns.detect { |c| c.name == "eight_int" }
143
-
144
- if current_adapter?(:PostgreSQLAdapter)
145
- assert_equal 'integer', default.sql_type
146
- assert_equal 'smallint', one.sql_type
147
- assert_equal 'integer', four.sql_type
148
- assert_equal 'bigint', eight.sql_type
149
- elsif current_adapter?(:MysqlAdapter, :Mysql2Adapter)
150
- assert_match 'int(11)', default.sql_type
151
- assert_match 'tinyint', one.sql_type
152
- assert_match 'int', four.sql_type
153
- assert_match 'bigint', eight.sql_type
154
- elsif current_adapter?(:OracleAdapter)
155
- assert_equal 'NUMBER(38)', default.sql_type
156
- assert_equal 'NUMBER(1)', one.sql_type
157
- assert_equal 'NUMBER(4)', four.sql_type
158
- assert_equal 'NUMBER(8)', eight.sql_type
159
- end
160
- end
161
-
162
- def test_create_table_with_primary_key_prefix_as_table_name_with_underscore
163
- ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
164
-
165
- connection.create_table :testings do |t|
166
- t.column :foo, :string
167
- end
168
-
169
- assert_equal %w(testing_id foo), connection.columns(:testings).map(&:name)
170
- end
171
-
172
- def test_create_table_with_primary_key_prefix_as_table_name
173
- ActiveRecord::Base.primary_key_prefix_type = :table_name
174
-
175
- connection.create_table :testings do |t|
176
- t.column :foo, :string
177
- end
178
-
179
- assert_equal %w(testingid foo), connection.columns(:testings).map(&:name)
180
- end
181
-
182
- def test_create_table_raises_when_redefining_primary_key_column
183
- error = assert_raise(ArgumentError) do
184
- connection.create_table :testings do |t|
185
- t.column :id, :string
186
- end
187
- end
188
-
189
- assert_equal "you can't redefine the primary key column 'id'. To define a custom primary key, pass { id: false } to create_table.", error.message
190
- end
191
-
192
- def test_create_table_raises_when_redefining_custom_primary_key_column
193
- error = assert_raise(ArgumentError) do
194
- connection.create_table :testings, primary_key: :testing_id do |t|
195
- t.column :testing_id, :string
196
- end
197
- end
198
-
199
- assert_equal "you can't redefine the primary key column 'testing_id'. To define a custom primary key, pass { id: false } to create_table.", error.message
200
- end
201
-
202
- def test_create_table_with_timestamps_should_create_datetime_columns
203
- # FIXME: Remove the silence when we change the default `null` behavior
204
- ActiveSupport::Deprecation.silence do
205
- connection.create_table table_name do |t|
206
- t.timestamps
207
- end
208
- end
209
- created_columns = connection.columns(table_name)
210
-
211
- created_at_column = created_columns.detect {|c| c.name == 'created_at' }
212
- updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
213
-
214
- assert created_at_column.null
215
- assert updated_at_column.null
216
- end
217
-
218
- def test_create_table_with_timestamps_should_create_datetime_columns_with_options
219
- connection.create_table table_name do |t|
220
- t.timestamps :null => false
221
- end
222
- created_columns = connection.columns(table_name)
223
-
224
- created_at_column = created_columns.detect {|c| c.name == 'created_at' }
225
- updated_at_column = created_columns.detect {|c| c.name == 'updated_at' }
226
-
227
- assert !created_at_column.null
228
- assert !updated_at_column.null
229
- end
230
-
231
- def test_create_table_without_a_block
232
- connection.create_table table_name
233
- end
234
-
235
- # Sybase, and SQLite3 will not allow you to add a NOT NULL
236
- # column to a table without a default value.
237
- unless current_adapter?(:SybaseAdapter, :SQLite3Adapter, :IBM_DBAdapter)
238
- def test_add_column_not_null_without_default
239
- connection.create_table :testings do |t|
240
- t.column :foo, :string
241
- end
242
- connection.add_column :testings, :bar, :string, :null => false
243
-
244
- assert_raise(ActiveRecord::StatementInvalid) do
245
- connection.execute "insert into testings (foo, bar) values ('hello', NULL)"
246
- end
247
- end
248
- end
249
-
250
- def test_add_column_not_null_with_default
251
- connection.create_table :testings do |t|
252
- t.column :foo, :string
253
- end
254
-
255
- con = connection
256
- connection.enable_identity_insert("testings", true) if current_adapter?(:SybaseAdapter)
257
- connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}) values (1, 'hello')"
258
- connection.enable_identity_insert("testings", false) if current_adapter?(:SybaseAdapter)
259
- assert_nothing_raised {connection.add_column :testings, :bar, :string, :null => false, :default => "default" }
260
-
261
- assert_raises(ActiveRecord::StatementInvalid) do
262
- unless current_adapter?(:OpenBaseAdapter)
263
- connection.execute "insert into testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) values (2, 'hello', NULL)"
264
- else
265
- connection.insert("INSERT INTO testings (#{con.quote_column_name('id')}, #{con.quote_column_name('foo')}, #{con.quote_column_name('bar')}) VALUES (2, 'hello', NULL)",
266
- "Testing Insert","id",2)
267
- end
268
- end
269
- end
270
-
271
- def test_change_column_quotes_column_names
272
- connection.create_table :testings do |t|
273
- unless current_adapter?(:IBM_DBAdapter)
274
- t.column :select, :string
275
- else
276
- # If no limit specified by default column of length 255 is created, which later cannot be scaled down to 10
277
- t.column :select, :string, :limit => 5
278
- end
279
- end
280
-
281
- connection.change_column :testings, :select, :string, :limit => 10
282
-
283
- # Oracle needs primary key value from sequence
284
- if current_adapter?(:OracleAdapter)
285
- connection.execute "insert into testings (id, #{connection.quote_column_name('select')}) values (testings_seq.nextval, '7 chars')"
286
- else
287
- connection.execute "insert into testings (#{connection.quote_column_name('select')}) values ('7 chars')"
288
- end
289
- end
290
-
291
- def test_keeping_default_and_notnull_constraints_on_change
292
- connection.create_table :testings do |t|
293
- t.column :title, :string
294
- end
295
- person_klass = Class.new(ActiveRecord::Base)
296
- person_klass.table_name = 'testings'
297
-
298
- person_klass.connection.add_column "testings", "wealth", :integer, :null => false, :default => 99
299
- person_klass.reset_column_information
300
- assert_equal 99, person_klass.columns_hash["wealth"].default
301
- assert_equal false, person_klass.columns_hash["wealth"].null
302
- # Oracle needs primary key value from sequence
303
- if current_adapter?(:OracleAdapter)
304
- assert_nothing_raised {person_klass.connection.execute("insert into testings (id, title) values (testings_seq.nextval, 'tester')")}
305
- else
306
- assert_nothing_raised {person_klass.connection.execute("insert into testings (title) values ('tester')")}
307
- end
308
-
309
- # change column default to see that column doesn't lose its not null definition
310
- person_klass.connection.change_column_default "testings", "wealth", 100
311
- person_klass.reset_column_information
312
- assert_equal 100, person_klass.columns_hash["wealth"].default
313
- assert_equal false, person_klass.columns_hash["wealth"].null
314
-
315
- if (!current_adapter?(:IBM_DBAdapter))
316
- # rename column to see that column doesn't lose its not null and/or default definition
317
- person_klass.connection.rename_column "testings", "wealth", "money"
318
- person_klass.reset_column_information
319
- assert_nil person_klass.columns_hash["wealth"]
320
- assert_equal 100, person_klass.columns_hash["money"].default
321
- assert_equal false, person_klass.columns_hash["money"].null
322
- end
323
-
324
- # change column
325
- unless current_adapter?(:IBM_DBAdapter)
326
- person_klass.connection.change_column "testings", "money", :integer, :null => false, :default => 1000
327
- person_klass.reset_column_information
328
- assert_equal 1000, person_klass.columns_hash["money"].default
329
- assert_equal false, person_klass.columns_hash["money"].null
330
- else
331
- person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 15, :scale => 1,:null => false, :default => 1000
332
- person_klass.reset_column_information
333
- assert_equal 1000, person_klass.columns_hash["wealth"].default
334
- assert_equal false, person_klass.columns_hash["wealth"].null
335
- end
336
-
337
- # change column, make it nullable and clear default
338
- unless current_adapter?(:IBM_DBAdapter)
339
- person_klass.connection.change_column "testings", "money", :integer, :null => true, :default => nil
340
- person_klass.reset_column_information
341
- assert_nil person_klass.columns_hash["money"].default
342
- assert_equal true, person_klass.columns_hash["money"].null
343
- else
344
- person_klass.connection.change_column "testings", "wealth", :decimal, :precision => 20, :scale => 2, :null => true, :default => nil
345
- person_klass.reset_column_information
346
- assert_nil person_klass.columns_hash["wealth"].default
347
- assert_equal true, person_klass.columns_hash["wealth"].null
348
- end
349
-
350
- # change_column_null, make it not nullable and set null values to a default value
351
- unless current_adapter?(:IBM_DBAdapter)
352
- person_klass.connection.execute('UPDATE testings SET money = NULL')
353
- person_klass.connection.change_column_null "testings", "money", false, 2000
354
- person_klass.reset_column_information
355
- assert_nil person_klass.columns_hash["money"].default
356
- assert_equal false, person_klass.columns_hash["money"].null
357
- assert_equal [2000], Person.connection.select_values("SELECT money FROM testings").map { |s| s.to_i }.sort
358
- else
359
- # Trying to set the value of the column wealth to NULL and
360
- # in the next statement a not null constraint is being applied which is wrong
361
- #person_klass.connection.execute('UPDATE testings SET money = NULL')
362
- person_klass.connection.change_column_null "testings", "wealth", false, 2000
363
- person_klass.reset_column_information
364
- #assert_nil person_klass.columns_hash["wealth"].default #Setting default to 2000 and expecting nil is nor correct
365
- assert_not_nil person_klass.columns_hash["wealth"].default
366
- assert_equal false, person_klass.columns_hash["wealth"].null
367
- #Changing default does not change the already inserted value. Hence expecting 2000 is wrong.
368
- assert_equal [99], Person.connection.select_values("SELECT wealth FROM testings").map { |s| s.to_i }.sort
369
- end
370
- end
371
-
372
- def test_change_column_null
373
- testing_table_with_only_foo_attribute do
374
- notnull_migration = Class.new(ActiveRecord::Migration) do
375
- def change
376
- change_column_null :testings, :foo, false
377
- end
378
- end
379
- notnull_migration.new.suppress_messages do
380
- notnull_migration.migrate(:up)
381
- assert_equal false, connection.columns(:testings).find{ |c| c.name == "foo"}.null
382
- notnull_migration.migrate(:down)
383
- assert connection.columns(:testings).find{ |c| c.name == "foo"}.null
384
- end
385
- end
386
- end
387
-
388
- def test_column_exists
389
- connection.create_table :testings do |t|
390
- t.column :foo, :string
391
- end
392
-
393
- assert connection.column_exists?(:testings, :foo)
394
- assert_not connection.column_exists?(:testings, :bar)
395
- end
396
-
397
- def test_column_exists_with_type
398
- connection.create_table :testings do |t|
399
- t.column :foo, :string
400
- t.column :bar, :decimal, :precision => 8, :scale => 2
401
- end
402
-
403
- assert connection.column_exists?(:testings, :foo, :string)
404
- assert_not connection.column_exists?(:testings, :foo, :integer)
405
-
406
- assert connection.column_exists?(:testings, :bar, :decimal)
407
- assert_not connection.column_exists?(:testings, :bar, :integer)
408
- end
409
-
410
- def test_column_exists_with_definition
411
- connection.create_table :testings do |t|
412
- t.column :foo, :string, limit: 100
413
- t.column :bar, :decimal, precision: 8, scale: 2
414
- t.column :taggable_id, :integer, null: false
415
- t.column :taggable_type, :string, default: 'Photo'
416
- end
417
-
418
- assert connection.column_exists?(:testings, :foo, :string, limit: 100)
419
- assert_not connection.column_exists?(:testings, :foo, :string, limit: nil)
420
- assert connection.column_exists?(:testings, :bar, :decimal, precision: 8, scale: 2)
421
- assert_not connection.column_exists?(:testings, :bar, :decimal, precision: nil, scale: nil)
422
- assert connection.column_exists?(:testings, :taggable_id, :integer, null: false)
423
- assert_not connection.column_exists?(:testings, :taggable_id, :integer, null: true)
424
- assert connection.column_exists?(:testings, :taggable_type, :string, default: 'Photo')
425
- assert_not connection.column_exists?(:testings, :taggable_type, :string, default: nil)
426
- end
427
-
428
- def test_column_exists_on_table_with_no_options_parameter_supplied
429
- connection.create_table :testings do |t|
430
- t.string :foo
431
- end
432
- connection.change_table :testings do |t|
433
- assert t.column_exists?(:foo)
434
- assert !(t.column_exists?(:bar))
435
- end
436
- end
437
-
438
- private
439
- def testing_table_with_only_foo_attribute
440
- connection.create_table :testings, :id => false do |t|
441
- t.column :foo, :string
442
- end
443
-
444
- yield
445
- end
446
- end
447
- end
448
- end