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
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
 
3
2
  require 'cases/helper'
4
3
  require 'models/company'
@@ -82,7 +81,7 @@ class IntegrationTest < ActiveRecord::TestCase
82
81
 
83
82
  def test_cache_key_format_for_existing_record_with_updated_at
84
83
  dev = Developer.first
85
- assert_equal "developers/#{dev.id}-#{dev.updated_at.utc.to_s(:nsec)}", dev.cache_key
84
+ assert_equal "developers/#{dev.id}-#{dev.updated_at.utc.to_s(:usec)}", dev.cache_key
86
85
  end
87
86
 
88
87
  def test_cache_key_format_for_existing_record_with_updated_at_and_custom_cache_timestamp_format
@@ -97,7 +96,9 @@ class IntegrationTest < ActiveRecord::TestCase
97
96
  owner.update_column :updated_at, Time.current
98
97
  key = owner.cache_key
99
98
 
100
- assert pet.touch
99
+ travel(1.second) do
100
+ assert pet.touch
101
+ end
101
102
  assert_not_equal key, owner.reload.cache_key
102
103
  end
103
104
 
@@ -110,30 +111,45 @@ class IntegrationTest < ActiveRecord::TestCase
110
111
  def test_cache_key_for_updated_on
111
112
  dev = Developer.first
112
113
  dev.updated_at = nil
113
- assert_equal "developers/#{dev.id}-#{dev.updated_on.utc.to_s(:nsec)}", dev.cache_key
114
+ assert_equal "developers/#{dev.id}-#{dev.updated_on.utc.to_s(:usec)}", dev.cache_key
114
115
  end
115
116
 
116
117
  def test_cache_key_for_newer_updated_at
117
118
  dev = Developer.first
118
119
  dev.updated_at += 3600
119
- assert_equal "developers/#{dev.id}-#{dev.updated_at.utc.to_s(:nsec)}", dev.cache_key
120
+ assert_equal "developers/#{dev.id}-#{dev.updated_at.utc.to_s(:usec)}", dev.cache_key
120
121
  end
121
122
 
122
123
  def test_cache_key_for_newer_updated_on
123
124
  dev = Developer.first
124
125
  dev.updated_on += 3600
125
- assert_equal "developers/#{dev.id}-#{dev.updated_on.utc.to_s(:nsec)}", dev.cache_key
126
+ assert_equal "developers/#{dev.id}-#{dev.updated_on.utc.to_s(:usec)}", dev.cache_key
126
127
  end
127
128
 
128
129
  def test_cache_key_format_is_precise_enough
130
+ skip("Subsecond precision is not supported") unless subsecond_precision_supported?
129
131
  dev = Developer.first
130
132
  key = dev.cache_key
131
133
  dev.touch
132
134
  assert_not_equal key, dev.cache_key
133
135
  end
134
136
 
137
+ def test_cache_key_format_is_not_too_precise
138
+ skip("Subsecond precision is not supported") unless subsecond_precision_supported?
139
+ dev = Developer.first
140
+ dev.touch
141
+ key = dev.cache_key
142
+ assert_equal key, dev.reload.cache_key
143
+ end
144
+
135
145
  def test_named_timestamps_for_cache_key
136
146
  owner = owners(:blackbeard)
137
- assert_equal "owners/#{owner.id}-#{owner.happy_at.utc.to_s(:nsec)}", owner.cache_key(:updated_at, :happy_at)
147
+ assert_equal "owners/#{owner.id}-#{owner.happy_at.utc.to_s(:usec)}", owner.cache_key(:updated_at, :happy_at)
148
+ end
149
+
150
+ def test_cache_key_when_named_timestamp_is_nil
151
+ owner = owners(:blackbeard)
152
+ owner.happy_at = nil
153
+ assert_equal "owners/#{owner.id}", owner.cache_key(:happy_at)
138
154
  end
139
155
  end
@@ -1,7 +1,8 @@
1
1
  require "cases/helper"
2
2
 
3
+ if current_adapter?(:Mysql2Adapter)
3
4
  class TestAdapterWithInvalidConnection < ActiveRecord::TestCase
4
- self.use_transactional_fixtures = false
5
+ self.use_transactional_tests = false
5
6
 
6
7
  class Bird < ActiveRecord::Base
7
8
  end
@@ -9,7 +10,7 @@ class TestAdapterWithInvalidConnection < ActiveRecord::TestCase
9
10
  def setup
10
11
  # Can't just use current adapter; sqlite3 will create a database
11
12
  # file on the fly.
12
- Bird.establish_connection adapter: 'mysql', database: 'i_do_not_exist'
13
+ Bird.establish_connection adapter: 'mysql2', database: 'i_do_not_exist'
13
14
  end
14
15
 
15
16
  teardown do
@@ -20,3 +21,4 @@ class TestAdapterWithInvalidConnection < ActiveRecord::TestCase
20
21
  assert_equal "#{Bird.name} (call '#{Bird.name}.connection' to establish a connection)", Bird.inspect
21
22
  end
22
23
  end
24
+ end
@@ -1,8 +1,11 @@
1
1
  require "cases/helper"
2
2
 
3
+ class Horse < ActiveRecord::Base
4
+ end
5
+
3
6
  module ActiveRecord
4
7
  class InvertibleMigrationTest < ActiveRecord::TestCase
5
- class SilentMigration < ActiveRecord::Migration
8
+ class SilentMigration < ActiveRecord::Migration::Current
6
9
  def write(text = '')
7
10
  # sssshhhhh!!
8
11
  end
@@ -76,7 +79,33 @@ module ActiveRecord
76
79
  end
77
80
  end
78
81
 
79
- class LegacyMigration < ActiveRecord::Migration
82
+ class ChangeColumnDefault1 < SilentMigration
83
+ def change
84
+ create_table("horses") do |t|
85
+ t.column :name, :string, default: "Sekitoba"
86
+ end
87
+ end
88
+ end
89
+
90
+ class ChangeColumnDefault2 < SilentMigration
91
+ def change
92
+ change_column_default :horses, :name, from: "Sekitoba", to: "Diomed"
93
+ end
94
+ end
95
+
96
+ class DisableExtension1 < SilentMigration
97
+ def change
98
+ enable_extension "hstore"
99
+ end
100
+ end
101
+
102
+ class DisableExtension2 < SilentMigration
103
+ def change
104
+ disable_extension "hstore"
105
+ end
106
+ end
107
+
108
+ class LegacyMigration < ActiveRecord::Migration::Current
80
109
  def self.up
81
110
  create_table("horses") do |t|
82
111
  t.column :content, :text
@@ -122,14 +151,24 @@ module ActiveRecord
122
151
  end
123
152
  end
124
153
 
154
+ class RevertCustomForeignKeyTable < SilentMigration
155
+ def change
156
+ change_table(:horses) do |t|
157
+ t.references :owner, foreign_key: { to_table: :developers }
158
+ end
159
+ end
160
+ end
161
+
125
162
  setup do
126
163
  @verbose_was, ActiveRecord::Migration.verbose = ActiveRecord::Migration.verbose, false
127
164
  end
128
165
 
129
166
  teardown do
130
167
  %w[horses new_horses].each do |table|
131
- if ActiveRecord::Base.connection.table_exists?(table)
132
- ActiveRecord::Base.connection.drop_table(table)
168
+ ActiveSupport::Deprecation.silence do
169
+ if ActiveRecord::Base.connection.table_exists?(table)
170
+ ActiveRecord::Base.connection.drop_table(table)
171
+ end
133
172
  end
134
173
  end
135
174
  ActiveRecord::Migration.verbose = @verbose_was
@@ -144,26 +183,30 @@ module ActiveRecord
144
183
  end
145
184
 
146
185
  def test_exception_on_removing_index_without_column_option
147
- RemoveIndexMigration1.new.migrate(:up)
148
- migration = RemoveIndexMigration2.new
149
- migration.migrate(:up)
186
+ index_definition = ["horses", [:name, :color]]
187
+ migration1 = RemoveIndexMigration1.new
188
+ migration1.migrate(:up)
189
+ assert migration1.connection.index_exists?(*index_definition)
150
190
 
151
- assert_raises(IrreversibleMigration) do
152
- migration.migrate(:down)
153
- end
191
+ migration2 = RemoveIndexMigration2.new
192
+ migration2.migrate(:up)
193
+ assert_not migration2.connection.index_exists?(*index_definition)
194
+
195
+ migration2.migrate(:down)
196
+ assert migration2.connection.index_exists?(*index_definition)
154
197
  end
155
198
 
156
199
  def test_migrate_up
157
200
  migration = InvertibleMigration.new
158
201
  migration.migrate(:up)
159
- assert migration.connection.table_exists?("horses"), "horses should exist"
202
+ ActiveSupport::Deprecation.silence { assert migration.connection.table_exists?("horses"), "horses should exist" }
160
203
  end
161
204
 
162
205
  def test_migrate_down
163
206
  migration = InvertibleMigration.new
164
207
  migration.migrate :up
165
208
  migration.migrate :down
166
- assert !migration.connection.table_exists?("horses")
209
+ ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
167
210
  end
168
211
 
169
212
  def test_migrate_revert
@@ -171,11 +214,11 @@ module ActiveRecord
171
214
  revert = InvertibleRevertMigration.new
172
215
  migration.migrate :up
173
216
  revert.migrate :up
174
- assert !migration.connection.table_exists?("horses")
217
+ ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
175
218
  revert.migrate :down
176
- assert migration.connection.table_exists?("horses")
219
+ ActiveSupport::Deprecation.silence { assert migration.connection.table_exists?("horses") }
177
220
  migration.migrate :down
178
- assert !migration.connection.table_exists?("horses")
221
+ ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
179
222
  end
180
223
 
181
224
  def test_migrate_revert_by_part
@@ -183,18 +226,24 @@ module ActiveRecord
183
226
  received = []
184
227
  migration = InvertibleByPartsMigration.new
185
228
  migration.test = ->(dir){
186
- assert migration.connection.table_exists?("horses")
187
- assert migration.connection.table_exists?("new_horses")
229
+ ActiveSupport::Deprecation.silence do
230
+ assert migration.connection.table_exists?("horses")
231
+ assert migration.connection.table_exists?("new_horses")
232
+ end
188
233
  received << dir
189
234
  }
190
235
  migration.migrate :up
191
236
  assert_equal [:both, :up], received
192
- assert !migration.connection.table_exists?("horses")
193
- assert migration.connection.table_exists?("new_horses")
237
+ ActiveSupport::Deprecation.silence do
238
+ assert !migration.connection.table_exists?("horses")
239
+ assert migration.connection.table_exists?("new_horses")
240
+ end
194
241
  migration.migrate :down
195
242
  assert_equal [:both, :up, :both, :down], received
196
- assert migration.connection.table_exists?("horses")
197
- assert !migration.connection.table_exists?("new_horses")
243
+ ActiveSupport::Deprecation.silence do
244
+ assert migration.connection.table_exists?("horses")
245
+ assert !migration.connection.table_exists?("new_horses")
246
+ end
198
247
  end
199
248
 
200
249
  def test_migrate_revert_whole_migration
@@ -203,20 +252,56 @@ module ActiveRecord
203
252
  revert = RevertWholeMigration.new(klass)
204
253
  migration.migrate :up
205
254
  revert.migrate :up
206
- assert !migration.connection.table_exists?("horses")
255
+ ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
207
256
  revert.migrate :down
208
- assert migration.connection.table_exists?("horses")
257
+ ActiveSupport::Deprecation.silence { assert migration.connection.table_exists?("horses") }
209
258
  migration.migrate :down
210
- assert !migration.connection.table_exists?("horses")
259
+ ActiveSupport::Deprecation.silence { assert !migration.connection.table_exists?("horses") }
211
260
  end
212
261
  end
213
262
 
214
263
  def test_migrate_nested_revert_whole_migration
215
264
  revert = NestedRevertWholeMigration.new(InvertibleRevertMigration)
216
265
  revert.migrate :down
217
- assert revert.connection.table_exists?("horses")
266
+ ActiveSupport::Deprecation.silence { assert revert.connection.table_exists?("horses") }
218
267
  revert.migrate :up
219
- assert !revert.connection.table_exists?("horses")
268
+ ActiveSupport::Deprecation.silence { assert !revert.connection.table_exists?("horses") }
269
+ end
270
+
271
+ def test_migrate_revert_change_column_default
272
+ migration1 = ChangeColumnDefault1.new
273
+ migration1.migrate(:up)
274
+ assert_equal "Sekitoba", Horse.new.name
275
+
276
+ migration2 = ChangeColumnDefault2.new
277
+ migration2.migrate(:up)
278
+ Horse.reset_column_information
279
+ assert_equal "Diomed", Horse.new.name
280
+
281
+ migration2.migrate(:down)
282
+ Horse.reset_column_information
283
+ assert_equal "Sekitoba", Horse.new.name
284
+ end
285
+
286
+ if current_adapter?(:PostgreSQLAdapter)
287
+ def test_migrate_enable_and_disable_extension
288
+ migration1 = InvertibleMigration.new
289
+ migration2 = DisableExtension1.new
290
+ migration3 = DisableExtension2.new
291
+
292
+ migration1.migrate(:up)
293
+ migration2.migrate(:up)
294
+ assert_equal true, Horse.connection.extension_enabled?('hstore')
295
+
296
+ migration3.migrate(:up)
297
+ assert_equal false, Horse.connection.extension_enabled?('hstore')
298
+
299
+ migration3.migrate(:down)
300
+ assert_equal true, Horse.connection.extension_enabled?('hstore')
301
+
302
+ migration2.migrate(:down)
303
+ assert_equal false, Horse.connection.extension_enabled?('hstore')
304
+ end
220
305
  end
221
306
 
222
307
  def test_revert_order
@@ -245,24 +330,24 @@ module ActiveRecord
245
330
 
246
331
  def test_legacy_up
247
332
  LegacyMigration.migrate :up
248
- assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist"
333
+ ActiveSupport::Deprecation.silence { assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist" }
249
334
  end
250
335
 
251
336
  def test_legacy_down
252
337
  LegacyMigration.migrate :up
253
338
  LegacyMigration.migrate :down
254
- assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist"
339
+ ActiveSupport::Deprecation.silence { assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist" }
255
340
  end
256
341
 
257
342
  def test_up
258
343
  LegacyMigration.up
259
- assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist"
344
+ ActiveSupport::Deprecation.silence { assert ActiveRecord::Base.connection.table_exists?("horses"), "horses should exist" }
260
345
  end
261
346
 
262
347
  def test_down
263
348
  LegacyMigration.up
264
349
  LegacyMigration.down
265
- assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist"
350
+ ActiveSupport::Deprecation.silence { assert !ActiveRecord::Base.connection.table_exists?("horses"), "horses should not exist" }
266
351
  end
267
352
 
268
353
  def test_migrate_down_with_table_name_prefix
@@ -271,13 +356,20 @@ module ActiveRecord
271
356
  migration = InvertibleMigration.new
272
357
  migration.migrate(:up)
273
358
  assert_nothing_raised { migration.migrate(:down) }
274
- assert !ActiveRecord::Base.connection.table_exists?("p_horses_s"), "p_horses_s should not exist"
359
+ ActiveSupport::Deprecation.silence { assert !ActiveRecord::Base.connection.table_exists?("p_horses_s"), "p_horses_s should not exist" }
275
360
  ensure
276
361
  ActiveRecord::Base.table_name_prefix = ActiveRecord::Base.table_name_suffix = ''
277
362
  end
278
363
 
364
+ def test_migrations_can_handle_foreign_keys_to_specific_tables
365
+ migration = RevertCustomForeignKeyTable.new
366
+ InvertibleMigration.migrate(:up)
367
+ migration.migrate(:up)
368
+ migration.migrate(:down)
369
+ end
370
+
279
371
  # MySQL 5.7 and Oracle do not allow to create duplicate indexes on the same columns
280
- unless current_adapter?(:MysqlAdapter, :Mysql2Adapter, :OracleAdapter)
372
+ unless current_adapter?(:Mysql2Adapter, :OracleAdapter)
281
373
  def test_migrate_revert_add_index_with_name
282
374
  RevertNamedIndexMigration1.new.migrate(:up)
283
375
  RevertNamedIndexMigration2.new.migrate(:up)
@@ -7,7 +7,6 @@ require 'models/tag'
7
7
  require 'models/comment'
8
8
 
9
9
  module JsonSerializationHelpers
10
-
11
10
  private
12
11
 
13
12
  def set_include_root_in_json(value)
@@ -21,7 +20,6 @@ end
21
20
 
22
21
  class JsonSerializationTest < ActiveRecord::TestCase
23
22
  include JsonSerializationHelpers
24
- fixtures :authors, :author_addresses
25
23
 
26
24
  class NamespacedContact < Contact
27
25
  column :name, :string
@@ -103,6 +101,17 @@ class JsonSerializationTest < ActiveRecord::TestCase
103
101
  assert_match %r{"favorite_quote":"Constraints are liberating"}, methods_json
104
102
  end
105
103
 
104
+ def test_uses_serializable_hash_with_frozen_hash
105
+ def @contact.serializable_hash(options = nil)
106
+ super({ only: %w(name) }.freeze)
107
+ end
108
+
109
+ json = @contact.to_json
110
+ assert_match %r{"name":"Konata Izumi"}, json
111
+ assert_no_match %r{awesome}, json
112
+ assert_no_match %r{age}, json
113
+ end
114
+
106
115
  def test_uses_serializable_hash_with_only_option
107
116
  def @contact.serializable_hash(options=nil)
108
117
  super(only: %w(name))
@@ -29,7 +29,7 @@ end
29
29
  class OptimisticLockingTest < ActiveRecord::TestCase
30
30
  fixtures :people, :legacy_things, :references, :string_key_objects, :peoples_treasures
31
31
 
32
- def test_lock_version_is_incremented
32
+ def test_quote_value_passed_lock_col
33
33
  p1 = Person.find(1)
34
34
  assert_equal 0, p1.lock_version
35
35
 
@@ -169,6 +169,12 @@ class OptimisticLockingTest < ActiveRecord::TestCase
169
169
  assert_equal 1, p1.lock_version
170
170
  end
171
171
 
172
+ def test_lock_new_when_explicitly_passing_nil
173
+ p1 = Person.new(:first_name => 'anika', lock_version: nil)
174
+ p1.save!
175
+ assert_equal 0, p1.lock_version
176
+ end
177
+
172
178
  def test_touch_existing_lock
173
179
  p1 = Person.find(1)
174
180
  assert_equal 0, p1.lock_version
@@ -177,6 +183,16 @@ class OptimisticLockingTest < ActiveRecord::TestCase
177
183
  assert_equal 1, p1.lock_version
178
184
  end
179
185
 
186
+ def test_touch_stale_object
187
+ person = Person.create!(first_name: 'Mehmet Emin')
188
+ stale_person = Person.find(person.id)
189
+ person.update_attribute(:gender, 'M')
190
+
191
+ assert_raises(ActiveRecord::StaleObjectError) do
192
+ stale_person.touch
193
+ end
194
+ end
195
+
180
196
  def test_lock_column_name_existing
181
197
  t1 = LegacyThing.find(1)
182
198
  t2 = LegacyThing.find(1)
@@ -260,7 +276,7 @@ class OptimisticLockingTest < ActiveRecord::TestCase
260
276
  car.wheels << Wheel.create!
261
277
  end
262
278
  assert_difference 'car.wheels.count', -1 do
263
- car.destroy
279
+ car.reload.destroy
264
280
  end
265
281
  assert car.destroyed?
266
282
  end
@@ -285,10 +301,10 @@ end
285
301
  class OptimisticLockingWithSchemaChangeTest < ActiveRecord::TestCase
286
302
  fixtures :people, :legacy_things, :references
287
303
 
288
- # need to disable transactional fixtures, because otherwise the sqlite3
304
+ # need to disable transactional tests, because otherwise the sqlite3
289
305
  # adapter (at least) chokes when we try and change the schema in the middle
290
306
  # of a test (see test_increment_counter_*).
291
- self.use_transactional_fixtures = false
307
+ self.use_transactional_tests = false
292
308
 
293
309
  { :lock_version => Person, :custom_lock_version => LegacyThing }.each do |name, model|
294
310
  define_method("test_increment_counter_updates_#{name}") do
@@ -365,7 +381,7 @@ end
365
381
  # (See exec vs. async_exec in the PostgreSQL adapter.)
366
382
  unless in_memory_db?
367
383
  class PessimisticLockingTest < ActiveRecord::TestCase
368
- self.use_transactional_fixtures = false
384
+ self.use_transactional_tests = false
369
385
  fixtures :people, :readers
370
386
 
371
387
  def setup
@@ -431,7 +447,7 @@ unless in_memory_db?
431
447
  def test_lock_sending_custom_lock_statement
432
448
  Person.transaction do
433
449
  person = Person.find(1)
434
- assert_sql(/LIMIT 1 FOR SHARE NOWAIT/) do
450
+ assert_sql(/LIMIT \$?\d FOR SHARE NOWAIT/) do
435
451
  person.lock!('FOR SHARE NOWAIT')
436
452
  end
437
453
  end