ibm_db 3.0.5-x86-mingw32 → 5.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 (358) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +4 -0
  3. data/LICENSE +1 -1
  4. data/ParameterizedQueries README +6 -6
  5. data/README +38 -55
  6. data/ext/Makefile +269 -0
  7. data/ext/extconf.rb +34 -3
  8. data/ext/gil_release_version +3 -0
  9. data/ext/ibm_db-i386-mingw32.def +2 -0
  10. data/ext/ibm_db.c +100 -108
  11. data/ext/ibm_db.o +0 -0
  12. data/ext/ibm_db.so +0 -0
  13. data/ext/mkmf.log +110 -0
  14. data/ext/ruby_ibm_db_cli.o +0 -0
  15. data/ext/unicode_support_version +3 -0
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +923 -527
  17. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +4 -1
  18. data/lib/mswin32/ibm_db.rb +7 -39
  19. data/lib/mswin32/rb2x/i386/ibm_db.so +0 -0
  20. data/test/active_record/connection_adapters/fake_adapter.rb +8 -5
  21. data/test/cases/adapter_test.rb +133 -58
  22. data/test/cases/adapters/mysql2/active_schema_test.rb +193 -0
  23. data/test/cases/adapters/mysql2/bind_parameter_test.rb +50 -0
  24. data/test/cases/adapters/mysql2/boolean_test.rb +100 -0
  25. data/test/cases/adapters/mysql2/case_sensitivity_test.rb +63 -0
  26. data/test/cases/adapters/mysql2/charset_collation_test.rb +54 -0
  27. data/test/cases/adapters/mysql2/connection_test.rb +210 -0
  28. data/test/cases/adapters/mysql2/datetime_precision_quoting_test.rb +45 -0
  29. data/test/cases/adapters/mysql2/enum_test.rb +26 -0
  30. data/test/cases/adapters/mysql2/explain_test.rb +21 -0
  31. data/test/cases/adapters/mysql2/json_test.rb +195 -0
  32. data/test/cases/adapters/mysql2/mysql2_adapter_test.rb +83 -0
  33. data/test/cases/adapters/mysql2/reserved_word_test.rb +152 -0
  34. data/test/cases/adapters/mysql2/schema_migrations_test.rb +59 -0
  35. data/test/cases/adapters/mysql2/schema_test.rb +126 -0
  36. data/test/cases/adapters/mysql2/sp_test.rb +36 -0
  37. data/test/cases/adapters/mysql2/sql_types_test.rb +14 -0
  38. data/test/cases/adapters/mysql2/table_options_test.rb +42 -0
  39. data/test/cases/adapters/mysql2/unsigned_type_test.rb +66 -0
  40. data/test/cases/adapters/postgresql/active_schema_test.rb +98 -0
  41. data/test/cases/adapters/postgresql/array_test.rb +339 -0
  42. data/test/cases/adapters/postgresql/bit_string_test.rb +82 -0
  43. data/test/cases/adapters/postgresql/bytea_test.rb +134 -0
  44. data/test/cases/adapters/postgresql/case_insensitive_test.rb +26 -0
  45. data/test/cases/adapters/postgresql/change_schema_test.rb +38 -0
  46. data/test/cases/adapters/postgresql/cidr_test.rb +25 -0
  47. data/test/cases/adapters/postgresql/citext_test.rb +78 -0
  48. data/test/cases/adapters/postgresql/collation_test.rb +53 -0
  49. data/test/cases/adapters/postgresql/composite_test.rb +132 -0
  50. data/test/cases/adapters/postgresql/connection_test.rb +257 -0
  51. data/test/cases/adapters/postgresql/datatype_test.rb +92 -0
  52. data/test/cases/adapters/postgresql/domain_test.rb +47 -0
  53. data/test/cases/adapters/postgresql/enum_test.rb +91 -0
  54. data/test/cases/adapters/postgresql/explain_test.rb +20 -0
  55. data/test/cases/adapters/postgresql/extension_migration_test.rb +63 -0
  56. data/test/cases/adapters/postgresql/full_text_test.rb +44 -0
  57. data/test/cases/adapters/postgresql/geometric_test.rb +378 -0
  58. data/test/cases/adapters/postgresql/hstore_test.rb +382 -0
  59. data/test/cases/adapters/postgresql/infinity_test.rb +69 -0
  60. data/test/cases/adapters/postgresql/integer_test.rb +25 -0
  61. data/test/cases/adapters/postgresql/json_test.rb +237 -0
  62. data/test/cases/adapters/postgresql/ltree_test.rb +53 -0
  63. data/test/cases/adapters/postgresql/money_test.rb +96 -0
  64. data/test/cases/adapters/postgresql/network_test.rb +94 -0
  65. data/test/cases/adapters/postgresql/numbers_test.rb +49 -0
  66. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +405 -0
  67. data/test/cases/adapters/postgresql/prepared_statements_test.rb +22 -0
  68. data/test/cases/adapters/postgresql/quoting_test.rb +44 -0
  69. data/test/cases/adapters/postgresql/range_test.rb +343 -0
  70. data/test/cases/adapters/postgresql/referential_integrity_test.rb +111 -0
  71. data/test/cases/adapters/postgresql/rename_table_test.rb +34 -0
  72. data/test/cases/adapters/postgresql/schema_authorization_test.rb +119 -0
  73. data/test/cases/adapters/postgresql/schema_test.rb +597 -0
  74. data/test/cases/adapters/postgresql/serial_test.rb +154 -0
  75. data/test/cases/adapters/postgresql/statement_pool_test.rb +41 -0
  76. data/test/cases/adapters/postgresql/timestamp_test.rb +90 -0
  77. data/test/cases/adapters/postgresql/type_lookup_test.rb +33 -0
  78. data/test/cases/adapters/postgresql/utils_test.rb +62 -0
  79. data/test/cases/adapters/postgresql/uuid_test.rb +294 -0
  80. data/test/cases/adapters/postgresql/xml_test.rb +54 -0
  81. data/test/cases/adapters/sqlite3/collation_test.rb +53 -0
  82. data/test/cases/adapters/sqlite3/copy_table_test.rb +98 -0
  83. data/test/cases/adapters/sqlite3/explain_test.rb +21 -0
  84. data/test/cases/adapters/sqlite3/quoting_test.rb +101 -0
  85. data/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb +441 -0
  86. data/test/cases/adapters/sqlite3/sqlite3_create_folder_test.rb +24 -0
  87. data/test/cases/adapters/sqlite3/statement_pool_test.rb +20 -0
  88. data/test/cases/aggregations_test.rb +11 -1
  89. data/test/cases/ar_schema_test.rb +35 -50
  90. data/test/cases/associations/association_scope_test.rb +1 -6
  91. data/test/cases/associations/belongs_to_associations_test.rb +122 -10
  92. data/test/cases/associations/bidirectional_destroy_dependencies_test.rb +41 -0
  93. data/test/cases/associations/callbacks_test.rb +5 -7
  94. data/test/cases/associations/cascaded_eager_loading_test.rb +1 -1
  95. data/test/cases/associations/eager_load_nested_include_test.rb +1 -3
  96. data/test/cases/associations/eager_test.rb +158 -73
  97. data/test/cases/associations/extension_test.rb +7 -2
  98. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +64 -32
  99. data/test/cases/associations/has_many_associations_test.rb +362 -43
  100. data/test/cases/associations/has_many_through_associations_test.rb +108 -41
  101. data/test/cases/associations/has_one_associations_test.rb +105 -8
  102. data/test/cases/associations/has_one_through_associations_test.rb +6 -3
  103. data/test/cases/associations/inner_join_association_test.rb +3 -3
  104. data/test/cases/associations/inverse_associations_test.rb +38 -11
  105. data/test/cases/associations/join_model_test.rb +59 -36
  106. data/test/cases/associations/left_outer_join_association_test.rb +88 -0
  107. data/test/cases/associations/nested_through_associations_test.rb +2 -2
  108. data/test/cases/associations/required_test.rb +25 -5
  109. data/test/cases/associations_test.rb +39 -34
  110. data/test/cases/attribute_decorators_test.rb +9 -8
  111. data/test/cases/attribute_methods/read_test.rb +5 -5
  112. data/test/cases/attribute_methods_test.rb +97 -40
  113. data/test/cases/attribute_set_test.rb +64 -4
  114. data/test/cases/attribute_test.rb +84 -18
  115. data/test/cases/attributes_test.rb +151 -34
  116. data/test/cases/autosave_association_test.rb +149 -36
  117. data/test/cases/base_test.rb +290 -241
  118. data/test/cases/batches_test.rb +299 -22
  119. data/test/cases/binary_test.rb +2 -10
  120. data/test/cases/bind_parameter_test.rb +76 -66
  121. data/test/cases/cache_key_test.rb +26 -0
  122. data/test/cases/calculations_test.rb +167 -15
  123. data/test/cases/callbacks_test.rb +161 -68
  124. data/test/cases/coders/json_test.rb +15 -0
  125. data/test/cases/collection_cache_key_test.rb +115 -0
  126. data/test/cases/column_definition_test.rb +26 -57
  127. data/test/cases/comment_test.rb +145 -0
  128. data/test/cases/connection_adapters/adapter_leasing_test.rb +5 -3
  129. data/test/cases/connection_adapters/connection_handler_test.rb +128 -21
  130. data/test/cases/connection_adapters/connection_specification_test.rb +1 -1
  131. data/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +0 -38
  132. data/test/cases/connection_adapters/mysql_type_lookup_test.rb +5 -1
  133. data/test/cases/connection_adapters/schema_cache_test.rb +8 -3
  134. data/test/cases/connection_adapters/type_lookup_test.rb +15 -7
  135. data/test/cases/connection_management_test.rb +46 -56
  136. data/test/cases/connection_pool_test.rb +195 -20
  137. data/test/cases/connection_specification/resolver_test.rb +15 -0
  138. data/test/cases/counter_cache_test.rb +10 -5
  139. data/test/cases/custom_locking_test.rb +1 -1
  140. data/test/cases/database_statements_test.rb +18 -3
  141. data/test/cases/{invalid_date_test.rb → date_test.rb} +13 -1
  142. data/test/cases/date_time_precision_test.rb +107 -0
  143. data/test/cases/defaults_test.rb +85 -89
  144. data/test/cases/dirty_test.rb +30 -52
  145. data/test/cases/disconnected_test.rb +4 -2
  146. data/test/cases/enum_test.rb +178 -24
  147. data/test/cases/errors_test.rb +16 -0
  148. data/test/cases/explain_test.rb +32 -21
  149. data/test/cases/finder_test.rb +273 -148
  150. data/test/cases/fixture_set/file_test.rb +18 -0
  151. data/test/cases/fixtures_test.rb +112 -32
  152. data/test/cases/forbidden_attributes_protection_test.rb +69 -3
  153. data/test/cases/helper.rb +10 -16
  154. data/test/cases/hot_compatibility_test.rb +89 -1
  155. data/test/cases/inheritance_test.rb +284 -53
  156. data/test/cases/integration_test.rb +23 -7
  157. data/test/cases/invalid_connection_test.rb +4 -2
  158. data/test/cases/invertible_migration_test.rb +124 -32
  159. data/test/cases/json_serialization_test.rb +11 -2
  160. data/test/cases/locking_test.rb +22 -6
  161. data/test/cases/log_subscriber_test.rb +106 -17
  162. data/test/cases/migration/change_schema_test.rb +60 -114
  163. data/test/cases/migration/change_table_test.rb +34 -2
  164. data/test/cases/migration/column_attributes_test.rb +7 -23
  165. data/test/cases/migration/column_positioning_test.rb +8 -8
  166. data/test/cases/migration/columns_test.rb +17 -11
  167. data/test/cases/migration/command_recorder_test.rb +47 -2
  168. data/test/cases/migration/compatibility_test.rb +118 -0
  169. data/test/cases/migration/create_join_table_test.rb +21 -12
  170. data/test/cases/migration/foreign_key_test.rb +52 -18
  171. data/test/cases/migration/index_test.rb +14 -12
  172. data/test/cases/migration/logger_test.rb +1 -1
  173. data/test/cases/migration/pending_migrations_test.rb +0 -1
  174. data/test/cases/migration/references_foreign_key_test.rb +59 -7
  175. data/test/cases/migration/references_index_test.rb +4 -4
  176. data/test/cases/migration/references_statements_test.rb +26 -6
  177. data/test/cases/migration/rename_table_test.rb +25 -25
  178. data/test/cases/migration_test.rb +279 -81
  179. data/test/cases/migrator_test.rb +91 -8
  180. data/test/cases/mixin_test.rb +0 -2
  181. data/test/cases/modules_test.rb +3 -4
  182. data/test/cases/multiparameter_attributes_test.rb +24 -2
  183. data/test/cases/multiple_db_test.rb +11 -4
  184. data/test/cases/nested_attributes_test.rb +61 -33
  185. data/test/cases/persistence_test.rb +102 -10
  186. data/test/cases/pooled_connections_test.rb +3 -3
  187. data/test/cases/primary_keys_test.rb +170 -31
  188. data/test/cases/query_cache_test.rb +216 -96
  189. data/test/cases/quoting_test.rb +65 -19
  190. data/test/cases/readonly_test.rb +2 -1
  191. data/test/cases/reflection_test.rb +68 -22
  192. data/test/cases/relation/delegation_test.rb +3 -8
  193. data/test/cases/relation/merging_test.rb +10 -14
  194. data/test/cases/relation/mutation_test.rb +42 -24
  195. data/test/cases/relation/or_test.rb +92 -0
  196. data/test/cases/relation/predicate_builder_test.rb +4 -2
  197. data/test/cases/relation/record_fetch_warning_test.rb +40 -0
  198. data/test/cases/relation/where_chain_test.rb +23 -99
  199. data/test/cases/relation/where_clause_test.rb +182 -0
  200. data/test/cases/relation/where_test.rb +45 -23
  201. data/test/cases/relation_test.rb +67 -58
  202. data/test/cases/relations_test.rb +249 -38
  203. data/test/cases/result_test.rb +10 -0
  204. data/test/cases/sanitize_test.rb +108 -15
  205. data/test/cases/schema_dumper_test.rb +119 -125
  206. data/test/cases/schema_loading_test.rb +52 -0
  207. data/test/cases/scoping/default_scoping_test.rb +113 -39
  208. data/test/cases/scoping/named_scoping_test.rb +46 -9
  209. data/test/cases/scoping/relation_scoping_test.rb +47 -4
  210. data/test/cases/secure_token_test.rb +32 -0
  211. data/test/cases/serialization_test.rb +1 -1
  212. data/test/cases/serialized_attribute_test.rb +93 -6
  213. data/test/cases/statement_cache_test.rb +38 -0
  214. data/test/cases/store_test.rb +2 -1
  215. data/test/cases/suppressor_test.rb +63 -0
  216. data/test/cases/tasks/database_tasks_test.rb +73 -9
  217. data/test/cases/tasks/mysql_rake_test.rb +139 -118
  218. data/test/cases/tasks/postgresql_rake_test.rb +60 -6
  219. data/test/cases/tasks/sqlite_rake_test.rb +30 -3
  220. data/test/cases/test_case.rb +28 -20
  221. data/test/cases/test_fixtures_test.rb +36 -0
  222. data/test/cases/time_precision_test.rb +103 -0
  223. data/test/cases/timestamp_test.rb +44 -10
  224. data/test/cases/touch_later_test.rb +121 -0
  225. data/test/cases/transaction_callbacks_test.rb +128 -62
  226. data/test/cases/transaction_isolation_test.rb +2 -2
  227. data/test/cases/transactions_test.rb +61 -43
  228. data/test/cases/type/adapter_specific_registry_test.rb +133 -0
  229. data/test/cases/type/date_time_test.rb +14 -0
  230. data/test/cases/type/integer_test.rb +2 -96
  231. data/test/cases/type/string_test.rb +0 -14
  232. data/test/cases/type_test.rb +39 -0
  233. data/test/cases/types_test.rb +1 -118
  234. data/test/cases/unconnected_test.rb +1 -1
  235. data/test/cases/validations/absence_validation_test.rb +73 -0
  236. data/test/cases/validations/association_validation_test.rb +13 -2
  237. data/test/cases/validations/i18n_validation_test.rb +6 -10
  238. data/test/cases/validations/length_validation_test.rb +62 -30
  239. data/test/cases/validations/presence_validation_test.rb +36 -1
  240. data/test/cases/validations/uniqueness_validation_test.rb +128 -37
  241. data/test/cases/validations_repair_helper.rb +2 -6
  242. data/test/cases/validations_test.rb +36 -7
  243. data/test/cases/view_test.rb +102 -5
  244. data/test/cases/yaml_serialization_test.rb +21 -26
  245. data/test/config.example.yml +97 -0
  246. data/test/fixtures/bad_posts.yml +9 -0
  247. data/test/fixtures/books.yml +20 -0
  248. data/test/fixtures/content.yml +3 -0
  249. data/test/fixtures/content_positions.yml +3 -0
  250. data/test/fixtures/dead_parrots.yml +5 -0
  251. data/test/fixtures/live_parrots.yml +4 -0
  252. data/test/fixtures/naked/yml/parrots.yml +2 -0
  253. data/test/fixtures/naked/yml/trees.yml +3 -0
  254. data/test/fixtures/nodes.yml +29 -0
  255. data/test/fixtures/other_comments.yml +6 -0
  256. data/test/fixtures/other_dogs.yml +2 -0
  257. data/test/fixtures/other_posts.yml +7 -0
  258. data/test/fixtures/price_estimates.yml +10 -1
  259. data/test/fixtures/trees.yml +3 -0
  260. data/test/migrations/10_urban/9_add_expressions.rb +1 -1
  261. data/test/migrations/decimal/1_give_me_big_numbers.rb +1 -1
  262. data/test/migrations/magic/1_currencies_have_symbols.rb +1 -1
  263. data/test/migrations/missing/1000_people_have_middle_names.rb +2 -2
  264. data/test/migrations/missing/1_people_have_last_names.rb +2 -2
  265. data/test/migrations/missing/3_we_need_reminders.rb +2 -2
  266. data/test/migrations/missing/4_innocent_jointable.rb +2 -2
  267. data/test/migrations/rename/1_we_need_things.rb +2 -2
  268. data/test/migrations/rename/2_rename_things.rb +2 -2
  269. data/test/migrations/to_copy/1_people_have_hobbies.rb +1 -1
  270. data/test/migrations/to_copy/2_people_have_descriptions.rb +1 -1
  271. data/test/migrations/to_copy2/1_create_articles.rb +1 -1
  272. data/test/migrations/to_copy2/2_create_comments.rb +1 -1
  273. data/test/migrations/to_copy_with_name_collision/1_people_have_hobbies.rb +1 -1
  274. data/test/migrations/to_copy_with_timestamps/20090101010101_people_have_hobbies.rb +1 -1
  275. data/test/migrations/to_copy_with_timestamps/20090101010202_people_have_descriptions.rb +1 -1
  276. data/test/migrations/to_copy_with_timestamps2/20090101010101_create_articles.rb +1 -1
  277. data/test/migrations/to_copy_with_timestamps2/20090101010202_create_comments.rb +1 -1
  278. data/test/migrations/valid/1_valid_people_have_last_names.rb +1 -1
  279. data/test/migrations/valid/2_we_need_reminders.rb +2 -2
  280. data/test/migrations/valid/3_innocent_jointable.rb +2 -2
  281. data/test/migrations/valid_with_subdirectories/1_valid_people_have_last_names.rb +1 -1
  282. data/test/migrations/valid_with_subdirectories/sub/2_we_need_reminders.rb +2 -2
  283. data/test/migrations/valid_with_subdirectories/sub1/3_innocent_jointable.rb +2 -2
  284. data/test/migrations/valid_with_timestamps/20100101010101_valid_with_timestamps_people_have_last_names.rb +1 -1
  285. data/test/migrations/valid_with_timestamps/20100201010101_valid_with_timestamps_we_need_reminders.rb +1 -1
  286. data/test/migrations/valid_with_timestamps/20100301010101_valid_with_timestamps_innocent_jointable.rb +1 -1
  287. data/test/migrations/version_check/20131219224947_migration_version_check.rb +1 -1
  288. data/test/models/admin/randomly_named_c1.rb +6 -2
  289. data/test/models/aircraft.rb +1 -0
  290. data/test/models/author.rb +4 -7
  291. data/test/models/bird.rb +1 -1
  292. data/test/models/book.rb +5 -0
  293. data/test/models/bulb.rb +2 -1
  294. data/test/models/car.rb +3 -0
  295. data/test/models/cat.rb +10 -0
  296. data/test/models/chef.rb +1 -0
  297. data/test/models/club.rb +2 -0
  298. data/test/models/comment.rb +17 -5
  299. data/test/models/company.rb +4 -2
  300. data/test/models/company_in_module.rb +1 -1
  301. data/test/models/contact.rb +1 -1
  302. data/test/models/content.rb +40 -0
  303. data/test/models/customer.rb +8 -2
  304. data/test/models/developer.rb +19 -0
  305. data/test/models/face.rb +1 -1
  306. data/test/models/guitar.rb +4 -0
  307. data/test/models/hotel.rb +2 -0
  308. data/test/models/member.rb +1 -0
  309. data/test/models/member_detail.rb +4 -3
  310. data/test/models/mentor.rb +3 -0
  311. data/test/models/mocktail_designer.rb +2 -0
  312. data/test/models/node.rb +5 -0
  313. data/test/models/non_primary_key.rb +2 -0
  314. data/test/models/notification.rb +3 -0
  315. data/test/models/other_dog.rb +5 -0
  316. data/test/models/owner.rb +4 -1
  317. data/test/models/parrot.rb +6 -7
  318. data/test/models/person.rb +0 -1
  319. data/test/models/pet.rb +3 -0
  320. data/test/models/pet_treasure.rb +6 -0
  321. data/test/models/pirate.rb +3 -3
  322. data/test/models/post.rb +18 -9
  323. data/test/models/project.rb +9 -0
  324. data/test/models/randomly_named_c1.rb +1 -1
  325. data/test/models/recipe.rb +3 -0
  326. data/test/models/ship.rb +8 -2
  327. data/test/models/tag.rb +6 -0
  328. data/test/models/topic.rb +2 -8
  329. data/test/models/tree.rb +3 -0
  330. data/test/models/tuning_peg.rb +4 -0
  331. data/test/models/user.rb +14 -0
  332. data/test/models/uuid_item.rb +6 -0
  333. data/test/schema/mysql2_specific_schema.rb +33 -23
  334. data/test/schema/oracle_specific_schema.rb +1 -4
  335. data/test/schema/postgresql_specific_schema.rb +36 -124
  336. data/test/schema/schema.rb +170 -65
  337. data/test/schema/schema.rb.original +1057 -0
  338. data/test/schema/sqlite_specific_schema.rb +1 -5
  339. data/test/support/connection.rb +1 -0
  340. data/test/support/schema_dumping_helper.rb +1 -1
  341. data/test/support/yaml_compatibility_fixtures/rails_4_1.yml +22 -0
  342. data/test/support/yaml_compatibility_fixtures/rails_4_2_0.yml +182 -0
  343. metadata +146 -30
  344. data/lib/mswin32/rb19x/ibm_db.so +0 -0
  345. data/lib/mswin32/rb21x/i386/ibm_db.so +0 -0
  346. data/lib/mswin32/rb22x/i386/ibm_db.so +0 -0
  347. data/lib/mswin32/rb23x/i386/ibm_db.so +0 -0
  348. data/test/cases/associations/deprecated_counter_cache_on_has_many_through_test.rb +0 -26
  349. data/test/cases/attribute_methods/serialization_test.rb +0 -29
  350. data/test/cases/migration/change_schema_test - Copy.rb +0 -448
  351. data/test/cases/migration/foreign_key_test - Changed.rb +0 -325
  352. data/test/cases/migration/table_and_index_test.rb +0 -24
  353. data/test/cases/relation/where_test2.rb +0 -36
  354. data/test/cases/type/decimal_test.rb +0 -56
  355. data/test/cases/type/unsigned_integer_test.rb +0 -18
  356. data/test/cases/xml_serialization_test.rb +0 -457
  357. data/test/fixtures/naked/csv/accounts.csv +0 -1
  358. data/test/schema/mysql_specific_schema.rb +0 -70
@@ -0,0 +1,24 @@
1
+ require "cases/helper"
2
+ require 'models/owner'
3
+
4
+ module ActiveRecord
5
+ module ConnectionAdapters
6
+ class SQLite3CreateFolder < ActiveRecord::SQLite3TestCase
7
+ def test_sqlite_creates_directory
8
+ Dir.mktmpdir do |dir|
9
+ begin
10
+ dir = Pathname.new(dir)
11
+ @conn = Base.sqlite3_connection :database => dir.join("db/foo.sqlite3"),
12
+ :adapter => 'sqlite3',
13
+ :timeout => 100
14
+
15
+ assert Dir.exist? dir.join('db')
16
+ assert File.exist? dir.join('db/foo.sqlite3')
17
+ ensure
18
+ @conn.disconnect! if @conn
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ require 'cases/helper'
2
+
3
+ class SQLite3StatementPoolTest < ActiveRecord::SQLite3TestCase
4
+ if Process.respond_to?(:fork)
5
+ def test_cache_is_per_pid
6
+
7
+ cache = ActiveRecord::ConnectionAdapters::SQLite3Adapter::StatementPool.new(10)
8
+ cache['foo'] = 'bar'
9
+ assert_equal 'bar', cache['foo']
10
+
11
+ pid = fork {
12
+ lookup = cache['foo'];
13
+ exit!(!lookup)
14
+ }
15
+
16
+ Process.waitpid pid
17
+ assert $?.success?, 'process should exit successfully'
18
+ end
19
+ end
20
+ end
@@ -25,7 +25,7 @@ class AggregationsTest < ActiveRecord::TestCase
25
25
 
26
26
  def test_immutable_value_objects
27
27
  customers(:david).balance = Money.new(100)
28
- assert_raise(RuntimeError) { customers(:david).balance.instance_eval { @amount = 20 } }
28
+ assert_raise(frozen_error_class) { customers(:david).balance.instance_eval { @amount = 20 } }
29
29
  end
30
30
 
31
31
  def test_inferred_mapping
@@ -138,6 +138,16 @@ class AggregationsTest < ActiveRecord::TestCase
138
138
  assert_equal 'Barnoit GUMBLEAU', customers(:barney).fullname.to_s
139
139
  assert_kind_of Fullname, customers(:barney).fullname
140
140
  end
141
+
142
+ def test_assigning_hash_to_custom_converter
143
+ customers(:barney).fullname = { first: "Barney", last: "Stinson" }
144
+ assert_equal "Barney STINSON", customers(:barney).name
145
+ end
146
+
147
+ def test_assigning_hash_without_custom_converter
148
+ customers(:barney).fullname_no_converter = { first: "Barney", last: "Stinson" }
149
+ assert_equal({ first: "Barney", last: "Stinson" }.to_s, customers(:barney).name)
150
+ end
141
151
  end
142
152
 
143
153
  class OverridingAggregationsTest < ActiveRecord::TestCase
@@ -3,7 +3,7 @@ require "cases/helper"
3
3
  if ActiveRecord::Base.connection.supports_migrations?
4
4
 
5
5
  class ActiveRecordSchemaTest < ActiveRecord::TestCase
6
- self.use_transactional_fixtures = false
6
+ self.use_transactional_tests = false
7
7
 
8
8
  setup do
9
9
  @original_verbose = ActiveRecord::Migration.verbose
@@ -17,14 +17,15 @@ if ActiveRecord::Base.connection.supports_migrations?
17
17
  @connection.drop_table :nep_fruits rescue nil
18
18
  @connection.drop_table :nep_schema_migrations rescue nil
19
19
  @connection.drop_table :has_timestamps rescue nil
20
+ @connection.drop_table :multiple_indexes rescue nil
20
21
  ActiveRecord::SchemaMigration.delete_all rescue nil
21
22
  ActiveRecord::Migration.verbose = @original_verbose
22
23
  end
23
24
 
24
- def test_has_no_primary_key
25
+ def test_has_primary_key
25
26
  old_primary_key_prefix_type = ActiveRecord::Base.primary_key_prefix_type
26
27
  ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
27
- assert_nil ActiveRecord::SchemaMigration.primary_key
28
+ assert_equal "version", ActiveRecord::SchemaMigration.primary_key
28
29
 
29
30
  ActiveRecord::SchemaMigration.create_table
30
31
  assert_difference "ActiveRecord::SchemaMigration.count", 1 do
@@ -93,69 +94,53 @@ if ActiveRecord::Base.connection.supports_migrations?
93
94
  assert_equal "20131219224947", ActiveRecord::SchemaMigration.normalize_migration_number("20131219224947")
94
95
  end
95
96
 
96
- def test_timestamps_without_null_is_deprecated_on_create_table
97
- assert_deprecated do
98
- ActiveRecord::Schema.define do
99
- create_table :has_timestamps do |t|
100
- t.timestamps
101
- end
97
+ def test_schema_load_with_multiple_indexes_for_column_of_different_names
98
+ ActiveRecord::Schema.define do
99
+ create_table :multiple_indexes do |t|
100
+ t.string "foo"
101
+ t.index ["foo"], name: "multiple_indexes_foo_1"
102
+ t.index ["foo"], name: "multiple_indexes_foo_2"
102
103
  end
103
104
  end
104
- end
105
105
 
106
- def test_timestamps_without_null_is_deprecated_on_change_table
107
- assert_deprecated do
108
- ActiveRecord::Schema.define do
109
- create_table :has_timestamps
106
+ indexes = @connection.indexes("multiple_indexes")
110
107
 
111
- change_table :has_timestamps do |t|
112
- t.timestamps
113
- end
114
- end
115
- end
108
+ assert_equal 2, indexes.length
109
+ assert_equal ["multiple_indexes_foo_1", "multiple_indexes_foo_2"], indexes.collect(&:name).sort
116
110
  end
117
111
 
118
- def test_timestamps_without_null_is_deprecated_on_add_timestamps
119
- assert_deprecated do
120
- ActiveRecord::Schema.define do
121
- create_table :has_timestamps
122
- add_timestamps :has_timestamps
112
+ def test_timestamps_without_null_set_null_to_false_on_create_table
113
+ ActiveRecord::Schema.define do
114
+ create_table :has_timestamps do |t|
115
+ t.timestamps
123
116
  end
124
117
  end
125
- end
126
118
 
127
- def test_no_deprecation_warning_from_timestamps_on_create_table
128
- assert_not_deprecated do
129
- ActiveRecord::Schema.define do
130
- create_table :has_timestamps do |t|
131
- t.timestamps null: true
132
- end
119
+ assert !@connection.columns(:has_timestamps).find { |c| c.name == 'created_at' }.null
120
+ assert !@connection.columns(:has_timestamps).find { |c| c.name == 'updated_at' }.null
121
+ end
133
122
 
134
- drop_table :has_timestamps
123
+ def test_timestamps_without_null_set_null_to_false_on_change_table
124
+ ActiveRecord::Schema.define do
125
+ create_table :has_timestamps
135
126
 
136
- create_table :has_timestamps do |t|
137
- t.timestamps null: false
138
- end
127
+ change_table :has_timestamps do |t|
128
+ t.timestamps default: Time.now
139
129
  end
140
130
  end
141
- end
142
-
143
- def test_no_deprecation_warning_from_timestamps_on_change_table
144
- assert_not_deprecated do
145
- ActiveRecord::Schema.define do
146
- create_table :has_timestamps
147
- change_table :has_timestamps do |t|
148
- t.timestamps null: true
149
- end
150
131
 
151
- drop_table :has_timestamps
132
+ assert !@connection.columns(:has_timestamps).find { |c| c.name == 'created_at' }.null
133
+ assert !@connection.columns(:has_timestamps).find { |c| c.name == 'updated_at' }.null
134
+ end
152
135
 
153
- create_table :has_timestamps
154
- change_table :has_timestamps do |t|
155
- t.timestamps null: false, default: Time.now
156
- end
157
- end
136
+ def test_timestamps_without_null_set_null_to_false_on_add_timestamps
137
+ ActiveRecord::Schema.define do
138
+ create_table :has_timestamps
139
+ add_timestamps :has_timestamps, default: Time.now
158
140
  end
141
+
142
+ assert !@connection.columns(:has_timestamps).find { |c| c.name == 'created_at' }.null
143
+ assert !@connection.columns(:has_timestamps).find { |c| c.name == 'updated_at' }.null
159
144
  end
160
145
  end
161
146
  end
@@ -8,12 +8,7 @@ module ActiveRecord
8
8
  test 'does not duplicate conditions' do
9
9
  scope = AssociationScope.scope(Author.new.association(:welcome_posts),
10
10
  Author.connection)
11
- wheres = scope.where_values.map(&:right)
12
- binds = scope.bind_values.map(&:last)
13
- wheres = scope.where_values.map(&:right).reject { |node|
14
- Arel::Nodes::BindParam === node
15
- }
16
- assert_equal wheres.uniq, wheres
11
+ binds = scope.where_clause.binds.map(&:value)
17
12
  assert_equal binds.uniq, binds
18
13
  end
19
14
  end
@@ -1,6 +1,5 @@
1
1
  require 'cases/helper'
2
2
  require 'models/developer'
3
- require 'models/computer'
4
3
  require 'models/project'
5
4
  require 'models/company'
6
5
  require 'models/topic'
@@ -36,6 +35,10 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
36
35
  assert_equal companies(:first_firm).name, firm.name
37
36
  end
38
37
 
38
+ def test_missing_attribute_error_is_raised_when_no_foreign_key_attribute
39
+ assert_raises(ActiveModel::MissingAttributeError) { Client.select(:id).first.firm }
40
+ end
41
+
39
42
  def test_belongs_to_does_not_use_order_by
40
43
  ActiveRecord::SQLCounter.clear_log
41
44
  Client.find(3).firm
@@ -50,7 +53,7 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
50
53
 
51
54
  def test_belongs_to_with_primary_key_joins_on_correct_column
52
55
  sql = Client.joins(:firm_with_primary_key).to_sql
53
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
56
+ if current_adapter?(:Mysql2Adapter)
54
57
  assert_no_match(/`firm_with_primary_keys_companies`\.`id`/, sql)
55
58
  assert_match(/`firm_with_primary_keys_companies`\.`name`/, sql)
56
59
  elsif current_adapter?(:OracleAdapter)
@@ -67,6 +70,56 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
67
70
  end
68
71
  end
69
72
 
73
+ def test_optional_relation
74
+ original_value = ActiveRecord::Base.belongs_to_required_by_default
75
+ ActiveRecord::Base.belongs_to_required_by_default = true
76
+
77
+ model = Class.new(ActiveRecord::Base) do
78
+ self.table_name = "accounts"
79
+ def self.name; "Temp"; end
80
+ belongs_to :company, optional: true
81
+ end
82
+
83
+ account = model.new
84
+ assert account.valid?
85
+ ensure
86
+ ActiveRecord::Base.belongs_to_required_by_default = original_value
87
+ end
88
+
89
+ def test_not_optional_relation
90
+ original_value = ActiveRecord::Base.belongs_to_required_by_default
91
+ ActiveRecord::Base.belongs_to_required_by_default = true
92
+
93
+ model = Class.new(ActiveRecord::Base) do
94
+ self.table_name = "accounts"
95
+ def self.name; "Temp"; end
96
+ belongs_to :company, optional: false
97
+ end
98
+
99
+ account = model.new
100
+ assert_not account.valid?
101
+ assert_equal [{error: :blank}], account.errors.details[:company]
102
+ ensure
103
+ ActiveRecord::Base.belongs_to_required_by_default = original_value
104
+ end
105
+
106
+ def test_required_belongs_to_config
107
+ original_value = ActiveRecord::Base.belongs_to_required_by_default
108
+ ActiveRecord::Base.belongs_to_required_by_default = true
109
+
110
+ model = Class.new(ActiveRecord::Base) do
111
+ self.table_name = "accounts"
112
+ def self.name; "Temp"; end
113
+ belongs_to :company
114
+ end
115
+
116
+ account = model.new
117
+ assert_not account.valid?
118
+ assert_equal [{error: :blank}], account.errors.details[:company]
119
+ ensure
120
+ ActiveRecord::Base.belongs_to_required_by_default = original_value
121
+ end
122
+
70
123
  def test_default_scope_on_relations_is_not_cached
71
124
  counter = 0
72
125
 
@@ -242,11 +295,22 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
242
295
  assert client.account.new_record?
243
296
  end
244
297
 
298
+ def test_reloading_the_belonging_object
299
+ odegy_account = accounts(:odegy_account)
300
+
301
+ assert_equal "Odegy", odegy_account.firm.name
302
+ Company.where(id: odegy_account.firm_id).update_all(name: "ODEGY")
303
+ assert_equal "Odegy", odegy_account.firm.name
304
+
305
+ assert_equal "ODEGY", odegy_account.reload_firm.name
306
+ end
307
+
245
308
  def test_natural_assignment_to_nil
246
309
  client = Client.find(3)
247
310
  client.firm = nil
248
311
  client.save
249
- assert_nil client.firm(true)
312
+ client.association(:firm).reload
313
+ assert_nil client.firm
250
314
  assert_nil client.client_of
251
315
  end
252
316
 
@@ -254,7 +318,8 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
254
318
  client = Client.create(:name => "Primary key client", :firm_name => companies(:first_firm).name)
255
319
  client.firm_with_primary_key = nil
256
320
  client.save
257
- assert_nil client.firm_with_primary_key(true)
321
+ client.association(:firm_with_primary_key).reload
322
+ assert_nil client.firm_with_primary_key
258
323
  assert_nil client.client_of
259
324
  end
260
325
 
@@ -271,11 +336,13 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
271
336
  def test_polymorphic_association_class
272
337
  sponsor = Sponsor.new
273
338
  assert_nil sponsor.association(:sponsorable).send(:klass)
274
- assert_nil sponsor.sponsorable(force_reload: true)
339
+ sponsor.association(:sponsorable).reload
340
+ assert_nil sponsor.sponsorable
275
341
 
276
342
  sponsor.sponsorable_type = '' # the column doesn't have to be declared NOT NULL
277
343
  assert_nil sponsor.association(:sponsorable).send(:klass)
278
- assert_nil sponsor.sponsorable(force_reload: true)
344
+ sponsor.association(:sponsorable).reload
345
+ assert_nil sponsor.sponsorable
279
346
 
280
347
  sponsor.sponsorable = Member.new :name => "Bert"
281
348
  assert_equal Member, sponsor.association(:sponsorable).send(:klass)
@@ -423,13 +490,33 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
423
490
  assert_queries(1) { line_item.touch }
424
491
  end
425
492
 
493
+ def test_belongs_to_with_touch_on_multiple_records
494
+ line_item = LineItem.create!(amount: 1)
495
+ line_item2 = LineItem.create!(amount: 2)
496
+ Invoice.create!(line_items: [line_item, line_item2])
497
+
498
+ assert_queries(1) do
499
+ LineItem.transaction do
500
+ line_item.touch
501
+ line_item2.touch
502
+ end
503
+ end
504
+
505
+ assert_queries(2) do
506
+ line_item.touch
507
+ line_item2.touch
508
+ end
509
+ end
510
+
426
511
  def test_belongs_to_with_touch_option_on_touch_without_updated_at_attributes
427
512
  assert_not LineItem.column_names.include?("updated_at")
428
513
 
429
514
  line_item = LineItem.create!
430
515
  invoice = Invoice.create!(line_items: [line_item])
431
516
  initial = invoice.updated_at
432
- line_item.touch
517
+ travel(1.second) do
518
+ line_item.touch
519
+ end
433
520
 
434
521
  assert_not_equal initial, invoice.reload.updated_at
435
522
  end
@@ -508,7 +595,8 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
508
595
  assert final_cut.persisted?
509
596
  assert firm.persisted?
510
597
  assert_equal firm, final_cut.firm
511
- assert_equal firm, final_cut.firm(true)
598
+ final_cut.association(:firm).reload
599
+ assert_equal firm, final_cut.firm
512
600
  end
513
601
 
514
602
  def test_assignment_before_child_saved_with_primary_key
@@ -520,7 +608,8 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
520
608
  assert final_cut.persisted?
521
609
  assert firm.persisted?
522
610
  assert_equal firm, final_cut.firm_with_primary_key
523
- assert_equal firm, final_cut.firm_with_primary_key(true)
611
+ final_cut.association(:firm_with_primary_key).reload
612
+ assert_equal firm, final_cut.firm_with_primary_key
524
613
  end
525
614
 
526
615
  def test_new_record_with_foreign_key_but_no_object
@@ -551,6 +640,12 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
551
640
  assert_queries(0) { tagging.super_tag }
552
641
  end
553
642
 
643
+ def test_dont_find_target_when_saving_foreign_key_after_stale_association_loaded
644
+ client = Client.create!(name: "Test client", firm_with_basic_id: Firm.find(1))
645
+ client.firm_id = Firm.create!(name: "Test firm").id
646
+ assert_queries(1) { client.save! }
647
+ end
648
+
554
649
  def test_field_name_same_as_foreign_key
555
650
  computer = Computer.find(1)
556
651
  assert_not_nil computer.developer, ":foreign key == attribute didn't lock up" # '
@@ -625,6 +720,17 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
625
720
  assert_equal 17, reply.replies.size
626
721
  end
627
722
 
723
+ def test_replace_counter_cache
724
+ topic = Topic.create(title: "Zoom-zoom-zoom")
725
+ reply = Reply.create(title: "re: zoom", content: "speedy quick!")
726
+
727
+ reply.topic = topic
728
+ reply.save
729
+ topic.reload
730
+
731
+ assert_equal 1, topic.replies_count
732
+ end
733
+
628
734
  def test_association_assignment_sticks
629
735
  post = Post.first
630
736
 
@@ -651,7 +757,7 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
651
757
  assert companies(:first_client).readonly_firm.readonly?
652
758
  end
653
759
 
654
- def test_test_polymorphic_assignment_foreign_key_type_string
760
+ def test_polymorphic_assignment_foreign_key_type_string
655
761
  comment = Comment.first
656
762
  comment.author = Author.first
657
763
  comment.resource = Member.first
@@ -1015,6 +1121,12 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
1015
1121
  Column.create! record: record
1016
1122
  assert_equal 1, Column.count
1017
1123
  end
1124
+
1125
+ def test_association_force_reload_with_only_true_is_deprecated
1126
+ client = Client.find(3)
1127
+
1128
+ assert_deprecated { client.firm(true) }
1129
+ end
1018
1130
  end
1019
1131
 
1020
1132
  class BelongsToWithForeignKeyTest < ActiveRecord::TestCase