ibm_db 3.0.4-x86-mingw32 → 3.0.5-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 (463) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -1
  3. data/LICENSE +1 -1
  4. data/MANIFEST +14 -14
  5. data/README +225 -225
  6. data/ext/Makefile.nt32 +181 -181
  7. data/ext/Makefile.nt32.191 +212 -212
  8. data/ext/extconf.rb +291 -291
  9. data/ext/ibm_db.c +11887 -11884
  10. data/ext/ruby_ibm_db.h +241 -241
  11. data/ext/ruby_ibm_db_cli.c +866 -866
  12. data/ext/ruby_ibm_db_cli.h +500 -500
  13. data/init.rb +41 -41
  14. data/lib/IBM_DB.rb +27 -27
  15. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3177 -3177
  16. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +1 -1
  17. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -328
  18. data/lib/mswin32/ibm_db.rb +122 -122
  19. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  20. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  21. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  22. data/test/active_record/connection_adapters/fake_adapter.rb +46 -46
  23. data/test/assets/example.log +1 -1
  24. data/test/assets/test.txt +1 -1
  25. data/test/cases/adapter_test.rb +276 -261
  26. data/test/cases/aggregations_test.rb +158 -158
  27. data/test/cases/ar_schema_test.rb +161 -161
  28. data/test/cases/associations/association_scope_test.rb +21 -21
  29. data/test/cases/associations/belongs_to_associations_test.rb +1029 -1029
  30. data/test/cases/associations/callbacks_test.rb +192 -192
  31. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -188
  32. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -26
  33. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -36
  34. data/test/cases/associations/eager_load_nested_include_test.rb +128 -128
  35. data/test/cases/associations/eager_singularization_test.rb +148 -148
  36. data/test/cases/associations/eager_test.rb +1429 -1411
  37. data/test/cases/associations/extension_test.rb +82 -82
  38. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +972 -932
  39. data/test/cases/associations/has_many_associations_test.rb +2182 -2162
  40. data/test/cases/associations/has_many_through_associations_test.rb +1204 -1204
  41. data/test/cases/associations/has_one_associations_test.rb +610 -610
  42. data/test/cases/associations/has_one_through_associations_test.rb +380 -380
  43. data/test/cases/associations/inner_join_association_test.rb +139 -139
  44. data/test/cases/associations/inverse_associations_test.rb +706 -693
  45. data/test/cases/associations/join_model_test.rb +754 -754
  46. data/test/cases/associations/nested_through_associations_test.rb +579 -579
  47. data/test/cases/associations/required_test.rb +82 -82
  48. data/test/cases/associations_test.rb +380 -380
  49. data/test/cases/attribute_decorators_test.rb +125 -125
  50. data/test/cases/attribute_methods/read_test.rb +60 -60
  51. data/test/cases/attribute_methods/serialization_test.rb +29 -29
  52. data/test/cases/attribute_methods_test.rb +952 -952
  53. data/test/cases/attribute_set_test.rb +210 -200
  54. data/test/cases/attribute_test.rb +180 -180
  55. data/test/cases/attributes_test.rb +136 -136
  56. data/test/cases/autosave_association_test.rb +1595 -1595
  57. data/test/cases/base_test.rb +1664 -1638
  58. data/test/cases/batches_test.rb +212 -212
  59. data/test/cases/binary_test.rb +52 -52
  60. data/test/cases/bind_parameter_test.rb +100 -100
  61. data/test/cases/calculations_test.rb +646 -646
  62. data/test/cases/callbacks_test.rb +543 -543
  63. data/test/cases/clone_test.rb +40 -40
  64. data/test/cases/coders/yaml_column_test.rb +63 -63
  65. data/test/cases/column_alias_test.rb +17 -17
  66. data/test/cases/column_definition_test.rb +123 -123
  67. data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -54
  68. data/test/cases/connection_adapters/connection_handler_test.rb +53 -53
  69. data/test/cases/connection_adapters/connection_specification_test.rb +12 -12
  70. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -293
  71. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -65
  72. data/test/cases/connection_adapters/quoting_test.rb +13 -13
  73. data/test/cases/connection_adapters/schema_cache_test.rb +56 -56
  74. data/test/cases/connection_adapters/type_lookup_test.rb +110 -110
  75. data/test/cases/connection_management_test.rb +122 -122
  76. data/test/cases/connection_pool_test.rb +346 -346
  77. data/test/cases/connection_specification/resolver_test.rb +116 -116
  78. data/test/cases/core_test.rb +112 -112
  79. data/test/cases/counter_cache_test.rb +209 -209
  80. data/test/cases/custom_locking_test.rb +17 -17
  81. data/test/cases/database_statements_test.rb +19 -19
  82. data/test/cases/date_time_test.rb +61 -61
  83. data/test/cases/defaults_test.rb +223 -223
  84. data/test/cases/dirty_test.rb +785 -775
  85. data/test/cases/disconnected_test.rb +28 -28
  86. data/test/cases/dup_test.rb +157 -157
  87. data/test/cases/enum_test.rb +290 -290
  88. data/test/cases/explain_subscriber_test.rb +64 -64
  89. data/test/cases/explain_test.rb +76 -76
  90. data/test/cases/finder_respond_to_test.rb +60 -60
  91. data/test/cases/finder_test.rb +1169 -1166
  92. data/test/cases/fixture_set/file_test.rb +138 -138
  93. data/test/cases/fixtures_test.rb +908 -897
  94. data/test/cases/forbidden_attributes_protection_test.rb +99 -99
  95. data/test/cases/habtm_destroy_order_test.rb +61 -61
  96. data/test/cases/helper.rb +210 -210
  97. data/test/cases/hot_compatibility_test.rb +54 -54
  98. data/test/cases/i18n_test.rb +45 -45
  99. data/test/cases/inheritance_test.rb +375 -375
  100. data/test/cases/integration_test.rb +139 -139
  101. data/test/cases/invalid_connection_test.rb +22 -22
  102. data/test/cases/invalid_date_test.rb +32 -32
  103. data/test/cases/invertible_migration_test.rb +295 -295
  104. data/test/cases/json_serialization_test.rb +302 -302
  105. data/test/cases/locking_test.rb +477 -477
  106. data/test/cases/log_subscriber_test.rb +136 -136
  107. data/test/cases/migration/change_schema_test - Copy.rb +448 -448
  108. data/test/cases/migration/change_schema_test.rb +512 -472
  109. data/test/cases/migration/change_table_test.rb +224 -224
  110. data/test/cases/migration/column_attributes_test.rb +192 -192
  111. data/test/cases/migration/column_positioning_test.rb +56 -56
  112. data/test/cases/migration/columns_test.rb +304 -304
  113. data/test/cases/migration/command_recorder_test.rb +305 -305
  114. data/test/cases/migration/create_join_table_test.rb +148 -148
  115. data/test/cases/migration/foreign_key_test - Changed.rb +325 -325
  116. data/test/cases/migration/foreign_key_test.rb +328 -360
  117. data/test/cases/migration/helper.rb +39 -39
  118. data/test/cases/migration/index_test.rb +216 -216
  119. data/test/cases/migration/logger_test.rb +36 -36
  120. data/test/cases/migration/pending_migrations_test.rb +53 -53
  121. data/test/cases/migration/references_foreign_key_test.rb +169 -214
  122. data/test/cases/migration/references_index_test.rb +101 -101
  123. data/test/cases/migration/references_statements_test.rb +116 -116
  124. data/test/cases/migration/rename_table_test.rb +93 -93
  125. data/test/cases/migration/table_and_index_test.rb +24 -24
  126. data/test/cases/migration_test.rb +959 -959
  127. data/test/cases/migrator_test.rb +388 -388
  128. data/test/cases/mixin_test.rb +70 -70
  129. data/test/cases/modules_test.rb +173 -173
  130. data/test/cases/multiparameter_attributes_test.rb +350 -350
  131. data/test/cases/multiple_db_test.rb +115 -115
  132. data/test/cases/nested_attributes_test.rb +1070 -1057
  133. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -144
  134. data/test/cases/persistence_test.rb +909 -909
  135. data/test/cases/pooled_connections_test.rb +81 -81
  136. data/test/cases/primary_keys_test.rb +237 -237
  137. data/test/cases/query_cache_test.rb +326 -326
  138. data/test/cases/quoting_test.rb +156 -156
  139. data/test/cases/readonly_test.rb +118 -118
  140. data/test/cases/reaper_test.rb +85 -85
  141. data/test/cases/reflection_test.rb +463 -454
  142. data/test/cases/relation/delegation_test.rb +68 -68
  143. data/test/cases/relation/merging_test.rb +161 -161
  144. data/test/cases/relation/mutation_test.rb +165 -165
  145. data/test/cases/relation/predicate_builder_test.rb +14 -14
  146. data/test/cases/relation/where_chain_test.rb +181 -181
  147. data/test/cases/relation/where_test.rb +300 -300
  148. data/test/cases/relation/where_test2.rb +36 -36
  149. data/test/cases/relation_test.rb +319 -297
  150. data/test/cases/relations_test.rb +1815 -1815
  151. data/test/cases/reload_models_test.rb +22 -22
  152. data/test/cases/result_test.rb +80 -80
  153. data/test/cases/sanitize_test.rb +83 -83
  154. data/test/cases/schema_dumper_test.rb +463 -463
  155. data/test/cases/scoping/default_scoping_test.rb +454 -454
  156. data/test/cases/scoping/named_scoping_test.rb +524 -524
  157. data/test/cases/scoping/relation_scoping_test.rb +357 -357
  158. data/test/cases/serialization_test.rb +104 -104
  159. data/test/cases/serialized_attribute_test.rb +277 -277
  160. data/test/cases/statement_cache_test.rb +98 -98
  161. data/test/cases/store_test.rb +194 -194
  162. data/test/cases/tasks/database_tasks_test.rb +398 -396
  163. data/test/cases/tasks/mysql_rake_test.rb +324 -311
  164. data/test/cases/tasks/postgresql_rake_test.rb +250 -245
  165. data/test/cases/tasks/sqlite_rake_test.rb +193 -193
  166. data/test/cases/test_case.rb +123 -123
  167. data/test/cases/timestamp_test.rb +467 -468
  168. data/test/cases/transaction_callbacks_test.rb +452 -452
  169. data/test/cases/transaction_isolation_test.rb +106 -106
  170. data/test/cases/transactions_test.rb +817 -817
  171. data/test/cases/type/decimal_test.rb +56 -51
  172. data/test/cases/type/integer_test.rb +121 -121
  173. data/test/cases/type/string_test.rb +36 -36
  174. data/test/cases/type/type_map_test.rb +177 -177
  175. data/test/cases/type/unsigned_integer_test.rb +18 -18
  176. data/test/cases/types_test.rb +141 -141
  177. data/test/cases/unconnected_test.rb +33 -33
  178. data/test/cases/validations/association_validation_test.rb +86 -86
  179. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -84
  180. data/test/cases/validations/i18n_validation_test.rb +90 -90
  181. data/test/cases/validations/length_validation_test.rb +47 -47
  182. data/test/cases/validations/presence_validation_test.rb +68 -68
  183. data/test/cases/validations/uniqueness_validation_test.rb +457 -434
  184. data/test/cases/validations_repair_helper.rb +23 -23
  185. data/test/cases/validations_test.rb +165 -165
  186. data/test/cases/view_test.rb +119 -113
  187. data/test/cases/xml_serialization_test.rb +457 -457
  188. data/test/cases/yaml_serialization_test.rb +126 -86
  189. data/test/config.rb +5 -5
  190. data/test/config.yml +154 -154
  191. data/test/connections/native_ibm_db/connection.rb +43 -43
  192. data/test/fixtures/accounts.yml +29 -29
  193. data/test/fixtures/admin/accounts.yml +2 -2
  194. data/test/fixtures/admin/randomly_named_a9.yml +7 -7
  195. data/test/fixtures/admin/randomly_named_b0.yml +7 -7
  196. data/test/fixtures/admin/users.yml +10 -10
  197. data/test/fixtures/author_addresses.yml +17 -17
  198. data/test/fixtures/author_favorites.yml +3 -3
  199. data/test/fixtures/authors.yml +23 -23
  200. data/test/fixtures/binaries.yml +133 -133
  201. data/test/fixtures/books.yml +11 -11
  202. data/test/fixtures/bulbs.yml +5 -5
  203. data/test/fixtures/cars.yml +9 -9
  204. data/test/fixtures/categories.yml +19 -19
  205. data/test/fixtures/categories/special_categories.yml +9 -9
  206. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -4
  207. data/test/fixtures/categories_ordered.yml +7 -7
  208. data/test/fixtures/categories_posts.yml +31 -31
  209. data/test/fixtures/categorizations.yml +23 -23
  210. data/test/fixtures/clubs.yml +8 -8
  211. data/test/fixtures/collections.yml +3 -3
  212. data/test/fixtures/colleges.yml +3 -3
  213. data/test/fixtures/comments.yml +65 -65
  214. data/test/fixtures/companies.yml +67 -67
  215. data/test/fixtures/computers.yml +10 -10
  216. data/test/fixtures/courses.yml +8 -8
  217. data/test/fixtures/customers.yml +25 -25
  218. data/test/fixtures/dashboards.yml +6 -6
  219. data/test/fixtures/developers.yml +21 -21
  220. data/test/fixtures/developers_projects.yml +16 -16
  221. data/test/fixtures/dog_lovers.yml +7 -7
  222. data/test/fixtures/dogs.yml +4 -4
  223. data/test/fixtures/doubloons.yml +3 -3
  224. data/test/fixtures/edges.yml +5 -5
  225. data/test/fixtures/entrants.yml +14 -14
  226. data/test/fixtures/essays.yml +6 -6
  227. data/test/fixtures/faces.yml +11 -11
  228. data/test/fixtures/fk_test_has_fk.yml +3 -3
  229. data/test/fixtures/fk_test_has_pk.yml +1 -1
  230. data/test/fixtures/friendships.yml +4 -4
  231. data/test/fixtures/funny_jokes.yml +10 -10
  232. data/test/fixtures/interests.yml +33 -33
  233. data/test/fixtures/items.yml +3 -3
  234. data/test/fixtures/jobs.yml +7 -7
  235. data/test/fixtures/legacy_things.yml +3 -3
  236. data/test/fixtures/mateys.yml +4 -4
  237. data/test/fixtures/member_details.yml +8 -8
  238. data/test/fixtures/member_types.yml +6 -6
  239. data/test/fixtures/members.yml +11 -11
  240. data/test/fixtures/memberships.yml +34 -34
  241. data/test/fixtures/men.yml +5 -5
  242. data/test/fixtures/minimalistics.yml +2 -2
  243. data/test/fixtures/minivans.yml +5 -5
  244. data/test/fixtures/mixed_case_monkeys.yml +6 -6
  245. data/test/fixtures/mixins.yml +29 -29
  246. data/test/fixtures/movies.yml +7 -7
  247. data/test/fixtures/naked/csv/accounts.csv +1 -1
  248. data/test/fixtures/naked/yml/accounts.yml +1 -1
  249. data/test/fixtures/naked/yml/companies.yml +1 -1
  250. data/test/fixtures/naked/yml/courses.yml +1 -1
  251. data/test/fixtures/organizations.yml +5 -5
  252. data/test/fixtures/other_topics.yml +42 -42
  253. data/test/fixtures/owners.yml +9 -9
  254. data/test/fixtures/parrots.yml +27 -27
  255. data/test/fixtures/parrots_pirates.yml +7 -7
  256. data/test/fixtures/people.yml +24 -24
  257. data/test/fixtures/peoples_treasures.yml +3 -3
  258. data/test/fixtures/pets.yml +19 -19
  259. data/test/fixtures/pirates.yml +12 -12
  260. data/test/fixtures/posts.yml +80 -80
  261. data/test/fixtures/price_estimates.yml +7 -7
  262. data/test/fixtures/products.yml +4 -4
  263. data/test/fixtures/projects.yml +7 -7
  264. data/test/fixtures/randomly_named_a9.yml +7 -7
  265. data/test/fixtures/ratings.yml +14 -14
  266. data/test/fixtures/readers.yml +11 -11
  267. data/test/fixtures/references.yml +17 -17
  268. data/test/fixtures/reserved_words/distinct.yml +5 -5
  269. data/test/fixtures/reserved_words/distinct_select.yml +11 -11
  270. data/test/fixtures/reserved_words/group.yml +14 -14
  271. data/test/fixtures/reserved_words/select.yml +8 -8
  272. data/test/fixtures/reserved_words/values.yml +7 -7
  273. data/test/fixtures/ships.yml +6 -6
  274. data/test/fixtures/speedometers.yml +8 -8
  275. data/test/fixtures/sponsors.yml +12 -12
  276. data/test/fixtures/string_key_objects.yml +7 -7
  277. data/test/fixtures/subscribers.yml +10 -10
  278. data/test/fixtures/subscriptions.yml +12 -12
  279. data/test/fixtures/taggings.yml +78 -78
  280. data/test/fixtures/tags.yml +11 -11
  281. data/test/fixtures/tasks.yml +7 -7
  282. data/test/fixtures/teapots.yml +3 -3
  283. data/test/fixtures/to_be_linked/accounts.yml +2 -2
  284. data/test/fixtures/to_be_linked/users.yml +10 -10
  285. data/test/fixtures/topics.yml +49 -49
  286. data/test/fixtures/toys.yml +14 -14
  287. data/test/fixtures/traffic_lights.yml +9 -9
  288. data/test/fixtures/treasures.yml +10 -10
  289. data/test/fixtures/uuid_children.yml +3 -3
  290. data/test/fixtures/uuid_parents.yml +2 -2
  291. data/test/fixtures/variants.yml +4 -4
  292. data/test/fixtures/vegetables.yml +19 -19
  293. data/test/fixtures/vertices.yml +3 -3
  294. data/test/fixtures/warehouse_things.yml +2 -2
  295. data/test/fixtures/zines.yml +5 -5
  296. data/test/ibm_db_test.rb +24 -24
  297. data/test/migrations/10_urban/9_add_expressions.rb +11 -11
  298. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -15
  299. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -12
  300. data/test/migrations/missing/1000_people_have_middle_names.rb +8 -8
  301. data/test/migrations/missing/1_people_have_last_names.rb +8 -8
  302. data/test/migrations/missing/3_we_need_reminders.rb +11 -11
  303. data/test/migrations/missing/4_innocent_jointable.rb +11 -11
  304. data/test/migrations/rename/1_we_need_things.rb +10 -10
  305. data/test/migrations/rename/2_rename_things.rb +8 -8
  306. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -9
  307. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -9
  308. data/test/migrations/to_copy2/1_create_articles.rb +7 -7
  309. data/test/migrations/to_copy2/2_create_comments.rb +7 -7
  310. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -9
  311. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -9
  312. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -9
  313. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -7
  314. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -7
  315. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -9
  316. data/test/migrations/valid/2_we_need_reminders.rb +11 -11
  317. data/test/migrations/valid/3_innocent_jointable.rb +11 -11
  318. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -9
  319. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +11 -11
  320. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +11 -11
  321. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -9
  322. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -12
  323. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -12
  324. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -8
  325. data/test/models/admin.rb +4 -4
  326. data/test/models/admin/account.rb +2 -2
  327. data/test/models/admin/randomly_named_c1.rb +3 -3
  328. data/test/models/admin/user.rb +40 -40
  329. data/test/models/aircraft.rb +4 -4
  330. data/test/models/arunit2_model.rb +3 -3
  331. data/test/models/author.rb +212 -212
  332. data/test/models/auto_id.rb +4 -4
  333. data/test/models/autoloadable/extra_firm.rb +2 -2
  334. data/test/models/binary.rb +1 -1
  335. data/test/models/bird.rb +12 -12
  336. data/test/models/book.rb +18 -18
  337. data/test/models/boolean.rb +2 -2
  338. data/test/models/bulb.rb +51 -51
  339. data/test/models/cake_designer.rb +3 -3
  340. data/test/models/car.rb +26 -26
  341. data/test/models/carrier.rb +2 -2
  342. data/test/models/categorization.rb +19 -19
  343. data/test/models/category.rb +35 -35
  344. data/test/models/chef.rb +7 -3
  345. data/test/models/citation.rb +3 -3
  346. data/test/models/club.rb +23 -23
  347. data/test/models/college.rb +10 -10
  348. data/test/models/column.rb +3 -3
  349. data/test/models/column_name.rb +3 -3
  350. data/test/models/comment.rb +64 -64
  351. data/test/models/company.rb +228 -225
  352. data/test/models/company_in_module.rb +98 -98
  353. data/test/models/computer.rb +3 -3
  354. data/test/models/contact.rb +41 -41
  355. data/test/models/contract.rb +20 -20
  356. data/test/models/country.rb +7 -7
  357. data/test/models/course.rb +6 -6
  358. data/test/models/customer.rb +77 -77
  359. data/test/models/customer_carrier.rb +14 -14
  360. data/test/models/dashboard.rb +3 -3
  361. data/test/models/default.rb +2 -2
  362. data/test/models/department.rb +4 -4
  363. data/test/models/developer.rb +255 -252
  364. data/test/models/dog.rb +5 -5
  365. data/test/models/dog_lover.rb +5 -5
  366. data/test/models/doubloon.rb +12 -12
  367. data/test/models/drink_designer.rb +3 -3
  368. data/test/models/edge.rb +5 -5
  369. data/test/models/electron.rb +5 -5
  370. data/test/models/engine.rb +4 -4
  371. data/test/models/entrant.rb +3 -3
  372. data/test/models/essay.rb +5 -5
  373. data/test/models/event.rb +2 -2
  374. data/test/models/eye.rb +37 -37
  375. data/test/models/face.rb +9 -9
  376. data/test/models/friendship.rb +6 -6
  377. data/test/models/guid.rb +1 -1
  378. data/test/models/hotel.rb +9 -6
  379. data/test/models/image.rb +3 -3
  380. data/test/models/interest.rb +5 -5
  381. data/test/models/invoice.rb +4 -4
  382. data/test/models/item.rb +7 -7
  383. data/test/models/job.rb +7 -7
  384. data/test/models/joke.rb +7 -7
  385. data/test/models/keyboard.rb +3 -3
  386. data/test/models/legacy_thing.rb +3 -3
  387. data/test/models/lesson.rb +11 -11
  388. data/test/models/line_item.rb +3 -3
  389. data/test/models/liquid.rb +4 -4
  390. data/test/models/man.rb +11 -11
  391. data/test/models/matey.rb +4 -4
  392. data/test/models/member.rb +41 -41
  393. data/test/models/member_detail.rb +7 -7
  394. data/test/models/member_type.rb +3 -3
  395. data/test/models/membership.rb +35 -35
  396. data/test/models/minimalistic.rb +2 -2
  397. data/test/models/minivan.rb +9 -9
  398. data/test/models/mixed_case_monkey.rb +3 -3
  399. data/test/models/molecule.rb +6 -6
  400. data/test/models/movie.rb +5 -5
  401. data/test/models/order.rb +4 -4
  402. data/test/models/organization.rb +14 -14
  403. data/test/models/owner.rb +34 -34
  404. data/test/models/parrot.rb +29 -29
  405. data/test/models/person.rb +143 -143
  406. data/test/models/personal_legacy_thing.rb +4 -4
  407. data/test/models/pet.rb +15 -15
  408. data/test/models/pirate.rb +92 -92
  409. data/test/models/possession.rb +3 -3
  410. data/test/models/post.rb +264 -264
  411. data/test/models/price_estimate.rb +4 -4
  412. data/test/models/professor.rb +5 -5
  413. data/test/models/project.rb +31 -29
  414. data/test/models/publisher.rb +2 -2
  415. data/test/models/publisher/article.rb +4 -4
  416. data/test/models/publisher/magazine.rb +3 -3
  417. data/test/models/randomly_named_c1.rb +3 -3
  418. data/test/models/rating.rb +4 -4
  419. data/test/models/reader.rb +23 -23
  420. data/test/models/record.rb +2 -2
  421. data/test/models/reference.rb +22 -22
  422. data/test/models/reply.rb +61 -61
  423. data/test/models/ship.rb +33 -33
  424. data/test/models/ship_part.rb +7 -7
  425. data/test/models/shop.rb +17 -17
  426. data/test/models/shop_account.rb +6 -6
  427. data/test/models/speedometer.rb +6 -6
  428. data/test/models/sponsor.rb +7 -7
  429. data/test/models/string_key_object.rb +3 -3
  430. data/test/models/student.rb +4 -4
  431. data/test/models/subject.rb +16 -16
  432. data/test/models/subscriber.rb +8 -8
  433. data/test/models/subscription.rb +4 -4
  434. data/test/models/tag.rb +7 -7
  435. data/test/models/tagging.rb +13 -13
  436. data/test/models/task.rb +5 -5
  437. data/test/models/topic.rb +124 -124
  438. data/test/models/toy.rb +6 -6
  439. data/test/models/traffic_light.rb +4 -4
  440. data/test/models/treasure.rb +14 -14
  441. data/test/models/treaty.rb +7 -7
  442. data/test/models/tyre.rb +11 -11
  443. data/test/models/uuid_child.rb +3 -3
  444. data/test/models/uuid_parent.rb +3 -3
  445. data/test/models/vegetables.rb +24 -24
  446. data/test/models/vehicle.rb +6 -6
  447. data/test/models/vertex.rb +9 -9
  448. data/test/models/warehouse_thing.rb +5 -5
  449. data/test/models/wheel.rb +3 -3
  450. data/test/models/without_table.rb +3 -3
  451. data/test/models/zine.rb +3 -3
  452. data/test/schema/mysql2_specific_schema.rb +58 -58
  453. data/test/schema/mysql_specific_schema.rb +70 -70
  454. data/test/schema/oracle_specific_schema.rb +43 -43
  455. data/test/schema/postgresql_specific_schema.rb +202 -202
  456. data/test/schema/schema.rb +952 -938
  457. data/test/schema/sqlite_specific_schema.rb +21 -21
  458. data/test/support/config.rb +43 -43
  459. data/test/support/connection.rb +22 -22
  460. data/test/support/connection_helper.rb +14 -14
  461. data/test/support/ddl_helper.rb +8 -8
  462. data/test/support/schema_dumping_helper.rb +20 -20
  463. metadata +2 -2
@@ -1,19 +1,19 @@
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
+ # 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,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,223 @@
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 '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