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,5 @@
1
1
  require 'cases/helper'
2
+ require 'active_record/tasks/database_tasks'
2
3
 
3
4
  if current_adapter?(:PostgreSQLAdapter)
4
5
  module ActiveRecord
@@ -12,6 +13,13 @@ module ActiveRecord
12
13
 
13
14
  ActiveRecord::Base.stubs(:connection).returns(@connection)
14
15
  ActiveRecord::Base.stubs(:establish_connection).returns(true)
16
+
17
+ $stdout, @original_stdout = StringIO.new, $stdout
18
+ $stderr, @original_stderr = StringIO.new, $stderr
19
+ end
20
+
21
+ def teardown
22
+ $stdout, $stderr = @original_stdout, @original_stderr
15
23
  end
16
24
 
17
25
  def test_establishes_connection_to_postgresql_database
@@ -60,17 +68,23 @@ module ActiveRecord
60
68
  $stderr.expects(:puts).
61
69
  with("Couldn't create database for #{@configuration.inspect}")
62
70
 
71
+ assert_raises(Exception) { ActiveRecord::Tasks::DatabaseTasks.create @configuration }
72
+ end
73
+
74
+ def test_when_database_created_successfully_outputs_info_to_stdout
63
75
  ActiveRecord::Tasks::DatabaseTasks.create @configuration
76
+
77
+ assert_equal $stdout.string, "Created database 'my-app-db'\n"
64
78
  end
65
79
 
66
80
  def test_create_when_database_exists_outputs_info_to_stderr
67
- $stderr.expects(:puts).with("my-app-db already exists").once
68
-
69
81
  ActiveRecord::Base.connection.stubs(:create_database).raises(
70
- ActiveRecord::StatementInvalid.new('database "my-app-db" already exists')
82
+ ActiveRecord::Tasks::DatabaseAlreadyExists
71
83
  )
72
84
 
73
85
  ActiveRecord::Tasks::DatabaseTasks.create @configuration
86
+
87
+ assert_equal $stderr.string, "Database 'my-app-db' already exists\n"
74
88
  end
75
89
  end
76
90
 
@@ -84,6 +98,13 @@ module ActiveRecord
84
98
 
85
99
  ActiveRecord::Base.stubs(:connection).returns(@connection)
86
100
  ActiveRecord::Base.stubs(:establish_connection).returns(true)
101
+
102
+ $stdout, @original_stdout = StringIO.new, $stdout
103
+ $stderr, @original_stderr = StringIO.new, $stderr
104
+ end
105
+
106
+ def teardown
107
+ $stdout, $stderr = @original_stdout, @original_stderr
87
108
  end
88
109
 
89
110
  def test_establishes_connection_to_postgresql_database
@@ -101,6 +122,12 @@ module ActiveRecord
101
122
 
102
123
  ActiveRecord::Tasks::DatabaseTasks.drop @configuration
103
124
  end
125
+
126
+ def test_when_database_dropped_successfully_outputs_info_to_stdout
127
+ ActiveRecord::Tasks::DatabaseTasks.drop @configuration
128
+
129
+ assert_equal $stdout.string, "Dropped database 'my-app-db'\n"
130
+ end
104
131
  end
105
132
 
106
133
  class PostgreSQLPurgeTest < ActiveRecord::TestCase
@@ -216,6 +243,34 @@ module ActiveRecord
216
243
 
217
244
  ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
218
245
  end
246
+
247
+ def test_structure_dump_with_schema_search_path_and_dump_schemas_all
248
+ @configuration['schema_search_path'] = 'foo,bar'
249
+
250
+ Kernel.expects(:system).with("pg_dump", '-s', '-x', '-O', '-f', @filename, 'my-app-db').returns(true)
251
+
252
+ with_dump_schemas(:all) do
253
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
254
+ end
255
+ end
256
+
257
+ def test_structure_dump_with_dump_schemas_string
258
+ Kernel.expects(:system).with("pg_dump", '-s', '-x', '-O', '-f', @filename, '--schema=foo', '--schema=bar', "my-app-db").returns(true)
259
+
260
+ with_dump_schemas('foo,bar') do
261
+ ActiveRecord::Tasks::DatabaseTasks.structure_dump(@configuration, @filename)
262
+ end
263
+ end
264
+
265
+ private
266
+
267
+ def with_dump_schemas(value, &block)
268
+ old_dump_schemas = ActiveRecord::Base.dump_schemas
269
+ ActiveRecord::Base.dump_schemas = value
270
+ yield
271
+ ensure
272
+ ActiveRecord::Base.dump_schemas = old_dump_schemas
273
+ end
219
274
  end
220
275
 
221
276
  class PostgreSQLStructureLoadTest < ActiveRecord::TestCase
@@ -233,18 +288,17 @@ module ActiveRecord
233
288
 
234
289
  def test_structure_load
235
290
  filename = "awesome-file.sql"
236
- Kernel.expects(:system).with('psql', '-q', '-f', filename, 'my-app-db').returns(true)
291
+ Kernel.expects(:system).with('psql', '-q', '-f', filename, @configuration['database']).returns(true)
237
292
 
238
293
  ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
239
294
  end
240
295
 
241
296
  def test_structure_load_accepts_path_with_spaces
242
297
  filename = "awesome file.sql"
243
- Kernel.expects(:system).with('psql', '-q', '-f', 'awesome file.sql', 'my-app-db').returns(true)
298
+ Kernel.expects(:system).with('psql', '-q', '-f', filename, @configuration['database']).returns(true)
244
299
 
245
300
  ActiveRecord::Tasks::DatabaseTasks.structure_load(@configuration, filename)
246
301
  end
247
302
  end
248
-
249
303
  end
250
304
  end
@@ -1,4 +1,5 @@
1
1
  require 'cases/helper'
2
+ require 'active_record/tasks/database_tasks'
2
3
  require 'pathname'
3
4
 
4
5
  if current_adapter?(:SQLite3Adapter)
@@ -15,6 +16,13 @@ module ActiveRecord
15
16
  File.stubs(:exist?).returns(false)
16
17
  ActiveRecord::Base.stubs(:connection).returns(@connection)
17
18
  ActiveRecord::Base.stubs(:establish_connection).returns(true)
19
+
20
+ $stdout, @original_stdout = StringIO.new, $stdout
21
+ $stderr, @original_stderr = StringIO.new, $stderr
22
+ end
23
+
24
+ def teardown
25
+ $stdout, $stderr = @original_stdout, @original_stderr
18
26
  end
19
27
 
20
28
  def test_db_checks_database_exists
@@ -23,12 +31,18 @@ module ActiveRecord
23
31
  ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root'
24
32
  end
25
33
 
34
+ def test_when_db_created_successfully_outputs_info_to_stdout
35
+ ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root'
36
+
37
+ assert_equal $stdout.string, "Created database '#{@database}'\n"
38
+ end
39
+
26
40
  def test_db_create_when_file_exists
27
41
  File.stubs(:exist?).returns(true)
28
42
 
29
- $stderr.expects(:puts).with("#{@database} already exists")
30
-
31
43
  ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root'
44
+
45
+ assert_equal $stderr.string, "Database '#{@database}' already exists\n"
32
46
  end
33
47
 
34
48
  def test_db_create_with_file_does_nothing
@@ -53,7 +67,7 @@ module ActiveRecord
53
67
  $stderr.expects(:puts).
54
68
  with("Couldn't create database for #{@configuration.inspect}")
55
69
 
56
- ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root'
70
+ assert_raises(Exception) { ActiveRecord::Tasks::DatabaseTasks.create @configuration, '/rails/root' }
57
71
  end
58
72
  end
59
73
 
@@ -69,6 +83,13 @@ module ActiveRecord
69
83
  Pathname.stubs(:new).returns(@path)
70
84
  File.stubs(:join).returns('/former/relative/path')
71
85
  FileUtils.stubs(:rm).returns(true)
86
+
87
+ $stdout, @original_stdout = StringIO.new, $stdout
88
+ $stderr, @original_stderr = StringIO.new, $stderr
89
+ end
90
+
91
+ def teardown
92
+ $stdout, $stderr = @original_stdout, @original_stderr
72
93
  end
73
94
 
74
95
  def test_creates_path_from_database
@@ -103,6 +124,12 @@ module ActiveRecord
103
124
 
104
125
  ActiveRecord::Tasks::DatabaseTasks.drop @configuration, '/rails/root'
105
126
  end
127
+
128
+ def test_when_db_dropped_successfully_outputs_info_to_stdout
129
+ ActiveRecord::Tasks::DatabaseTasks.drop @configuration, '/rails/root'
130
+
131
+ assert_equal $stdout.string, "Dropped database '#{@database}'\n"
132
+ end
106
133
  end
107
134
 
108
135
  class SqliteDBCharsetTest < ActiveRecord::TestCase
@@ -1,10 +1,13 @@
1
1
  require 'active_support/test_case'
2
+ require 'active_support/testing/stream'
2
3
 
3
4
  module ActiveRecord
4
5
  # = Active Record Test Case
5
6
  #
6
7
  # Defines some test assertions to test against SQL queries.
7
8
  class TestCase < ActiveSupport::TestCase #:nodoc:
9
+ include ActiveSupport::Testing::Stream
10
+
8
11
  def teardown
9
12
  SQLCounter.clear_log
10
13
  end
@@ -13,23 +16,6 @@ module ActiveRecord
13
16
  assert_equal expected.to_s, actual.to_s, message
14
17
  end
15
18
 
16
- def capture(stream)
17
- stream = stream.to_s
18
- captured_stream = Tempfile.new(stream)
19
- stream_io = eval("$#{stream}")
20
- origin_stream = stream_io.dup
21
- stream_io.reopen(captured_stream)
22
-
23
- yield
24
-
25
- stream_io.rewind
26
- return captured_stream.read
27
- ensure
28
- captured_stream.close
29
- captured_stream.unlink
30
- stream_io.reopen(origin_stream)
31
- end
32
-
33
19
  def capture_sql
34
20
  SQLCounter.clear_log
35
21
  yield
@@ -43,7 +29,7 @@ module ActiveRecord
43
29
  patterns_to_match.each do |pattern|
44
30
  failed_patterns << pattern unless SQLCounter.log_all.any?{ |sql| pattern === sql }
45
31
  end
46
- assert failed_patterns.empty?, "Query pattern(s) #{failed_patterns.map{ |p| p.inspect }.join(', ')} not found.#{SQLCounter.log.size == 0 ? '' : "\nQueries:\n#{SQLCounter.log.join("\n")}"}"
32
+ assert failed_patterns.empty?, "Query pattern(s) #{failed_patterns.map(&:inspect).join(', ')} not found.#{SQLCounter.log.size == 0 ? '' : "\nQueries:\n#{SQLCounter.log.join("\n")}"}"
47
33
  end
48
34
 
49
35
  def assert_queries(num = 1, options = {})
@@ -77,6 +63,28 @@ module ActiveRecord
77
63
  model.reset_column_information
78
64
  model.column_names.include?(column_name.to_s)
79
65
  end
66
+
67
+ def frozen_error_class
68
+ Object.const_defined?(:FrozenError) ? FrozenError : RuntimeError
69
+ end
70
+ end
71
+
72
+ class PostgreSQLTestCase < TestCase
73
+ def self.run(*args)
74
+ super if current_adapter?(:PostgreSQLAdapter)
75
+ end
76
+ end
77
+
78
+ class Mysql2TestCase < TestCase
79
+ def self.run(*args)
80
+ super if current_adapter?(:Mysql2Adapter)
81
+ end
82
+ end
83
+
84
+ class SQLite3TestCase < TestCase
85
+ def self.run(*args)
86
+ super if current_adapter?(:SQLite3Adapter)
87
+ end
80
88
  end
81
89
 
82
90
  class SQLCounter
@@ -93,9 +101,9 @@ module ActiveRecord
93
101
  # ignored SQL, or better yet, use a different notification for the queries
94
102
  # instead examining the SQL content.
95
103
  oracle_ignored = [/^select .*nextval/i, /^SAVEPOINT/, /^ROLLBACK TO/, /^\s*select .* from all_triggers/im, /^\s*select .* from all_constraints/im, /^\s*select .* from all_tab_cols/im]
96
- mysql_ignored = [/^SHOW TABLES/i, /^SHOW FULL FIELDS/, /^SHOW CREATE TABLE /i, /^SHOW VARIABLES /]
104
+ mysql_ignored = [/^SHOW FULL TABLES/i, /^SHOW FULL FIELDS/, /^SHOW CREATE TABLE /i, /^SHOW VARIABLES /, /^\s*SELECT (?:column_name|table_name)\b.*\bFROM information_schema\.(?:key_column_usage|tables)\b/im]
97
105
  postgresql_ignored = [/^\s*select\b.*\bfrom\b.*pg_namespace\b/im, /^\s*select tablename\b.*from pg_tables\b/im, /^\s*select\b.*\battname\b.*\bfrom\b.*\bpg_attribute\b/im, /^SHOW search_path/i]
98
- sqlite3_ignored = [/^\s*SELECT name\b.*\bFROM sqlite_master/im]
106
+ sqlite3_ignored = [/^\s*SELECT name\b.*\bFROM sqlite_master/im, /^\s*SELECT sql\b.*\bFROM sqlite_master/im]
99
107
 
100
108
  [oracle_ignored, mysql_ignored, postgresql_ignored, sqlite3_ignored].each do |db_ignored_sql|
101
109
  ignored_sql.concat db_ignored_sql
@@ -0,0 +1,36 @@
1
+ require 'cases/helper'
2
+
3
+ class TestFixturesTest < ActiveRecord::TestCase
4
+ setup do
5
+ @klass = Class.new
6
+ @klass.send(:include, ActiveRecord::TestFixtures)
7
+ end
8
+
9
+ def test_deprecated_use_transactional_fixtures=
10
+ assert_deprecated 'use use_transactional_tests= instead' do
11
+ @klass.use_transactional_fixtures = true
12
+ end
13
+ end
14
+
15
+ def test_use_transactional_tests_prefers_use_transactional_fixtures
16
+ ActiveSupport::Deprecation.silence do
17
+ @klass.use_transactional_fixtures = false
18
+ end
19
+
20
+ assert_equal false, @klass.use_transactional_tests
21
+ end
22
+
23
+ def test_use_transactional_tests_defaults_to_true
24
+ ActiveSupport::Deprecation.silence do
25
+ @klass.use_transactional_fixtures = nil
26
+ end
27
+
28
+ assert_equal true, @klass.use_transactional_tests
29
+ end
30
+
31
+ def test_use_transactional_tests_can_be_overridden
32
+ @klass.use_transactional_tests = "foobar"
33
+
34
+ assert_equal "foobar", @klass.use_transactional_tests
35
+ end
36
+ end
@@ -0,0 +1,103 @@
1
+ require 'cases/helper'
2
+ require 'support/schema_dumping_helper'
3
+
4
+ if subsecond_precision_supported?
5
+ class TimePrecisionTest < ActiveRecord::TestCase
6
+ include SchemaDumpingHelper
7
+ self.use_transactional_tests = false
8
+
9
+ class Foo < ActiveRecord::Base; end
10
+
11
+ setup do
12
+ @connection = ActiveRecord::Base.connection
13
+ Foo.reset_column_information
14
+ end
15
+
16
+ teardown do
17
+ @connection.drop_table :foos
18
+ #, if_exists: true
19
+ end
20
+
21
+ def test_time_data_type_with_precision
22
+ @connection.create_table(:foos, force: true)
23
+ @connection.add_column :foos, :start, :time, precision: 3
24
+ @connection.add_column :foos, :finish, :time, precision: 6
25
+ assert_equal 3, Foo.columns_hash['start'].precision
26
+ assert_equal 6, Foo.columns_hash['finish'].precision
27
+ end
28
+
29
+ def test_time_precision_is_truncated_on_assignment
30
+ @connection.create_table(:foos, force: true)
31
+ @connection.add_column :foos, :start, :time, precision: 0
32
+ @connection.add_column :foos, :finish, :time, precision: 6
33
+
34
+ time = ::Time.now.change(nsec: 123456789)
35
+ foo = Foo.new(start: time, finish: time)
36
+
37
+ assert_equal 0, foo.start.nsec
38
+ assert_equal 123456000, foo.finish.nsec
39
+
40
+ foo.save!
41
+ foo.reload
42
+
43
+ assert_equal 0, foo.start.nsec
44
+ assert_equal 123456000, foo.finish.nsec
45
+ end
46
+
47
+ def test_passing_precision_to_time_does_not_set_limit
48
+ @connection.create_table(:foos, force: true) do |t|
49
+ t.time :start, precision: 3
50
+ t.time :finish, precision: 6
51
+ end
52
+ assert_nil Foo.columns_hash['start'].limit
53
+ assert_nil Foo.columns_hash['finish'].limit
54
+ end
55
+
56
+ def test_invalid_time_precision_raises_error
57
+ assert_raises ActiveRecord::ActiveRecordError do
58
+ @connection.create_table(:foos, force: true) do |t|
59
+ t.time :start, precision: 7
60
+ t.time :finish, precision: 7
61
+ end
62
+ end
63
+ end
64
+
65
+ def test_formatting_time_according_to_precision
66
+ @connection.create_table(:foos, force: true) do |t|
67
+ t.time :start, precision: 0
68
+ t.time :finish, precision: 4
69
+ end
70
+ time = ::Time.utc(2000, 1, 1, 12, 30, 0, 999999)
71
+ Foo.create!(start: time, finish: time)
72
+ assert foo = Foo.find_by(start: time)
73
+ assert_equal 1, Foo.where(finish: time).count
74
+ assert_equal time.to_s, foo.start.to_s
75
+ assert_equal time.to_s, foo.finish.to_s
76
+ assert_equal 000000, foo.start.usec
77
+ assert_equal 999900, foo.finish.usec
78
+ end
79
+
80
+ def test_schema_dump_includes_time_precision
81
+ @connection.create_table(:foos, force: true) do |t|
82
+ t.time :start, precision: 4
83
+ t.time :finish, precision: 6
84
+ end
85
+ output = dump_table_schema("foos")
86
+ assert_match %r{t\.time\s+"start",\s+precision: 4$}, output
87
+ assert_match %r{t\.time\s+"finish",\s+precision: 6$}, output
88
+ end
89
+
90
+ if current_adapter?(:PostgreSQLAdapter, :SQLServerAdapter)
91
+ def test_time_precision_with_zero_should_be_dumped
92
+ @connection.create_table(:foos, force: true) do |t|
93
+ t.time :start, precision: 0
94
+ t.time :finish, precision: 0
95
+ end
96
+ output = dump_table_schema("foos")
97
+ assert_match %r{t\.time\s+"start",\s+precision: 0$}, output
98
+ assert_match %r{t\.time\s+"finish",\s+precision: 0$}, output
99
+ end
100
+ end
101
+
102
+ end
103
+ end
@@ -73,9 +73,20 @@ class TimestampTest < ActiveRecord::TestCase
73
73
  assert_equal @previously_updated_at, @developer.updated_at
74
74
  end
75
75
 
76
+ def test_touching_updates_timestamp_with_given_time
77
+ previously_updated_at = @developer.updated_at
78
+ new_time = Time.utc(2015, 2, 16, 0, 0, 0)
79
+ @developer.touch(time: new_time)
80
+
81
+ assert_not_equal previously_updated_at, @developer.updated_at
82
+ assert_equal new_time, @developer.updated_at
83
+ end
84
+
76
85
  def test_touching_an_attribute_updates_timestamp
77
86
  previously_created_at = @developer.created_at
78
- @developer.touch(:created_at)
87
+ travel(1.second) do
88
+ @developer.touch(:created_at)
89
+ end
79
90
 
80
91
  assert !@developer.created_at_changed? , 'created_at should not be changed'
81
92
  assert !@developer.changed?, 'record should not be changed'
@@ -87,8 +98,23 @@ class TimestampTest < ActiveRecord::TestCase
87
98
  task = Task.first
88
99
  previous_value = task.ending
89
100
  task.touch(:ending)
101
+
102
+ now = Time.now.change(usec: 0)
103
+
90
104
  assert_not_equal previous_value, task.ending
91
- assert_in_delta Time.now, task.ending, 1
105
+ assert_in_delta now, task.ending, 1
106
+ end
107
+
108
+ def test_touching_an_attribute_updates_timestamp_with_given_time
109
+ previously_updated_at = @developer.updated_at
110
+ previously_created_at = @developer.created_at
111
+ new_time = Time.utc(2015, 2, 16, 4, 54, 0)
112
+ @developer.touch(:created_at, time: new_time)
113
+
114
+ assert_not_equal previously_created_at, @developer.created_at
115
+ assert_not_equal previously_updated_at, @developer.updated_at
116
+ assert_equal new_time, @developer.created_at
117
+ assert_equal new_time, @developer.updated_at
92
118
  end
93
119
 
94
120
  def test_touching_many_attributes_updates_them
@@ -97,10 +123,12 @@ class TimestampTest < ActiveRecord::TestCase
97
123
  previous_ending = task.ending
98
124
  task.touch(:starting, :ending)
99
125
 
126
+ now = Time.now.change(usec: 0)
127
+
100
128
  assert_not_equal previous_starting, task.starting
101
129
  assert_not_equal previous_ending, task.ending
102
- assert_in_delta Time.now, task.starting, 1
103
- assert_in_delta Time.now, task.ending, 1
130
+ assert_in_delta now, task.starting, 1
131
+ assert_in_delta now, task.ending, 1
104
132
  end
105
133
 
106
134
  def test_touching_a_record_without_timestamps_is_unexceptional
@@ -178,8 +206,10 @@ class TimestampTest < ActiveRecord::TestCase
178
206
  owner = pet.owner
179
207
  previously_owner_updated_at = owner.updated_at
180
208
 
181
- pet.name = "Fluffy the Third"
182
- pet.save
209
+ travel(1.second) do
210
+ pet.name = "Fluffy the Third"
211
+ pet.save
212
+ end
183
213
 
184
214
  assert_not_equal previously_owner_updated_at, pet.owner.updated_at
185
215
  end
@@ -189,7 +219,9 @@ class TimestampTest < ActiveRecord::TestCase
189
219
  owner = pet.owner
190
220
  previously_owner_updated_at = owner.updated_at
191
221
 
192
- pet.destroy
222
+ travel(1.second) do
223
+ pet.destroy
224
+ end
193
225
 
194
226
  assert_not_equal previously_owner_updated_at, pet.owner.updated_at
195
227
  end
@@ -233,8 +265,10 @@ class TimestampTest < ActiveRecord::TestCase
233
265
  owner.update_columns(happy_at: 3.days.ago)
234
266
  previously_owner_updated_at = owner.updated_at
235
267
 
236
- pet.name = "I'm a parrot"
237
- pet.save
268
+ travel(1.second) do
269
+ pet.name = "I'm a parrot"
270
+ pet.save
271
+ end
238
272
 
239
273
  assert_not_equal previously_owner_updated_at, pet.owner.updated_at
240
274
  end
@@ -440,7 +474,7 @@ end
440
474
 
441
475
  class TimestampsWithoutTransactionTest < ActiveRecord::TestCase
442
476
  include DdlHelper
443
- self.use_transactional_fixtures = false
477
+ self.use_transactional_tests = false
444
478
 
445
479
  class TimestampAttributePost < ActiveRecord::Base
446
480
  attr_accessor :created_at, :updated_at