ibm_db 3.0.0-x86-mingw32 → 3.0.1-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 (465) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +4 -0
  3. data/MANIFEST +14 -14
  4. data/README +225 -225
  5. data/ext/Makefile.nt32 +181 -181
  6. data/ext/Makefile.nt32.191 +212 -212
  7. data/ext/OLD/extconf.rb +264 -0
  8. data/ext/{extconf_MacOS.rb → OLD/extconf_MacOS.rb} +269 -269
  9. data/ext/extconf.rb +291 -264
  10. data/ext/ibm_db.c +2 -2
  11. data/ext/ruby_ibm_db.h +241 -241
  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 +4 -4
  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 +115 -115
  19. data/test/active_record/connection_adapters/fake_adapter.rb +46 -0
  20. data/test/assets/example.log +1 -0
  21. data/test/assets/flowers.jpg +0 -0
  22. data/test/assets/test.txt +1 -0
  23. data/test/cases/adapter_test.rb +261 -207
  24. data/test/cases/aggregations_test.rb +158 -0
  25. data/test/cases/ar_schema_test.rb +161 -0
  26. data/test/cases/associations/association_scope_test.rb +21 -0
  27. data/test/cases/associations/belongs_to_associations_test.rb +1029 -711
  28. data/test/cases/associations/callbacks_test.rb +192 -0
  29. data/test/cases/associations/cascaded_eager_loading_test.rb +188 -181
  30. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +26 -0
  31. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +36 -0
  32. data/test/cases/associations/eager_load_nested_include_test.rb +128 -0
  33. data/test/cases/associations/eager_singularization_test.rb +148 -0
  34. data/test/cases/associations/eager_test.rb +1411 -0
  35. data/test/cases/associations/extension_test.rb +82 -0
  36. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +932 -851
  37. data/test/cases/associations/has_many_associations_test.rb +2162 -0
  38. data/test/cases/associations/has_many_through_associations_test.rb +1204 -0
  39. data/test/cases/associations/has_one_associations_test.rb +610 -0
  40. data/test/cases/associations/has_one_through_associations_test.rb +380 -0
  41. data/test/cases/associations/inner_join_association_test.rb +139 -0
  42. data/test/cases/associations/inverse_associations_test.rb +693 -0
  43. data/test/cases/associations/join_model_test.rb +754 -743
  44. data/test/cases/associations/nested_through_associations_test.rb +579 -0
  45. data/test/cases/associations/required_test.rb +82 -0
  46. data/test/cases/associations_test.rb +380 -0
  47. data/test/cases/attribute_decorators_test.rb +125 -0
  48. data/test/cases/attribute_methods/read_test.rb +60 -0
  49. data/test/cases/attribute_methods/serialization_test.rb +29 -0
  50. data/test/cases/attribute_methods_test.rb +952 -822
  51. data/test/cases/attribute_set_test.rb +200 -0
  52. data/test/cases/attribute_test.rb +180 -0
  53. data/test/cases/attributes_test.rb +136 -0
  54. data/test/cases/autosave_association_test.rb +1595 -0
  55. data/test/cases/base_test.rb +1638 -2133
  56. data/test/cases/batches_test.rb +212 -0
  57. data/test/cases/binary_test.rb +52 -0
  58. data/test/cases/bind_parameter_test.rb +100 -0
  59. data/test/cases/calculations_test.rb +646 -482
  60. data/test/cases/callbacks_test.rb +543 -0
  61. data/test/cases/clone_test.rb +40 -0
  62. data/test/cases/coders/yaml_column_test.rb +63 -0
  63. data/test/cases/column_alias_test.rb +17 -0
  64. data/test/cases/column_definition_test.rb +123 -0
  65. data/test/cases/connection_adapters/adapter_leasing_test.rb +54 -0
  66. data/test/cases/connection_adapters/connection_handler_test.rb +53 -0
  67. data/test/cases/connection_adapters/connection_specification_test.rb +12 -0
  68. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +293 -0
  69. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +65 -0
  70. data/test/cases/connection_adapters/quoting_test.rb +13 -0
  71. data/test/cases/connection_adapters/schema_cache_test.rb +56 -0
  72. data/test/cases/connection_adapters/type_lookup_test.rb +110 -0
  73. data/test/cases/connection_management_test.rb +122 -0
  74. data/test/cases/connection_pool_test.rb +346 -0
  75. data/test/cases/connection_specification/resolver_test.rb +116 -0
  76. data/test/cases/core_test.rb +112 -0
  77. data/test/cases/counter_cache_test.rb +209 -0
  78. data/test/cases/custom_locking_test.rb +17 -0
  79. data/test/cases/database_statements_test.rb +19 -0
  80. data/test/cases/date_time_test.rb +61 -0
  81. data/test/cases/defaults_test.rb +223 -0
  82. data/test/cases/dirty_test.rb +775 -0
  83. data/test/cases/disconnected_test.rb +28 -0
  84. data/test/cases/dup_test.rb +157 -0
  85. data/test/cases/enum_test.rb +290 -0
  86. data/test/cases/explain_subscriber_test.rb +64 -0
  87. data/test/cases/explain_test.rb +76 -0
  88. data/test/cases/finder_respond_to_test.rb +60 -0
  89. data/test/cases/finder_test.rb +1166 -0
  90. data/test/cases/fixture_set/file_test.rb +138 -0
  91. data/test/cases/fixtures_test.rb +897 -0
  92. data/test/cases/forbidden_attributes_protection_test.rb +99 -0
  93. data/test/cases/habtm_destroy_order_test.rb +61 -0
  94. data/test/cases/helper.rb +210 -0
  95. data/test/cases/hot_compatibility_test.rb +54 -0
  96. data/test/cases/i18n_test.rb +45 -0
  97. data/test/cases/inheritance_test.rb +375 -0
  98. data/test/cases/integration_test.rb +139 -0
  99. data/test/cases/invalid_connection_test.rb +22 -0
  100. data/test/cases/invalid_date_test.rb +32 -0
  101. data/test/cases/invertible_migration_test.rb +295 -0
  102. data/test/cases/json_serialization_test.rb +302 -0
  103. data/test/cases/locking_test.rb +477 -0
  104. data/test/cases/log_subscriber_test.rb +136 -0
  105. data/test/cases/migration/change_schema_test - Copy.rb +448 -0
  106. data/test/cases/migration/change_schema_test.rb +472 -0
  107. data/test/cases/migration/change_table_test.rb +224 -0
  108. data/test/cases/migration/column_attributes_test.rb +192 -0
  109. data/test/cases/migration/column_positioning_test.rb +56 -0
  110. data/test/cases/migration/columns_test.rb +304 -0
  111. data/test/cases/migration/command_recorder_test.rb +305 -0
  112. data/test/cases/migration/create_join_table_test.rb +148 -0
  113. data/test/cases/migration/foreign_key_test - Changed.rb +325 -0
  114. data/test/cases/migration/foreign_key_test.rb +360 -0
  115. data/test/cases/migration/helper.rb +39 -0
  116. data/test/cases/migration/index_test.rb +216 -0
  117. data/test/cases/migration/logger_test.rb +36 -0
  118. data/test/cases/migration/pending_migrations_test.rb +53 -0
  119. data/test/cases/migration/references_foreign_key_test.rb +214 -0
  120. data/test/cases/migration/references_index_test.rb +101 -0
  121. data/test/cases/migration/references_statements_test.rb +116 -0
  122. data/test/cases/migration/rename_table_test.rb +93 -0
  123. data/test/cases/migration/table_and_index_test.rb +24 -0
  124. data/test/cases/migration_test.rb +959 -2408
  125. data/test/cases/migrator_test.rb +388 -0
  126. data/test/cases/mixin_test.rb +70 -0
  127. data/test/cases/modules_test.rb +173 -0
  128. data/test/cases/multiparameter_attributes_test.rb +350 -0
  129. data/test/cases/multiple_db_test.rb +115 -0
  130. data/test/cases/nested_attributes_test.rb +1057 -0
  131. data/test/cases/nested_attributes_with_callbacks_test.rb +144 -0
  132. data/test/cases/persistence_test.rb +909 -642
  133. data/test/cases/pooled_connections_test.rb +81 -0
  134. data/test/cases/primary_keys_test.rb +237 -0
  135. data/test/cases/query_cache_test.rb +326 -257
  136. data/test/cases/quoting_test.rb +156 -0
  137. data/test/cases/readonly_test.rb +118 -0
  138. data/test/cases/reaper_test.rb +85 -0
  139. data/test/cases/reflection_test.rb +454 -0
  140. data/test/cases/relation/delegation_test.rb +68 -0
  141. data/test/cases/relation/merging_test.rb +161 -0
  142. data/test/cases/relation/mutation_test.rb +165 -0
  143. data/test/cases/relation/predicate_builder_test.rb +14 -0
  144. data/test/cases/relation/where_chain_test.rb +181 -0
  145. data/test/cases/relation/where_test.rb +300 -0
  146. data/test/cases/relation/where_test2.rb +36 -0
  147. data/test/cases/relation_test.rb +297 -0
  148. data/test/cases/relations_test.rb +1815 -1182
  149. data/test/cases/reload_models_test.rb +22 -0
  150. data/test/cases/result_test.rb +80 -0
  151. data/test/cases/sanitize_test.rb +83 -0
  152. data/test/cases/schema_dumper_test.rb +463 -256
  153. data/test/cases/scoping/default_scoping_test.rb +454 -0
  154. data/test/cases/scoping/named_scoping_test.rb +524 -0
  155. data/test/cases/scoping/relation_scoping_test.rb +357 -0
  156. data/test/cases/serialization_test.rb +104 -0
  157. data/test/cases/serialized_attribute_test.rb +277 -0
  158. data/test/cases/statement_cache_test.rb +98 -0
  159. data/test/cases/store_test.rb +194 -0
  160. data/test/cases/tasks/database_tasks_test.rb +396 -0
  161. data/test/cases/tasks/mysql_rake_test.rb +311 -0
  162. data/test/cases/tasks/postgresql_rake_test.rb +245 -0
  163. data/test/cases/tasks/sqlite_rake_test.rb +193 -0
  164. data/test/cases/test_case.rb +123 -0
  165. data/test/cases/timestamp_test.rb +468 -0
  166. data/test/cases/transaction_callbacks_test.rb +452 -300
  167. data/test/cases/transaction_isolation_test.rb +106 -0
  168. data/test/cases/transactions_test.rb +817 -0
  169. data/test/cases/type/decimal_test.rb +51 -0
  170. data/test/cases/type/integer_test.rb +121 -0
  171. data/test/cases/type/string_test.rb +36 -0
  172. data/test/cases/type/type_map_test.rb +177 -0
  173. data/test/cases/type/unsigned_integer_test.rb +18 -0
  174. data/test/cases/types_test.rb +141 -0
  175. data/test/cases/unconnected_test.rb +33 -0
  176. data/test/cases/validations/association_validation_test.rb +86 -0
  177. data/test/cases/validations/i18n_generate_message_validation_test.rb +84 -0
  178. data/test/cases/validations/i18n_validation_test.rb +90 -0
  179. data/test/cases/validations/length_validation_test.rb +47 -0
  180. data/test/cases/validations/presence_validation_test.rb +68 -0
  181. data/test/cases/validations/uniqueness_validation_test.rb +434 -299
  182. data/test/cases/validations_repair_helper.rb +23 -0
  183. data/test/cases/validations_test.rb +165 -0
  184. data/test/cases/view_test.rb +113 -0
  185. data/test/cases/xml_serialization_test.rb +457 -408
  186. data/test/cases/yaml_serialization_test.rb +86 -0
  187. data/test/config.rb +5 -0
  188. data/test/config.yml +154 -154
  189. data/test/connections/native_ibm_db/connection.rb +43 -43
  190. data/test/fixtures/accounts.yml +29 -0
  191. data/test/fixtures/admin/accounts.yml +2 -0
  192. data/test/fixtures/admin/randomly_named_a9.yml +7 -0
  193. data/test/fixtures/admin/randomly_named_b0.yml +7 -0
  194. data/test/fixtures/admin/users.yml +10 -0
  195. data/test/fixtures/all/admin +1 -0
  196. data/test/fixtures/all/developers.yml +0 -0
  197. data/test/fixtures/all/people.yml +0 -0
  198. data/test/fixtures/all/tasks.yml +0 -0
  199. data/test/fixtures/author_addresses.yml +18 -0
  200. data/test/fixtures/author_favorites.yml +4 -0
  201. data/test/fixtures/authors.yml +23 -0
  202. data/test/fixtures/binaries.yml +133 -0
  203. data/test/fixtures/books.yml +11 -0
  204. data/test/fixtures/bulbs.yml +5 -0
  205. data/test/fixtures/cars.yml +9 -0
  206. data/test/fixtures/categories.yml +19 -0
  207. data/test/fixtures/categories/special_categories.yml +9 -0
  208. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +4 -0
  209. data/test/fixtures/categories_ordered.yml +7 -0
  210. data/test/fixtures/categories_posts.yml +31 -0
  211. data/test/fixtures/categorizations.yml +23 -0
  212. data/test/fixtures/clubs.yml +8 -0
  213. data/test/fixtures/collections.yml +3 -0
  214. data/test/fixtures/colleges.yml +3 -0
  215. data/test/fixtures/comments.yml +65 -0
  216. data/test/fixtures/companies.yml +67 -0
  217. data/test/fixtures/computers.yml +10 -0
  218. data/test/fixtures/courses.yml +8 -0
  219. data/test/fixtures/customers.yml +26 -0
  220. data/test/fixtures/dashboards.yml +6 -0
  221. data/test/fixtures/developers.yml +22 -0
  222. data/test/fixtures/developers_projects.yml +17 -0
  223. data/test/fixtures/dog_lovers.yml +7 -0
  224. data/test/fixtures/dogs.yml +4 -0
  225. data/test/fixtures/doubloons.yml +3 -0
  226. data/test/fixtures/edges.yml +5 -0
  227. data/test/fixtures/entrants.yml +14 -0
  228. data/test/fixtures/essays.yml +6 -0
  229. data/test/fixtures/faces.yml +11 -0
  230. data/test/fixtures/fk_test_has_fk.yml +3 -0
  231. data/test/fixtures/fk_test_has_pk.yml +2 -0
  232. data/test/fixtures/friendships.yml +4 -0
  233. data/test/fixtures/funny_jokes.yml +10 -0
  234. data/test/fixtures/interests.yml +33 -0
  235. data/test/fixtures/items.yml +3 -0
  236. data/test/fixtures/jobs.yml +7 -0
  237. data/test/fixtures/legacy_things.yml +3 -0
  238. data/test/fixtures/mateys.yml +4 -0
  239. data/test/fixtures/member_details.yml +8 -0
  240. data/test/fixtures/member_types.yml +6 -0
  241. data/test/fixtures/members.yml +11 -0
  242. data/test/fixtures/memberships.yml +34 -0
  243. data/test/fixtures/men.yml +5 -0
  244. data/test/fixtures/minimalistics.yml +2 -0
  245. data/test/fixtures/minivans.yml +5 -0
  246. data/test/fixtures/mixed_case_monkeys.yml +6 -0
  247. data/test/fixtures/mixins.yml +29 -0
  248. data/test/fixtures/movies.yml +7 -0
  249. data/test/fixtures/naked/csv/accounts.csv +1 -0
  250. data/test/fixtures/naked/yml/accounts.yml +1 -0
  251. data/test/fixtures/naked/yml/companies.yml +1 -0
  252. data/test/fixtures/naked/yml/courses.yml +1 -0
  253. data/test/fixtures/organizations.yml +5 -0
  254. data/test/fixtures/other_topics.yml +42 -0
  255. data/test/fixtures/owners.yml +9 -0
  256. data/test/fixtures/parrots.yml +27 -0
  257. data/test/fixtures/parrots_pirates.yml +7 -0
  258. data/test/fixtures/people.yml +24 -0
  259. data/test/fixtures/peoples_treasures.yml +3 -0
  260. data/test/fixtures/pets.yml +19 -0
  261. data/test/fixtures/pirates.yml +12 -0
  262. data/test/fixtures/posts.yml +80 -0
  263. data/test/fixtures/price_estimates.yml +7 -0
  264. data/test/fixtures/products.yml +4 -0
  265. data/test/fixtures/projects.yml +7 -0
  266. data/test/fixtures/randomly_named_a9.yml +7 -0
  267. data/test/fixtures/ratings.yml +14 -0
  268. data/test/fixtures/readers.yml +11 -0
  269. data/test/fixtures/references.yml +17 -0
  270. data/test/fixtures/reserved_words/distinct.yml +5 -0
  271. data/test/fixtures/reserved_words/distinct_select.yml +11 -0
  272. data/test/fixtures/reserved_words/group.yml +14 -0
  273. data/test/fixtures/reserved_words/select.yml +8 -0
  274. data/test/fixtures/reserved_words/values.yml +7 -0
  275. data/test/fixtures/ships.yml +6 -0
  276. data/test/fixtures/speedometers.yml +8 -0
  277. data/test/fixtures/sponsors.yml +12 -0
  278. data/test/fixtures/string_key_objects.yml +7 -0
  279. data/test/fixtures/subscribers.yml +11 -0
  280. data/test/fixtures/subscriptions.yml +12 -0
  281. data/test/fixtures/taggings.yml +78 -0
  282. data/test/fixtures/tags.yml +11 -0
  283. data/test/fixtures/tasks.yml +7 -0
  284. data/test/fixtures/teapots.yml +3 -0
  285. data/test/fixtures/to_be_linked/accounts.yml +2 -0
  286. data/test/fixtures/to_be_linked/users.yml +10 -0
  287. data/test/fixtures/topics.yml +49 -0
  288. data/test/fixtures/toys.yml +14 -0
  289. data/test/fixtures/traffic_lights.yml +10 -0
  290. data/test/fixtures/treasures.yml +10 -0
  291. data/test/fixtures/uuid_children.yml +3 -0
  292. data/test/fixtures/uuid_parents.yml +2 -0
  293. data/test/fixtures/variants.yml +4 -0
  294. data/test/fixtures/vegetables.yml +20 -0
  295. data/test/fixtures/vertices.yml +4 -0
  296. data/test/fixtures/warehouse_things.yml +3 -0
  297. data/test/fixtures/zines.yml +5 -0
  298. data/test/ibm_db_test.rb +24 -24
  299. data/test/migrations/10_urban/9_add_expressions.rb +11 -0
  300. data/test/migrations/decimal/1_give_me_big_numbers.rb +15 -0
  301. data/test/migrations/magic/1_currencies_have_symbols.rb +12 -0
  302. data/test/migrations/missing/1000_people_have_middle_names.rb +9 -0
  303. data/test/migrations/missing/1_people_have_last_names.rb +9 -0
  304. data/test/migrations/missing/3_we_need_reminders.rb +12 -0
  305. data/test/migrations/missing/4_innocent_jointable.rb +12 -0
  306. data/test/migrations/rename/1_we_need_things.rb +11 -0
  307. data/test/migrations/rename/2_rename_things.rb +9 -0
  308. data/test/migrations/to_copy/1_people_have_hobbies.rb +9 -0
  309. data/test/migrations/to_copy/2_people_have_descriptions.rb +9 -0
  310. data/test/migrations/to_copy2/1_create_articles.rb +7 -0
  311. data/test/migrations/to_copy2/2_create_comments.rb +7 -0
  312. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +9 -0
  313. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +9 -0
  314. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +9 -0
  315. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +7 -0
  316. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +7 -0
  317. data/test/migrations/valid/1_valid_people_have_last_names.rb +9 -0
  318. data/test/migrations/valid/2_we_need_reminders.rb +12 -0
  319. data/test/migrations/valid/3_innocent_jointable.rb +12 -0
  320. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +9 -0
  321. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +12 -0
  322. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +12 -0
  323. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +9 -0
  324. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +12 -0
  325. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +12 -0
  326. data/test/migrations/version_check/20131219224947_migration_version_check.rb +8 -0
  327. data/test/models/admin.rb +5 -0
  328. data/test/models/admin/account.rb +3 -0
  329. data/test/models/admin/randomly_named_c1.rb +3 -0
  330. data/test/models/admin/user.rb +40 -0
  331. data/test/models/aircraft.rb +4 -0
  332. data/test/models/arunit2_model.rb +3 -0
  333. data/test/models/author.rb +212 -0
  334. data/test/models/auto_id.rb +4 -0
  335. data/test/models/autoloadable/extra_firm.rb +2 -0
  336. data/test/models/binary.rb +2 -0
  337. data/test/models/bird.rb +12 -0
  338. data/test/models/book.rb +18 -0
  339. data/test/models/boolean.rb +2 -0
  340. data/test/models/bulb.rb +51 -0
  341. data/test/models/cake_designer.rb +3 -0
  342. data/test/models/car.rb +26 -0
  343. data/test/models/carrier.rb +2 -0
  344. data/test/models/categorization.rb +19 -0
  345. data/test/models/category.rb +35 -0
  346. data/test/models/chef.rb +3 -0
  347. data/test/models/citation.rb +3 -0
  348. data/test/models/club.rb +23 -0
  349. data/test/models/college.rb +10 -0
  350. data/test/models/column.rb +3 -0
  351. data/test/models/column_name.rb +3 -0
  352. data/test/models/comment.rb +64 -0
  353. data/test/models/company.rb +225 -0
  354. data/test/models/company_in_module.rb +98 -0
  355. data/test/models/computer.rb +3 -0
  356. data/test/models/contact.rb +41 -0
  357. data/test/models/contract.rb +20 -0
  358. data/test/models/country.rb +7 -0
  359. data/test/models/course.rb +6 -0
  360. data/test/models/customer.rb +77 -0
  361. data/test/models/customer_carrier.rb +14 -0
  362. data/test/models/dashboard.rb +3 -0
  363. data/test/models/default.rb +2 -0
  364. data/test/models/department.rb +4 -0
  365. data/test/models/developer.rb +252 -0
  366. data/test/models/dog.rb +5 -0
  367. data/test/models/dog_lover.rb +5 -0
  368. data/test/models/doubloon.rb +12 -0
  369. data/test/models/drink_designer.rb +3 -0
  370. data/test/models/edge.rb +5 -0
  371. data/test/models/electron.rb +5 -0
  372. data/test/models/engine.rb +4 -0
  373. data/test/models/entrant.rb +3 -0
  374. data/test/models/essay.rb +5 -0
  375. data/test/models/event.rb +3 -0
  376. data/test/models/eye.rb +37 -0
  377. data/test/models/face.rb +9 -0
  378. data/test/models/friendship.rb +6 -0
  379. data/test/models/guid.rb +2 -0
  380. data/test/models/hotel.rb +6 -0
  381. data/test/models/image.rb +3 -0
  382. data/test/models/interest.rb +5 -0
  383. data/test/models/invoice.rb +4 -0
  384. data/test/models/item.rb +7 -0
  385. data/test/models/job.rb +7 -0
  386. data/test/models/joke.rb +7 -0
  387. data/test/models/keyboard.rb +3 -0
  388. data/test/models/legacy_thing.rb +3 -0
  389. data/test/models/lesson.rb +11 -0
  390. data/test/models/line_item.rb +3 -0
  391. data/test/models/liquid.rb +4 -0
  392. data/test/models/man.rb +11 -0
  393. data/test/models/matey.rb +4 -0
  394. data/test/models/member.rb +41 -0
  395. data/test/models/member_detail.rb +7 -0
  396. data/test/models/member_type.rb +3 -0
  397. data/test/models/membership.rb +35 -0
  398. data/test/models/minimalistic.rb +2 -0
  399. data/test/models/minivan.rb +9 -0
  400. data/test/models/mixed_case_monkey.rb +3 -0
  401. data/test/models/molecule.rb +6 -0
  402. data/test/models/movie.rb +5 -0
  403. data/test/models/order.rb +4 -0
  404. data/test/models/organization.rb +14 -0
  405. data/test/models/owner.rb +34 -0
  406. data/test/models/parrot.rb +29 -0
  407. data/test/models/person.rb +143 -0
  408. data/test/models/personal_legacy_thing.rb +4 -0
  409. data/test/models/pet.rb +15 -0
  410. data/test/models/pirate.rb +92 -0
  411. data/test/models/possession.rb +3 -0
  412. data/test/models/post.rb +264 -0
  413. data/test/models/price_estimate.rb +4 -0
  414. data/test/models/professor.rb +5 -0
  415. data/test/models/project.rb +29 -0
  416. data/test/models/publisher.rb +2 -0
  417. data/test/models/publisher/article.rb +4 -0
  418. data/test/models/publisher/magazine.rb +3 -0
  419. data/test/models/randomly_named_c1.rb +3 -0
  420. data/test/models/rating.rb +4 -0
  421. data/test/models/reader.rb +23 -0
  422. data/test/models/record.rb +2 -0
  423. data/test/models/reference.rb +22 -0
  424. data/test/models/reply.rb +61 -0
  425. data/test/models/ship.rb +33 -0
  426. data/test/models/ship_part.rb +8 -0
  427. data/test/models/shop.rb +17 -0
  428. data/test/models/shop_account.rb +6 -0
  429. data/test/models/speedometer.rb +6 -0
  430. data/test/models/sponsor.rb +7 -0
  431. data/test/models/string_key_object.rb +3 -0
  432. data/test/models/student.rb +4 -0
  433. data/test/models/subject.rb +16 -0
  434. data/test/models/subscriber.rb +8 -0
  435. data/test/models/subscription.rb +4 -0
  436. data/test/models/tag.rb +7 -0
  437. data/test/models/tagging.rb +13 -0
  438. data/test/models/task.rb +5 -0
  439. data/test/models/topic.rb +124 -0
  440. data/test/models/toy.rb +6 -0
  441. data/test/models/traffic_light.rb +4 -0
  442. data/test/models/treasure.rb +14 -0
  443. data/test/models/treaty.rb +7 -0
  444. data/test/models/tyre.rb +11 -0
  445. data/test/models/uuid_child.rb +3 -0
  446. data/test/models/uuid_parent.rb +3 -0
  447. data/test/models/vegetables.rb +24 -0
  448. data/test/models/vehicle.rb +7 -0
  449. data/test/models/vertex.rb +9 -0
  450. data/test/models/warehouse_thing.rb +5 -5
  451. data/test/models/wheel.rb +3 -0
  452. data/test/models/without_table.rb +3 -0
  453. data/test/models/zine.rb +3 -0
  454. data/test/schema/mysql2_specific_schema.rb +58 -0
  455. data/test/schema/mysql_specific_schema.rb +70 -0
  456. data/test/schema/oracle_specific_schema.rb +43 -0
  457. data/test/schema/postgresql_specific_schema.rb +202 -0
  458. data/test/schema/schema.rb +938 -751
  459. data/test/schema/sqlite_specific_schema.rb +22 -0
  460. data/test/support/config.rb +43 -0
  461. data/test/support/connection.rb +22 -0
  462. data/test/support/connection_helper.rb +14 -0
  463. data/test/support/ddl_helper.rb +8 -0
  464. data/test/support/schema_dumping_helper.rb +20 -0
  465. metadata +444 -18
@@ -0,0 +1,99 @@
1
+ require 'cases/helper'
2
+ require 'active_support/core_ext/hash/indifferent_access'
3
+ require 'models/person'
4
+ require 'models/company'
5
+
6
+ class ProtectedParams < ActiveSupport::HashWithIndifferentAccess
7
+ attr_accessor :permitted
8
+ alias :permitted? :permitted
9
+
10
+ def initialize(attributes)
11
+ super(attributes)
12
+ @permitted = false
13
+ end
14
+
15
+ def permit!
16
+ @permitted = true
17
+ self
18
+ end
19
+
20
+ def dup
21
+ super.tap do |duplicate|
22
+ duplicate.instance_variable_set :@permitted, @permitted
23
+ end
24
+ end
25
+ end
26
+
27
+ class ForbiddenAttributesProtectionTest < ActiveRecord::TestCase
28
+ def test_forbidden_attributes_cannot_be_used_for_mass_assignment
29
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
30
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
31
+ Person.new(params)
32
+ end
33
+ end
34
+
35
+ def test_permitted_attributes_can_be_used_for_mass_assignment
36
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
37
+ params.permit!
38
+ person = Person.new(params)
39
+
40
+ assert_equal 'Guille', person.first_name
41
+ assert_equal 'm', person.gender
42
+ end
43
+
44
+ def test_forbidden_attributes_cannot_be_used_for_sti_inheritance_column
45
+ params = ProtectedParams.new(type: 'Client')
46
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
47
+ Company.new(params)
48
+ end
49
+ end
50
+
51
+ def test_permitted_attributes_can_be_used_for_sti_inheritance_column
52
+ params = ProtectedParams.new(type: 'Client')
53
+ params.permit!
54
+ person = Company.new(params)
55
+ assert_equal person.class, Client
56
+ end
57
+
58
+ def test_regular_hash_should_still_be_used_for_mass_assignment
59
+ person = Person.new(first_name: 'Guille', gender: 'm')
60
+
61
+ assert_equal 'Guille', person.first_name
62
+ assert_equal 'm', person.gender
63
+ end
64
+
65
+ def test_blank_attributes_should_not_raise
66
+ person = Person.new
67
+ assert_nil person.assign_attributes(ProtectedParams.new({}))
68
+ end
69
+
70
+ def test_create_with_checks_permitted
71
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
72
+
73
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
74
+ Person.create_with(params).create!
75
+ end
76
+ end
77
+
78
+ def test_create_with_works_with_params_values
79
+ params = ProtectedParams.new(first_name: 'Guille')
80
+
81
+ person = Person.create_with(first_name: params[:first_name]).create!
82
+ assert_equal 'Guille', person.first_name
83
+ end
84
+
85
+ def test_where_checks_permitted
86
+ params = ProtectedParams.new(first_name: 'Guille', gender: 'm')
87
+
88
+ assert_raises(ActiveModel::ForbiddenAttributesError) do
89
+ Person.where(params).create!
90
+ end
91
+ end
92
+
93
+ def test_where_works_with_params_values
94
+ params = ProtectedParams.new(first_name: 'Guille')
95
+
96
+ person = Person.where(first_name: params[:first_name]).create!
97
+ assert_equal 'Guille', person.first_name
98
+ end
99
+ end
@@ -0,0 +1,61 @@
1
+ require "cases/helper"
2
+ require "models/lesson"
3
+ require "models/student"
4
+
5
+ class HabtmDestroyOrderTest < ActiveRecord::TestCase
6
+ test "may not delete a lesson with students" do
7
+ sicp = Lesson.new(:name => "SICP")
8
+ ben = Student.new(:name => "Ben Bitdiddle")
9
+ sicp.students << ben
10
+ sicp.save!
11
+ assert_raises LessonError do
12
+ assert_no_difference('Lesson.count') do
13
+ sicp.destroy
14
+ end
15
+ end
16
+ assert !sicp.destroyed?
17
+ end
18
+
19
+ test 'should not raise error if have foreign key in the join table' do
20
+ student = Student.new(:name => "Ben Bitdiddle")
21
+ lesson = Lesson.new(:name => "SICP")
22
+ lesson.students << student
23
+ lesson.save!
24
+ assert_nothing_raised do
25
+ student.destroy
26
+ end
27
+ end
28
+
29
+ test "not destroying a student with lessons leaves student<=>lesson association intact" do
30
+ # test a normal before_destroy doesn't destroy the habtm joins
31
+ begin
32
+ sicp = Lesson.new(:name => "SICP")
33
+ ben = Student.new(:name => "Ben Bitdiddle")
34
+ # add a before destroy to student
35
+ Student.class_eval do
36
+ before_destroy do
37
+ raise ActiveRecord::Rollback unless lessons.empty?
38
+ end
39
+ end
40
+ ben.lessons << sicp
41
+ ben.save!
42
+ ben.destroy
43
+ assert !ben.reload.lessons.empty?
44
+ ensure
45
+ # get rid of it so Student is still like it was
46
+ Student.reset_callbacks(:destroy)
47
+ end
48
+ end
49
+
50
+ test "not destroying a lesson with students leaves student<=>lesson association intact" do
51
+ # test a more aggressive before_destroy doesn't destroy the habtm joins and still throws the exception
52
+ sicp = Lesson.new(:name => "SICP")
53
+ ben = Student.new(:name => "Ben Bitdiddle")
54
+ sicp.students << ben
55
+ sicp.save!
56
+ assert_raises LessonError do
57
+ sicp.destroy
58
+ end
59
+ assert !sicp.reload.students.empty?
60
+ end
61
+ end
@@ -0,0 +1,210 @@
1
+ require File.expand_path('../../../../load_paths', __FILE__)
2
+
3
+ require 'config'
4
+
5
+ require 'active_support/testing/autorun'
6
+ require 'stringio'
7
+
8
+ require 'active_record'
9
+ require 'cases/test_case'
10
+ require 'active_support/dependencies'
11
+ require 'active_support/logger'
12
+ require 'active_support/core_ext/string/strip'
13
+
14
+ require 'support/config'
15
+ require 'support/connection'
16
+
17
+ # TODO: Move all these random hacks into the ARTest namespace and into the support/ dir
18
+
19
+ Thread.abort_on_exception = true
20
+
21
+ # Show backtraces for deprecated behavior for quicker cleanup.
22
+ ActiveSupport::Deprecation.debug = true
23
+
24
+ # Disable available locale checks to avoid warnings running the test suite.
25
+ I18n.enforce_available_locales = false
26
+
27
+ # Enable raise errors in after_commit and after_rollback.
28
+ ActiveRecord::Base.raise_in_transactional_callbacks = true
29
+
30
+ # Connect to the database
31
+ ARTest.connect
32
+
33
+ # Quote "type" if it's a reserved word for the current connection.
34
+ QUOTED_TYPE = ActiveRecord::Base.connection.quote_column_name('type')
35
+
36
+ def current_adapter?(*types)
37
+ types.any? do |type|
38
+ ActiveRecord::ConnectionAdapters.const_defined?(type) &&
39
+ ActiveRecord::Base.connection.is_a?(ActiveRecord::ConnectionAdapters.const_get(type))
40
+ end
41
+ end
42
+
43
+ def in_memory_db?
44
+ current_adapter?(:SQLite3Adapter) &&
45
+ ActiveRecord::Base.connection_pool.spec.config[:database] == ":memory:"
46
+ end
47
+
48
+ def mysql_56?
49
+ current_adapter?(:Mysql2Adapter) &&
50
+ ActiveRecord::Base.connection.send(:version).join(".") >= "5.6.0"
51
+ end
52
+
53
+ def mysql_enforcing_gtid_consistency?
54
+ current_adapter?(:MysqlAdapter, :Mysql2Adapter) && 'ON' == ActiveRecord::Base.connection.show_variable('enforce_gtid_consistency')
55
+ end
56
+
57
+ def supports_savepoints?
58
+ ActiveRecord::Base.connection.supports_savepoints?
59
+ end
60
+
61
+ def with_env_tz(new_tz = 'US/Eastern')
62
+ old_tz, ENV['TZ'] = ENV['TZ'], new_tz
63
+ yield
64
+ ensure
65
+ old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
66
+ end
67
+
68
+ def with_timezone_config(cfg)
69
+ verify_default_timezone_config
70
+
71
+ old_default_zone = ActiveRecord::Base.default_timezone
72
+ old_awareness = ActiveRecord::Base.time_zone_aware_attributes
73
+ old_zone = Time.zone
74
+
75
+ if cfg.has_key?(:default)
76
+ ActiveRecord::Base.default_timezone = cfg[:default]
77
+ end
78
+ if cfg.has_key?(:aware_attributes)
79
+ ActiveRecord::Base.time_zone_aware_attributes = cfg[:aware_attributes]
80
+ end
81
+ if cfg.has_key?(:zone)
82
+ Time.zone = cfg[:zone]
83
+ end
84
+ yield
85
+ ensure
86
+ ActiveRecord::Base.default_timezone = old_default_zone
87
+ ActiveRecord::Base.time_zone_aware_attributes = old_awareness
88
+ Time.zone = old_zone
89
+ end
90
+
91
+ # This method makes sure that tests don't leak global state related to time zones.
92
+ EXPECTED_ZONE = nil
93
+ EXPECTED_DEFAULT_TIMEZONE = :utc
94
+ EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES = false
95
+ def verify_default_timezone_config
96
+ if Time.zone != EXPECTED_ZONE
97
+ $stderr.puts <<-MSG
98
+ \n#{self}
99
+ Global state `Time.zone` was leaked.
100
+ Expected: #{EXPECTED_ZONE}
101
+ Got: #{Time.zone}
102
+ MSG
103
+ end
104
+ if ActiveRecord::Base.default_timezone != EXPECTED_DEFAULT_TIMEZONE
105
+ $stderr.puts <<-MSG
106
+ \n#{self}
107
+ Global state `ActiveRecord::Base.default_timezone` was leaked.
108
+ Expected: #{EXPECTED_DEFAULT_TIMEZONE}
109
+ Got: #{ActiveRecord::Base.default_timezone}
110
+ MSG
111
+ end
112
+ if ActiveRecord::Base.time_zone_aware_attributes != EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES
113
+ $stderr.puts <<-MSG
114
+ \n#{self}
115
+ Global state `ActiveRecord::Base.time_zone_aware_attributes` was leaked.
116
+ Expected: #{EXPECTED_TIME_ZONE_AWARE_ATTRIBUTES}
117
+ Got: #{ActiveRecord::Base.time_zone_aware_attributes}
118
+ MSG
119
+ end
120
+ end
121
+
122
+ def enable_extension!(extension, connection)
123
+ return false unless connection.supports_extensions?
124
+ return connection.reconnect! if connection.extension_enabled?(extension)
125
+
126
+ connection.enable_extension extension
127
+ connection.commit_db_transaction
128
+ connection.reconnect!
129
+ end
130
+
131
+ def disable_extension!(extension, connection)
132
+ return false unless connection.supports_extensions?
133
+ return true unless connection.extension_enabled?(extension)
134
+
135
+ connection.disable_extension extension
136
+ connection.reconnect!
137
+ end
138
+
139
+ require "cases/validations_repair_helper"
140
+ class ActiveSupport::TestCase
141
+ include ActiveRecord::TestFixtures
142
+ include ActiveRecord::ValidationsRepairHelper
143
+
144
+ self.fixture_path = FIXTURES_ROOT
145
+ self.use_instantiated_fixtures = false
146
+ self.use_transactional_fixtures = true
147
+
148
+ def create_fixtures(*fixture_set_names, &block)
149
+ ActiveRecord::FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, fixture_class_names, &block)
150
+ end
151
+ end
152
+
153
+ def load_schema
154
+ # silence verbose schema loading
155
+ original_stdout = $stdout
156
+ $stdout = StringIO.new
157
+
158
+ adapter_name = ActiveRecord::Base.connection.adapter_name.downcase
159
+ adapter_specific_schema_file = SCHEMA_ROOT + "/#{adapter_name}_specific_schema.rb"
160
+
161
+ load SCHEMA_ROOT + "/schema.rb"
162
+
163
+ if File.exist?(adapter_specific_schema_file)
164
+ load adapter_specific_schema_file
165
+ end
166
+ ensure
167
+ $stdout = original_stdout
168
+ end
169
+
170
+ load_schema
171
+
172
+ class SQLSubscriber
173
+ attr_reader :logged
174
+ attr_reader :payloads
175
+
176
+ def initialize
177
+ @logged = []
178
+ @payloads = []
179
+ end
180
+
181
+ def start(name, id, payload)
182
+ @payloads << payload
183
+ @logged << [payload[:sql].squish, payload[:name], payload[:binds]]
184
+ end
185
+
186
+ def finish(name, id, payload); end
187
+ end
188
+
189
+ module InTimeZone
190
+ private
191
+
192
+ def in_time_zone(zone)
193
+ old_zone = Time.zone
194
+ old_tz = ActiveRecord::Base.time_zone_aware_attributes
195
+
196
+ Time.zone = zone ? ActiveSupport::TimeZone[zone] : nil
197
+ ActiveRecord::Base.time_zone_aware_attributes = !zone.nil?
198
+ yield
199
+ ensure
200
+ Time.zone = old_zone
201
+ ActiveRecord::Base.time_zone_aware_attributes = old_tz
202
+ end
203
+ end
204
+
205
+ require 'mocha/setup' # FIXME: stop using mocha
206
+
207
+ # FIXME: we have tests that depend on run order, we should fix that and
208
+ # remove this method call.
209
+ require 'active_support/test_case'
210
+ ActiveSupport::TestCase.test_order = :sorted
@@ -0,0 +1,54 @@
1
+ require 'cases/helper'
2
+
3
+ class HotCompatibilityTest < ActiveRecord::TestCase
4
+ self.use_transactional_fixtures = false
5
+
6
+ setup do
7
+ @klass = Class.new(ActiveRecord::Base) do
8
+ connection.create_table :hot_compatibilities, force: true do |t|
9
+ t.string :foo
10
+ t.string :bar
11
+ end
12
+
13
+ def self.name; 'HotCompatibility'; end
14
+ end
15
+ end
16
+
17
+ teardown do
18
+ ActiveRecord::Base.connection.drop_table :hot_compatibilities
19
+ end
20
+
21
+ test "insert after remove_column" do
22
+ # warm cache
23
+ @klass.create!
24
+
25
+ # we have 3 columns
26
+ assert_equal 3, @klass.columns.length
27
+
28
+ # remove one of them
29
+ @klass.connection.remove_column :hot_compatibilities, :bar
30
+
31
+ # we still have 3 columns in the cache
32
+ assert_equal 3, @klass.columns.length
33
+
34
+ # but we can successfully create a record so long as we don't
35
+ # reference the removed column
36
+ record = @klass.create! foo: 'foo'
37
+ record.reload
38
+ assert_equal 'foo', record.foo
39
+ end
40
+
41
+ test "update after remove_column" do
42
+ record = @klass.create! foo: 'foo'
43
+ assert_equal 3, @klass.columns.length
44
+ @klass.connection.remove_column :hot_compatibilities, :bar
45
+ assert_equal 3, @klass.columns.length
46
+
47
+ record.reload
48
+ assert_equal 'foo', record.foo
49
+ record.foo = 'bar'
50
+ record.save!
51
+ record.reload
52
+ assert_equal 'bar', record.foo
53
+ end
54
+ end
@@ -0,0 +1,45 @@
1
+ require "cases/helper"
2
+ require 'models/topic'
3
+ require 'models/reply'
4
+
5
+ class ActiveRecordI18nTests < ActiveRecord::TestCase
6
+
7
+ def setup
8
+ I18n.backend = I18n::Backend::Simple.new
9
+ end
10
+
11
+ def test_translated_model_attributes
12
+ I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
13
+ assert_equal 'topic title attribute', Topic.human_attribute_name('title')
14
+ end
15
+
16
+ def test_translated_model_attributes_with_symbols
17
+ I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
18
+ assert_equal 'topic title attribute', Topic.human_attribute_name(:title)
19
+ end
20
+
21
+ def test_translated_model_attributes_with_sti
22
+ I18n.backend.store_translations 'en', :activerecord => {:attributes => {:reply => {:title => 'reply title attribute'} } }
23
+ assert_equal 'reply title attribute', Reply.human_attribute_name('title')
24
+ end
25
+
26
+ def test_translated_model_attributes_with_sti_fallback
27
+ I18n.backend.store_translations 'en', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } }
28
+ assert_equal 'topic title attribute', Reply.human_attribute_name('title')
29
+ end
30
+
31
+ def test_translated_model_names
32
+ I18n.backend.store_translations 'en', :activerecord => {:models => {:topic => 'topic model'} }
33
+ assert_equal 'topic model', Topic.model_name.human
34
+ end
35
+
36
+ def test_translated_model_names_with_sti
37
+ I18n.backend.store_translations 'en', :activerecord => {:models => {:reply => 'reply model'} }
38
+ assert_equal 'reply model', Reply.model_name.human
39
+ end
40
+
41
+ def test_translated_model_names_with_sti_fallback
42
+ I18n.backend.store_translations 'en', :activerecord => {:models => {:topic => 'topic model'} }
43
+ assert_equal 'topic model', Reply.model_name.human
44
+ end
45
+ end