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
@@ -22,6 +22,16 @@ module ActiveRecord
22
22
  ], result.to_hash
23
23
  end
24
24
 
25
+ test "first returns first row as a hash" do
26
+ assert_equal(
27
+ {'col_1' => 'row 1 col 1', 'col_2' => 'row 1 col 2'}, result.first)
28
+ end
29
+
30
+ test "last returns last row as a hash" do
31
+ assert_equal(
32
+ {'col_1' => 'row 3 col 1', 'col_2' => 'row 3 col 2'}, result.last)
33
+ end
34
+
25
35
  test "each with block returns row hashes" do
26
36
  result.each do |row|
27
37
  assert_equal ['col_1', 'col_2'], row.keys
@@ -7,24 +7,13 @@ class SanitizeTest < ActiveRecord::TestCase
7
7
  def setup
8
8
  end
9
9
 
10
- def test_sanitize_sql_hash_handles_associations
11
- quoted_bambi = ActiveRecord::Base.connection.quote("Bambi")
12
- quoted_column_name = ActiveRecord::Base.connection.quote_column_name("name")
13
- quoted_table_name = ActiveRecord::Base.connection.quote_table_name("adorable_animals")
14
- expected_value = "#{quoted_table_name}.#{quoted_column_name} = #{quoted_bambi}"
15
-
16
- assert_deprecated do
17
- assert_equal expected_value, Binary.send(:sanitize_sql_hash, {adorable_animals: {name: 'Bambi'}})
18
- end
19
- end
20
-
21
10
  def test_sanitize_sql_array_handles_string_interpolation
22
11
  quoted_bambi = ActiveRecord::Base.connection.quote_string("Bambi")
23
- assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=%s", "Bambi"])
24
- assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=%s", "Bambi".mb_chars])
12
+ assert_equal "name='#{quoted_bambi}'", Binary.send(:sanitize_sql_array, ["name='%s'", "Bambi"])
13
+ assert_equal "name='#{quoted_bambi}'", Binary.send(:sanitize_sql_array, ["name='%s'", "Bambi".mb_chars])
25
14
  quoted_bambi_and_thumper = ActiveRecord::Base.connection.quote_string("Bambi\nand\nThumper")
26
- assert_equal "name=#{quoted_bambi_and_thumper}",Binary.send(:sanitize_sql_array, ["name=%s", "Bambi\nand\nThumper"])
27
- assert_equal "name=#{quoted_bambi_and_thumper}",Binary.send(:sanitize_sql_array, ["name=%s", "Bambi\nand\nThumper".mb_chars])
15
+ assert_equal "name='#{quoted_bambi_and_thumper}'",Binary.send(:sanitize_sql_array, ["name='%s'", "Bambi\nand\nThumper"])
16
+ assert_equal "name='#{quoted_bambi_and_thumper}'",Binary.send(:sanitize_sql_array, ["name='%s'", "Bambi\nand\nThumper".mb_chars])
28
17
  end
29
18
 
30
19
  def test_sanitize_sql_array_handles_bind_variables
@@ -36,6 +25,16 @@ class SanitizeTest < ActiveRecord::TestCase
36
25
  assert_equal "name=#{quoted_bambi_and_thumper}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi\nand\nThumper".mb_chars])
37
26
  end
38
27
 
28
+ def test_sanitize_sql_array_handles_named_bind_variables
29
+ quoted_bambi = ActiveRecord::Base.connection.quote("Bambi")
30
+ assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=:name", name: "Bambi"])
31
+ assert_equal "name=#{quoted_bambi} AND id=1", Binary.send(:sanitize_sql_array, ["name=:name AND id=:id", name: "Bambi", id: 1])
32
+
33
+ quoted_bambi_and_thumper = ActiveRecord::Base.connection.quote("Bambi\nand\nThumper")
34
+ assert_equal "name=#{quoted_bambi_and_thumper}", Binary.send(:sanitize_sql_array, ["name=:name", name: "Bambi\nand\nThumper"])
35
+ assert_equal "name=#{quoted_bambi_and_thumper} AND name2=#{quoted_bambi_and_thumper}", Binary.send(:sanitize_sql_array, ["name=:name AND name2=:name", name: "Bambi\nand\nThumper"])
36
+ end
37
+
39
38
  def test_sanitize_sql_array_handles_relations
40
39
  david = Author.create!(name: 'David')
41
40
  david_posts = david.posts.select(:id)
@@ -80,4 +79,98 @@ class SanitizeTest < ActiveRecord::TestCase
80
79
  searchable_post.search("20% _reduction_!").to_a
81
80
  end
82
81
  end
82
+
83
+ def test_bind_arity
84
+ assert_nothing_raised { bind '' }
85
+ assert_raise(ActiveRecord::PreparedStatementInvalid) { bind '', 1 }
86
+
87
+ assert_raise(ActiveRecord::PreparedStatementInvalid) { bind '?' }
88
+ assert_nothing_raised { bind '?', 1 }
89
+ assert_raise(ActiveRecord::PreparedStatementInvalid) { bind '?', 1, 1 }
90
+ end
91
+
92
+ def test_named_bind_variables
93
+ assert_equal '1', bind(':a', :a => 1) # ' ruby-mode
94
+ assert_equal '1 1', bind(':a :a', :a => 1) # ' ruby-mode
95
+
96
+ assert_nothing_raised { bind("'+00:00'", :foo => "bar") }
97
+ end
98
+
99
+ def test_named_bind_arity
100
+ assert_nothing_raised { bind "name = :name", { name: "37signals" } }
101
+ assert_nothing_raised { bind "name = :name", { name: "37signals", id: 1 } }
102
+ assert_raise(ActiveRecord::PreparedStatementInvalid) { bind "name = :name", { id: 1 } }
103
+ end
104
+
105
+ class SimpleEnumerable
106
+ include Enumerable
107
+
108
+ def initialize(ary)
109
+ @ary = ary
110
+ end
111
+
112
+ def each(&b)
113
+ @ary.each(&b)
114
+ end
115
+ end
116
+
117
+ def test_bind_enumerable
118
+ quoted_abc = %(#{ActiveRecord::Base.connection.quote('a')},#{ActiveRecord::Base.connection.quote('b')},#{ActiveRecord::Base.connection.quote('c')})
119
+
120
+ assert_equal '1,2,3', bind('?', [1, 2, 3])
121
+ assert_equal quoted_abc, bind('?', %w(a b c))
122
+
123
+ assert_equal '1,2,3', bind(':a', :a => [1, 2, 3])
124
+ assert_equal quoted_abc, bind(':a', :a => %w(a b c)) # '
125
+
126
+ assert_equal '1,2,3', bind('?', SimpleEnumerable.new([1, 2, 3]))
127
+ assert_equal quoted_abc, bind('?', SimpleEnumerable.new(%w(a b c)))
128
+
129
+ assert_equal '1,2,3', bind(':a', :a => SimpleEnumerable.new([1, 2, 3]))
130
+ assert_equal quoted_abc, bind(':a', :a => SimpleEnumerable.new(%w(a b c))) # '
131
+ end
132
+
133
+ def test_bind_empty_enumerable
134
+ quoted_nil = ActiveRecord::Base.connection.quote(nil)
135
+ assert_equal quoted_nil, bind('?', [])
136
+ assert_equal " in (#{quoted_nil})", bind(' in (?)', [])
137
+ assert_equal "foo in (#{quoted_nil})", bind('foo in (?)', [])
138
+ end
139
+
140
+ def test_bind_empty_string
141
+ quoted_empty = ActiveRecord::Base.connection.quote('')
142
+ assert_equal quoted_empty, bind('?', '')
143
+ end
144
+
145
+ def test_bind_chars
146
+ quoted_bambi = ActiveRecord::Base.connection.quote("Bambi")
147
+ quoted_bambi_and_thumper = ActiveRecord::Base.connection.quote("Bambi\nand\nThumper")
148
+ assert_equal "name=#{quoted_bambi}", bind('name=?', "Bambi")
149
+ assert_equal "name=#{quoted_bambi_and_thumper}", bind('name=?', "Bambi\nand\nThumper")
150
+ assert_equal "name=#{quoted_bambi}", bind('name=?', "Bambi".mb_chars)
151
+ assert_equal "name=#{quoted_bambi_and_thumper}", bind('name=?', "Bambi\nand\nThumper".mb_chars)
152
+ end
153
+
154
+ def test_bind_record
155
+ o = Struct.new(:quoted_id).new(1)
156
+ assert_equal '1', bind('?', o)
157
+
158
+ os = [o] * 3
159
+ assert_equal '1,1,1', bind('?', os)
160
+ end
161
+
162
+ def test_named_bind_with_postgresql_type_casts
163
+ l = Proc.new { bind(":a::integer '2009-01-01'::date", :a => '10') }
164
+ assert_nothing_raised(&l)
165
+ assert_equal "#{ActiveRecord::Base.connection.quote('10')}::integer '2009-01-01'::date", l.call
166
+ end
167
+
168
+ private
169
+ def bind(statement, *vars)
170
+ if vars.first.is_a?(Hash)
171
+ ActiveRecord::Base.send(:replace_named_bind_variables, statement, vars.first)
172
+ else
173
+ ActiveRecord::Base.send(:replace_bind_variables, statement, vars)
174
+ end
175
+ end
83
176
  end
@@ -3,7 +3,7 @@ require 'support/schema_dumping_helper'
3
3
 
4
4
  class SchemaDumperTest < ActiveRecord::TestCase
5
5
  include SchemaDumpingHelper
6
- self.use_transactional_fixtures = false
6
+ self.use_transactional_tests = false
7
7
 
8
8
  setup do
9
9
  ActiveRecord::SchemaMigration.create_table
@@ -17,6 +17,12 @@ class SchemaDumperTest < ActiveRecord::TestCase
17
17
  dump_all_table_schema []
18
18
  end
19
19
 
20
+ def test_dump_schema_information_with_empty_versions
21
+ ActiveRecord::SchemaMigration.delete_all
22
+ schema_info = ActiveRecord::Base.connection.dump_schema_information
23
+ assert_no_match(/INSERT INTO/, schema_info)
24
+ end
25
+
20
26
  def test_dump_schema_information_outputs_lexically_ordered_versions
21
27
  versions = %w{ 20100101010101 20100201010101 20100301010101 }
22
28
  versions.reverse_each do |v|
@@ -29,15 +35,31 @@ class SchemaDumperTest < ActiveRecord::TestCase
29
35
  ActiveRecord::SchemaMigration.delete_all
30
36
  end
31
37
 
32
- def test_magic_comment
33
- assert_match "# encoding: #{Encoding.default_external.name}", standard_dump
38
+ if current_adapter?(:SQLite3Adapter)
39
+ %w{3.7.8 3.7.11 3.7.12}.each do |version_string|
40
+ test "dumps schema version for sqlite version #{version_string}" do
41
+ version = ActiveRecord::ConnectionAdapters::SQLite3Adapter::Version.new(version_string)
42
+ ActiveRecord::Base.connection.stubs(:sqlite_version).returns(version)
43
+
44
+ versions = %w{ 20100101010101 20100201010101 20100301010101 }
45
+ versions.reverse_each do |v|
46
+ ActiveRecord::SchemaMigration.create!(:version => v)
47
+ end
48
+
49
+ schema_info = ActiveRecord::Base.connection.dump_schema_information
50
+ assert_match(/20100201010101.*20100301010101/m, schema_info)
51
+ ActiveRecord::SchemaMigration.delete_all
52
+ end
53
+ end
34
54
  end
35
55
 
36
56
  def test_schema_dump
37
57
  output = standard_dump
38
58
  assert_match %r{create_table "accounts"}, output
39
59
  assert_match %r{create_table "authors"}, output
60
+ assert_no_match %r{(?<=, ) do \|t\|}, output
40
61
  assert_no_match %r{create_table "schema_migrations"}, output
62
+ assert_no_match %r{create_table "ar_internal_metadata"}, output
41
63
  end
42
64
 
43
65
  def test_schema_dump_uses_force_cascade_on_create_table
@@ -78,10 +100,10 @@ class SchemaDumperTest < ActiveRecord::TestCase
78
100
  next if column_set.empty?
79
101
 
80
102
  lengths = column_set.map do |column|
81
- if match = column.match(/t\.(?:integer|decimal|float|datetime|timestamp|time|date|text|binary|string|boolean|uuid|point)\s+"/)
103
+ if match = column.match(/\bt\.\w+\s+(?="\w+?")/)
82
104
  match[0].length
83
105
  end
84
- end
106
+ end.compact
85
107
 
86
108
  assert_equal 1, lengths.uniq.length
87
109
  end
@@ -122,8 +144,8 @@ class SchemaDumperTest < ActiveRecord::TestCase
122
144
 
123
145
  assert_match %r{c_int_4.*}, output
124
146
  assert_no_match %r{c_int_4.*limit:}, output
125
- elsif current_adapter?(:MysqlAdapter, :Mysql2Adapter)
126
- assert_match %r{c_int_without_limit.*limit: 4}, output
147
+ elsif current_adapter?(:Mysql2Adapter)
148
+ assert_match %r{c_int_without_limit"$}, output
127
149
 
128
150
  assert_match %r{c_int_1.*limit: 1}, output
129
151
  assert_match %r{c_int_2.*limit: 2}, output
@@ -151,10 +173,10 @@ class SchemaDumperTest < ActiveRecord::TestCase
151
173
  assert_match %r{c_int_7.*limit: 7}, output
152
174
  assert_match %r{c_int_8.*limit: 8}, output
153
175
  else
154
- assert_match %r{c_int_5.*limit: 8}, output
155
- assert_match %r{c_int_6.*limit: 8}, output
156
- assert_match %r{c_int_7.*limit: 8}, output
157
- assert_match %r{c_int_8.*limit: 8}, output
176
+ assert_match %r{t\.bigint\s+"c_int_5"$}, output
177
+ assert_match %r{t\.bigint\s+"c_int_6"$}, output
178
+ assert_match %r{t\.bigint\s+"c_int_7"$}, output
179
+ assert_match %r{t\.bigint\s+"c_int_8"$}, output
158
180
  end
159
181
  end
160
182
 
@@ -163,6 +185,7 @@ class SchemaDumperTest < ActiveRecord::TestCase
163
185
  assert_no_match %r{create_table "accounts"}, output
164
186
  assert_match %r{create_table "authors"}, output
165
187
  assert_no_match %r{create_table "schema_migrations"}, output
188
+ assert_no_match %r{create_table "ar_internal_metadata"}, output
166
189
  end
167
190
 
168
191
  def test_schema_dump_with_regexp_ignored_table
@@ -170,27 +193,30 @@ class SchemaDumperTest < ActiveRecord::TestCase
170
193
  assert_no_match %r{create_table "accounts"}, output
171
194
  assert_match %r{create_table "authors"}, output
172
195
  assert_no_match %r{create_table "schema_migrations"}, output
196
+ assert_no_match %r{create_table "ar_internal_metadata"}, output
173
197
  end
174
198
 
175
199
  def test_schema_dumps_index_columns_in_right_order
176
- index_definition = standard_dump.split(/\n/).grep(/add_index.*companies/).first.strip
177
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter, :PostgreSQLAdapter)
178
- assert_equal 'add_index "companies", ["firm_id", "type", "rating"], name: "company_index", using: :btree', index_definition
200
+ index_definition = standard_dump.split(/\n/).grep(/t\.index.*company_index/).first.strip
201
+ if current_adapter?(:PostgreSQLAdapter)
202
+ assert_equal 't.index ["firm_id", "type", "rating"], name: "company_index", order: { rating: :desc }, using: :btree', index_definition
203
+ elsif current_adapter?(:Mysql2Adapter)
204
+ assert_equal 't.index ["firm_id", "type", "rating"], name: "company_index", length: { type: 10 }, using: :btree', index_definition
179
205
  else
180
- assert_equal 'add_index "companies", ["firm_id", "type", "rating"], name: "company_index"', index_definition
206
+ assert_equal 't.index ["firm_id", "type", "rating"], name: "company_index"', index_definition
181
207
  end
182
208
  end
183
209
 
184
210
  def test_schema_dumps_partial_indices
185
- index_definition = standard_dump.split(/\n/).grep(/add_index.*company_partial_index/).first.strip
211
+ index_definition = standard_dump.split(/\n/).grep(/t\.index.*company_partial_index/).first.strip
186
212
  if current_adapter?(:PostgreSQLAdapter)
187
- assert_equal 'add_index "companies", ["firm_id", "type"], name: "company_partial_index", where: "(rating > 10)", using: :btree', index_definition
188
- elsif current_adapter?(:MysqlAdapter, :Mysql2Adapter)
189
- assert_equal 'add_index "companies", ["firm_id", "type"], name: "company_partial_index", using: :btree', index_definition
213
+ assert_equal 't.index ["firm_id", "type"], name: "company_partial_index", where: "(rating > 10)", using: :btree', index_definition
214
+ elsif current_adapter?(:Mysql2Adapter)
215
+ assert_equal 't.index ["firm_id", "type"], name: "company_partial_index", using: :btree', index_definition
190
216
  elsif current_adapter?(:SQLite3Adapter) && ActiveRecord::Base.connection.supports_partial_index?
191
- assert_equal 'add_index "companies", ["firm_id", "type"], name: "company_partial_index", where: "rating > 10"', index_definition
217
+ assert_equal 't.index ["firm_id", "type"], name: "company_partial_index", where: "rating > 10"', index_definition
192
218
  else
193
- assert_equal 'add_index "companies", ["firm_id", "type"], name: "company_partial_index"', index_definition
219
+ assert_equal 't.index ["firm_id", "type"], name: "company_partial_index"', index_definition
194
220
  end
195
221
  end
196
222
 
@@ -206,28 +232,28 @@ class SchemaDumperTest < ActiveRecord::TestCase
206
232
  assert_match %r{t\.boolean\s+"has_fun",.+default: false}, output
207
233
  end
208
234
 
209
- if current_adapter?(:MysqlAdapter, :Mysql2Adapter)
235
+ if current_adapter?(:Mysql2Adapter)
210
236
  def test_schema_dump_should_add_default_value_for_mysql_text_field
211
237
  output = standard_dump
212
- assert_match %r{t.text\s+"body",\s+limit: 65535,\s+null: false$}, output
238
+ assert_match %r{t\.text\s+"body",\s+limit: 65535,\s+null: false$}, output
213
239
  end
214
240
 
215
241
  def test_schema_dump_includes_length_for_mysql_binary_fields
216
242
  output = standard_dump
217
- assert_match %r{t.binary\s+"var_binary",\s+limit: 255$}, output
218
- assert_match %r{t.binary\s+"var_binary_large",\s+limit: 4095$}, output
243
+ assert_match %r{t\.binary\s+"var_binary",\s+limit: 255$}, output
244
+ assert_match %r{t\.binary\s+"var_binary_large",\s+limit: 4095$}, output
219
245
  end
220
246
 
221
247
  def test_schema_dump_includes_length_for_mysql_blob_and_text_fields
222
248
  output = standard_dump
223
- assert_match %r{t.binary\s+"tiny_blob",\s+limit: 255$}, output
224
- assert_match %r{t.binary\s+"normal_blob",\s+limit: 65535$}, output
225
- assert_match %r{t.binary\s+"medium_blob",\s+limit: 16777215$}, output
226
- assert_match %r{t.binary\s+"long_blob",\s+limit: 4294967295$}, output
227
- assert_match %r{t.text\s+"tiny_text",\s+limit: 255$}, output
228
- assert_match %r{t.text\s+"normal_text",\s+limit: 65535$}, output
229
- assert_match %r{t.text\s+"medium_text",\s+limit: 16777215$}, output
230
- assert_match %r{t.text\s+"long_text",\s+limit: 4294967295$}, output
249
+ assert_match %r{t\.blob\s+"tiny_blob",\s+limit: 255$}, output
250
+ assert_match %r{t\.binary\s+"normal_blob",\s+limit: 65535$}, output
251
+ assert_match %r{t\.binary\s+"medium_blob",\s+limit: 16777215$}, output
252
+ assert_match %r{t\.binary\s+"long_blob",\s+limit: 4294967295$}, output
253
+ assert_match %r{t\.text\s+"tiny_text",\s+limit: 255$}, output
254
+ assert_match %r{t\.text\s+"normal_text",\s+limit: 65535$}, output
255
+ assert_match %r{t\.text\s+"medium_text",\s+limit: 16777215$}, output
256
+ assert_match %r{t\.text\s+"long_text",\s+limit: 4294967295$}, output
231
257
  end
232
258
 
233
259
  def test_schema_does_not_include_limit_for_emulated_mysql_boolean_fields
@@ -237,32 +263,35 @@ class SchemaDumperTest < ActiveRecord::TestCase
237
263
 
238
264
  def test_schema_dumps_index_type
239
265
  output = standard_dump
240
- assert_match %r{add_index "key_tests", \["awesome"\], name: "index_key_tests_on_awesome", type: :fulltext}, output
241
- assert_match %r{add_index "key_tests", \["pizza"\], name: "index_key_tests_on_pizza", using: :btree}, output
242
- end
243
- end
244
-
245
- if mysql_56?
246
- def test_schema_dump_includes_datetime_precision
247
- output = standard_dump
248
- assert_match %r{t.datetime\s+"written_on",\s+precision: 6$}, output
266
+ assert_match %r{t\.index \["awesome"\], name: "index_key_tests_on_awesome", type: :fulltext}, output
267
+ assert_match %r{t\.index \["pizza"\], name: "index_key_tests_on_pizza", using: :btree}, output
249
268
  end
250
269
  end
251
270
 
252
271
  def test_schema_dump_includes_decimal_options
253
272
  output = dump_all_table_schema([/^[^n]/])
254
- assert_match %r{precision: 3,[[:space:]]+scale: 2,[[:space:]]+default: 2.78}, output
273
+ assert_match %r{precision: 3,[[:space:]]+scale: 2,[[:space:]]+default: "2\.78"}, output
255
274
  end
256
275
 
257
276
  if current_adapter?(:PostgreSQLAdapter)
258
277
  def test_schema_dump_includes_bigint_default
259
278
  output = standard_dump
260
- assert_match %r{t.integer\s+"bigint_default",\s+limit: 8,\s+default: 0}, output
279
+ assert_match %r{t\.bigint\s+"bigint_default",\s+default: 0}, output
261
280
  end
262
281
 
263
282
  def test_schema_dump_includes_limit_on_array_type
264
283
  output = standard_dump
265
- assert_match %r{t\.integer\s+"big_int_data_points\",\s+limit: 8,\s+array: true}, output
284
+ assert_match %r{t\.bigint\s+"big_int_data_points\",\s+array: true}, output
285
+ end
286
+
287
+ def test_schema_dump_allows_array_of_decimal_defaults
288
+ output = standard_dump
289
+ assert_match %r{t\.decimal\s+"decimal_array_default",\s+default: \["1.23", "3.45"\],\s+array: true}, output
290
+ end
291
+
292
+ def test_schema_dump_expression_indices
293
+ index_definition = standard_dump.split(/\n/).grep(/t\.index.*company_expression_index/).first.strip
294
+ assert_equal 't.index "lower((name)::text)", name: "company_expression_index", using: :btree', index_definition
266
295
  end
267
296
 
268
297
  if ActiveRecord::Base.connection.supports_extensions?
@@ -280,89 +309,20 @@ class SchemaDumperTest < ActiveRecord::TestCase
280
309
  assert_no_match %r{enable_extension}, output
281
310
  end
282
311
  end
283
-
284
- def test_schema_dump_includes_xml_shorthand_definition
285
- output = standard_dump
286
- if %r{create_table "postgresql_xml_data_type"} =~ output
287
- assert_match %r{t.xml "data"}, output
288
- end
289
- end
290
-
291
- def test_schema_dump_includes_inet_shorthand_definition
292
- output = standard_dump
293
- if %r{create_table "postgresql_network_addresses"} =~ output
294
- assert_match %r{t.inet\s+"inet_address",\s+default: "192.168.1.1"}, output
295
- end
296
- end
297
-
298
- def test_schema_dump_includes_cidr_shorthand_definition
299
- output = standard_dump
300
- if %r{create_table "postgresql_network_addresses"} =~ output
301
- assert_match %r{t.cidr\s+"cidr_address",\s+default: "192.168.1.0/24"}, output
302
- end
303
- end
304
-
305
- def test_schema_dump_includes_macaddr_shorthand_definition
306
- output = standard_dump
307
- if %r{create_table "postgresql_network_addresses"} =~ output
308
- assert_match %r{t.macaddr\s+"mac_address",\s+default: "ff:ff:ff:ff:ff:ff"}, output
309
- end
310
- end
311
-
312
- def test_schema_dump_includes_uuid_shorthand_definition
313
- output = standard_dump
314
- if %r{create_table "postgresql_uuids"} =~ output
315
- assert_match %r{t.uuid "guid"}, output
316
- end
317
- end
318
-
319
- def test_schema_dump_includes_hstores_shorthand_definition
320
- output = standard_dump
321
- if %r{create_table "postgresql_hstores"} =~ output
322
- assert_match %r[t.hstore "hash_store", default: {}], output
323
- end
324
- end
325
-
326
- def test_schema_dump_includes_citext_shorthand_definition
327
- output = standard_dump
328
- if %r{create_table "postgresql_citext"} =~ output
329
- assert_match %r[t.citext "text_citext"], output
330
- end
331
- end
332
-
333
- def test_schema_dump_includes_ltrees_shorthand_definition
334
- output = standard_dump
335
- if %r{create_table "postgresql_ltrees"} =~ output
336
- assert_match %r[t.ltree "path"], output
337
- end
338
- end
339
-
340
- def test_schema_dump_includes_arrays_shorthand_definition
341
- output = standard_dump
342
- if %r{create_table "postgresql_arrays"} =~ output
343
- assert_match %r[t.text\s+"nicknames",\s+array: true], output
344
- assert_match %r[t.integer\s+"commission_by_quarter",\s+array: true], output
345
- end
346
- end
347
-
348
- def test_schema_dump_includes_tsvector_shorthand_definition
349
- output = standard_dump
350
- if %r{create_table "postgresql_tsvectors"} =~ output
351
- assert_match %r{t.tsvector "text_vector"}, output
352
- end
353
- end
354
312
  end
355
313
 
356
314
  def test_schema_dump_keeps_large_precision_integer_columns_as_decimal
357
315
  output = standard_dump
358
316
  # Oracle supports precision up to 38 and it identifies decimals with scale 0 as integers
359
317
  if current_adapter?(:OracleAdapter)
360
- assert_match %r{t.integer\s+"atoms_in_universe",\s+precision: 38}, output
361
- elsif current_adapter?(:IBM_DBAdapter)
318
+ assert_match %r{t\.integer\s+"atoms_in_universe",\s+precision: 38}, output
319
+ elsif current_adapter?(:IBM_DBAdapter)
362
320
  # DB2 supports precision up to 31
363
- assert_match %r{t.decimal\s+"atoms_in_universe",\s+precision: 31,\s+scale: 0}, output
321
+ assert_match %r{t.decimal\s+"atoms_in_universe",\s+precision: 31,\s+scale: 0}, output
322
+ elsif current_adapter?(:FbAdapter)
323
+ assert_match %r{t\.integer\s+"atoms_in_universe",\s+precision: 18}, output
364
324
  else
365
- assert_match %r{t.decimal\s+"atoms_in_universe",\s+precision: 55}, output
325
+ assert_match %r{t\.decimal\s+"atoms_in_universe",\s+precision: 55}, output
366
326
  end
367
327
  end
368
328
 
@@ -371,7 +331,7 @@ class SchemaDumperTest < ActiveRecord::TestCase
371
331
  match = output.match(%r{create_table "goofy_string_id"(.*)do.*\n(.*)\n})
372
332
  assert_not_nil(match, "goofy_string_id table not found")
373
333
  assert_match %r(id: false), match[1], "no table id not preserved"
374
- assert_match %r{t.string\s+"id",.*?null: false$}, match[2], "non-primary key id column not preserved"
334
+ assert_match %r{t\.string\s+"id",.*?null: false$}, match[2], "non-primary key id column not preserved"
375
335
  end
376
336
 
377
337
  def test_schema_dump_keeps_id_false_when_id_is_false_and_unique_not_null_column_added
@@ -391,7 +351,7 @@ class SchemaDumperTest < ActiveRecord::TestCase
391
351
  end
392
352
  end
393
353
 
394
- class CreateDogMigration < ActiveRecord::Migration
354
+ class CreateDogMigration < ActiveRecord::Migration::Current
395
355
  def up
396
356
  create_table("dog_owners") do |t|
397
357
  end
@@ -399,9 +359,9 @@ class SchemaDumperTest < ActiveRecord::TestCase
399
359
  create_table("dogs") do |t|
400
360
  t.column :name, :string
401
361
  t.column :owner_id, :integer
362
+ t.index [:name]
363
+ t.foreign_key :dog_owners, column: "owner_id" if supports_foreign_keys?
402
364
  end
403
- add_index "dogs", [:name]
404
- add_foreign_key :dogs, :dog_owners, column: "owner_id" if supports_foreign_keys?
405
365
  end
406
366
  def down
407
367
  drop_table("dogs")
@@ -421,6 +381,7 @@ class SchemaDumperTest < ActiveRecord::TestCase
421
381
  assert_no_match %r{create_table "foo_.+_bar"}, output
422
382
  assert_no_match %r{add_index "foo_.+_bar"}, output
423
383
  assert_no_match %r{create_table "schema_migrations"}, output
384
+ assert_no_match %r{create_table "ar_internal_metadata"}, output
424
385
 
425
386
  if ActiveRecord::Base.connection.supports_foreign_keys?
426
387
  assert_no_match %r{add_foreign_key "foo_.+_bar"}, output
@@ -432,6 +393,38 @@ class SchemaDumperTest < ActiveRecord::TestCase
432
393
  ActiveRecord::Base.table_name_suffix = ActiveRecord::Base.table_name_prefix = ''
433
394
  $stdout = original
434
395
  end
396
+
397
+ def test_schema_dump_with_table_name_prefix_and_ignoring_tables
398
+ original, $stdout = $stdout, StringIO.new
399
+
400
+ create_cat_migration = Class.new(ActiveRecord::Migration::Current) do
401
+ def change
402
+ create_table("cats") do |t|
403
+ end
404
+ create_table("omg_cats") do |t|
405
+ end
406
+ end
407
+ end
408
+
409
+ original_table_name_prefix = ActiveRecord::Base.table_name_prefix
410
+ original_schema_dumper_ignore_tables = ActiveRecord::SchemaDumper.ignore_tables
411
+ ActiveRecord::Base.table_name_prefix = 'omg_'
412
+ ActiveRecord::SchemaDumper.ignore_tables = ["cats"]
413
+ migration = create_cat_migration.new
414
+ migration.migrate(:up)
415
+
416
+ stream = StringIO.new
417
+ output = ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream).string
418
+
419
+ assert_match %r{create_table "omg_cats"}, output
420
+ refute_match %r{create_table "cats"}, output
421
+ ensure
422
+ migration.migrate(:down)
423
+ ActiveRecord::Base.table_name_prefix = original_table_name_prefix
424
+ ActiveRecord::SchemaDumper.ignore_tables = original_schema_dumper_ignore_tables
425
+
426
+ $stdout = original
427
+ end
435
428
  end
436
429
 
437
430
  class SchemaDumperDefaultsTest < ActiveRecord::TestCase
@@ -449,7 +442,8 @@ class SchemaDumperDefaultsTest < ActiveRecord::TestCase
449
442
 
450
443
  teardown do
451
444
  return unless @connection
452
- @connection.execute 'DROP TABLE defaults' if @connection.table_exists? 'defaults'
445
+ @connection.drop_table 'defaults'
446
+ #, if_exists: true
453
447
  end
454
448
 
455
449
  def test_schema_dump_defaults_with_universally_supported_types