activerecord 2.3.18 → 3.2.22

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activerecord might be problematic. Click here for more details.

Files changed (454) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1014 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +222 -0
  5. data/examples/performance.rb +100 -126
  6. data/examples/simple.rb +14 -0
  7. data/lib/active_record/aggregations.rb +93 -99
  8. data/lib/active_record/associations/alias_tracker.rb +76 -0
  9. data/lib/active_record/associations/association.rb +247 -0
  10. data/lib/active_record/associations/association_scope.rb +134 -0
  11. data/lib/active_record/associations/belongs_to_association.rb +54 -61
  12. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +17 -59
  13. data/lib/active_record/associations/builder/association.rb +55 -0
  14. data/lib/active_record/associations/builder/belongs_to.rb +88 -0
  15. data/lib/active_record/associations/builder/collection_association.rb +75 -0
  16. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +57 -0
  17. data/lib/active_record/associations/builder/has_many.rb +71 -0
  18. data/lib/active_record/associations/builder/has_one.rb +62 -0
  19. data/lib/active_record/associations/builder/singular_association.rb +32 -0
  20. data/lib/active_record/associations/collection_association.rb +580 -0
  21. data/lib/active_record/associations/collection_proxy.rb +133 -0
  22. data/lib/active_record/associations/has_and_belongs_to_many_association.rb +39 -119
  23. data/lib/active_record/associations/has_many_association.rb +60 -79
  24. data/lib/active_record/associations/has_many_through_association.rb +127 -206
  25. data/lib/active_record/associations/has_one_association.rb +55 -114
  26. data/lib/active_record/associations/has_one_through_association.rb +25 -26
  27. data/lib/active_record/associations/join_dependency/join_association.rb +159 -0
  28. data/lib/active_record/associations/join_dependency/join_base.rb +24 -0
  29. data/lib/active_record/associations/join_dependency/join_part.rb +78 -0
  30. data/lib/active_record/associations/join_dependency.rb +214 -0
  31. data/lib/active_record/associations/join_helper.rb +55 -0
  32. data/lib/active_record/associations/preloader/association.rb +125 -0
  33. data/lib/active_record/associations/preloader/belongs_to.rb +17 -0
  34. data/lib/active_record/associations/preloader/collection_association.rb +24 -0
  35. data/lib/active_record/associations/preloader/has_and_belongs_to_many.rb +60 -0
  36. data/lib/active_record/associations/preloader/has_many.rb +17 -0
  37. data/lib/active_record/associations/preloader/has_many_through.rb +15 -0
  38. data/lib/active_record/associations/preloader/has_one.rb +23 -0
  39. data/lib/active_record/associations/preloader/has_one_through.rb +9 -0
  40. data/lib/active_record/associations/preloader/singular_association.rb +21 -0
  41. data/lib/active_record/associations/preloader/through_association.rb +67 -0
  42. data/lib/active_record/associations/preloader.rb +181 -0
  43. data/lib/active_record/associations/singular_association.rb +64 -0
  44. data/lib/active_record/associations/through_association.rb +87 -0
  45. data/lib/active_record/associations.rb +693 -1337
  46. data/lib/active_record/attribute_assignment.rb +221 -0
  47. data/lib/active_record/attribute_methods/before_type_cast.rb +31 -0
  48. data/lib/active_record/attribute_methods/deprecated_underscore_read.rb +32 -0
  49. data/lib/active_record/attribute_methods/dirty.rb +111 -0
  50. data/lib/active_record/attribute_methods/primary_key.rb +114 -0
  51. data/lib/active_record/attribute_methods/query.rb +39 -0
  52. data/lib/active_record/attribute_methods/read.rb +136 -0
  53. data/lib/active_record/attribute_methods/serialization.rb +120 -0
  54. data/lib/active_record/attribute_methods/time_zone_conversion.rb +65 -0
  55. data/lib/active_record/attribute_methods/write.rb +70 -0
  56. data/lib/active_record/attribute_methods.rb +211 -339
  57. data/lib/active_record/autosave_association.rb +179 -149
  58. data/lib/active_record/base.rb +401 -2907
  59. data/lib/active_record/callbacks.rb +91 -176
  60. data/lib/active_record/coders/yaml_column.rb +41 -0
  61. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +236 -119
  62. data/lib/active_record/connection_adapters/abstract/connection_specification.rb +110 -58
  63. data/lib/active_record/connection_adapters/abstract/database_limits.rb +12 -11
  64. data/lib/active_record/connection_adapters/abstract/database_statements.rb +175 -74
  65. data/lib/active_record/connection_adapters/abstract/query_cache.rb +31 -35
  66. data/lib/active_record/connection_adapters/abstract/quoting.rb +71 -21
  67. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +81 -311
  68. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +194 -78
  69. data/lib/active_record/connection_adapters/abstract_adapter.rb +130 -83
  70. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +676 -0
  71. data/lib/active_record/connection_adapters/column.rb +296 -0
  72. data/lib/active_record/connection_adapters/mysql2_adapter.rb +280 -0
  73. data/lib/active_record/connection_adapters/mysql_adapter.rb +272 -493
  74. data/lib/active_record/connection_adapters/postgresql_adapter.rb +650 -405
  75. data/lib/active_record/connection_adapters/schema_cache.rb +69 -0
  76. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +30 -9
  77. data/lib/active_record/connection_adapters/sqlite_adapter.rb +276 -147
  78. data/lib/active_record/connection_adapters/statement_pool.rb +40 -0
  79. data/lib/active_record/counter_cache.rb +123 -0
  80. data/lib/active_record/dynamic_finder_match.rb +41 -14
  81. data/lib/active_record/dynamic_matchers.rb +84 -0
  82. data/lib/active_record/dynamic_scope_match.rb +13 -15
  83. data/lib/active_record/errors.rb +195 -0
  84. data/lib/active_record/explain.rb +86 -0
  85. data/lib/active_record/explain_subscriber.rb +25 -0
  86. data/lib/active_record/fixtures/file.rb +65 -0
  87. data/lib/active_record/fixtures.rb +695 -770
  88. data/lib/active_record/identity_map.rb +162 -0
  89. data/lib/active_record/inheritance.rb +174 -0
  90. data/lib/active_record/integration.rb +60 -0
  91. data/lib/active_record/locale/en.yml +9 -27
  92. data/lib/active_record/locking/optimistic.rb +76 -73
  93. data/lib/active_record/locking/pessimistic.rb +32 -10
  94. data/lib/active_record/log_subscriber.rb +72 -0
  95. data/lib/active_record/migration/command_recorder.rb +105 -0
  96. data/lib/active_record/migration.rb +415 -205
  97. data/lib/active_record/model_schema.rb +368 -0
  98. data/lib/active_record/nested_attributes.rb +153 -63
  99. data/lib/active_record/observer.rb +27 -103
  100. data/lib/active_record/persistence.rb +376 -0
  101. data/lib/active_record/query_cache.rb +49 -8
  102. data/lib/active_record/querying.rb +58 -0
  103. data/lib/active_record/railtie.rb +131 -0
  104. data/lib/active_record/railties/console_sandbox.rb +6 -0
  105. data/lib/active_record/railties/controller_runtime.rb +49 -0
  106. data/lib/active_record/railties/databases.rake +659 -0
  107. data/lib/active_record/railties/jdbcmysql_error.rb +16 -0
  108. data/lib/active_record/readonly_attributes.rb +26 -0
  109. data/lib/active_record/reflection.rb +269 -120
  110. data/lib/active_record/relation/batches.rb +90 -0
  111. data/lib/active_record/relation/calculations.rb +372 -0
  112. data/lib/active_record/relation/delegation.rb +49 -0
  113. data/lib/active_record/relation/finder_methods.rb +402 -0
  114. data/lib/active_record/relation/predicate_builder.rb +63 -0
  115. data/lib/active_record/relation/query_methods.rb +417 -0
  116. data/lib/active_record/relation/spawn_methods.rb +180 -0
  117. data/lib/active_record/relation.rb +537 -0
  118. data/lib/active_record/result.rb +40 -0
  119. data/lib/active_record/sanitization.rb +194 -0
  120. data/lib/active_record/schema.rb +9 -6
  121. data/lib/active_record/schema_dumper.rb +55 -32
  122. data/lib/active_record/scoping/default.rb +142 -0
  123. data/lib/active_record/scoping/named.rb +200 -0
  124. data/lib/active_record/scoping.rb +152 -0
  125. data/lib/active_record/serialization.rb +8 -91
  126. data/lib/active_record/serializers/xml_serializer.rb +43 -197
  127. data/lib/active_record/session_store.rb +129 -103
  128. data/lib/active_record/store.rb +52 -0
  129. data/lib/active_record/test_case.rb +30 -23
  130. data/lib/active_record/timestamp.rb +95 -52
  131. data/lib/active_record/transactions.rb +212 -66
  132. data/lib/active_record/translation.rb +22 -0
  133. data/lib/active_record/validations/associated.rb +43 -0
  134. data/lib/active_record/validations/uniqueness.rb +180 -0
  135. data/lib/active_record/validations.rb +43 -1106
  136. data/lib/active_record/version.rb +5 -4
  137. data/lib/active_record.rb +121 -48
  138. data/lib/rails/generators/active_record/migration/migration_generator.rb +25 -0
  139. data/lib/rails/generators/active_record/migration/templates/migration.rb +34 -0
  140. data/lib/rails/generators/active_record/migration.rb +15 -0
  141. data/lib/rails/generators/active_record/model/model_generator.rb +47 -0
  142. data/lib/rails/generators/active_record/model/templates/migration.rb +15 -0
  143. data/lib/rails/generators/active_record/model/templates/model.rb +12 -0
  144. data/lib/rails/generators/active_record/model/templates/module.rb +7 -0
  145. data/lib/rails/generators/active_record/observer/observer_generator.rb +15 -0
  146. data/lib/rails/generators/active_record/observer/templates/observer.rb +4 -0
  147. data/lib/rails/generators/active_record/session_migration/session_migration_generator.rb +25 -0
  148. data/lib/rails/generators/active_record/session_migration/templates/migration.rb +12 -0
  149. data/lib/rails/generators/active_record.rb +25 -0
  150. metadata +187 -363
  151. data/CHANGELOG +0 -5904
  152. data/README +0 -351
  153. data/RUNNING_UNIT_TESTS +0 -36
  154. data/Rakefile +0 -268
  155. data/install.rb +0 -30
  156. data/lib/active_record/association_preload.rb +0 -406
  157. data/lib/active_record/associations/association_collection.rb +0 -533
  158. data/lib/active_record/associations/association_proxy.rb +0 -288
  159. data/lib/active_record/batches.rb +0 -85
  160. data/lib/active_record/calculations.rb +0 -321
  161. data/lib/active_record/dirty.rb +0 -183
  162. data/lib/active_record/named_scope.rb +0 -197
  163. data/lib/active_record/serializers/json_serializer.rb +0 -91
  164. data/lib/activerecord.rb +0 -2
  165. data/test/assets/example.log +0 -1
  166. data/test/assets/flowers.jpg +0 -0
  167. data/test/cases/aaa_create_tables_test.rb +0 -24
  168. data/test/cases/active_schema_test_mysql.rb +0 -122
  169. data/test/cases/active_schema_test_postgresql.rb +0 -24
  170. data/test/cases/adapter_test.rb +0 -144
  171. data/test/cases/aggregations_test.rb +0 -167
  172. data/test/cases/ar_schema_test.rb +0 -32
  173. data/test/cases/associations/belongs_to_associations_test.rb +0 -438
  174. data/test/cases/associations/callbacks_test.rb +0 -161
  175. data/test/cases/associations/cascaded_eager_loading_test.rb +0 -131
  176. data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +0 -36
  177. data/test/cases/associations/eager_load_nested_include_test.rb +0 -131
  178. data/test/cases/associations/eager_load_nested_polymorphic_include.rb +0 -19
  179. data/test/cases/associations/eager_singularization_test.rb +0 -145
  180. data/test/cases/associations/eager_test.rb +0 -852
  181. data/test/cases/associations/extension_test.rb +0 -62
  182. data/test/cases/associations/habtm_join_table_test.rb +0 -56
  183. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +0 -827
  184. data/test/cases/associations/has_many_associations_test.rb +0 -1273
  185. data/test/cases/associations/has_many_through_associations_test.rb +0 -360
  186. data/test/cases/associations/has_one_associations_test.rb +0 -330
  187. data/test/cases/associations/has_one_through_associations_test.rb +0 -209
  188. data/test/cases/associations/inner_join_association_test.rb +0 -93
  189. data/test/cases/associations/inverse_associations_test.rb +0 -566
  190. data/test/cases/associations/join_model_test.rb +0 -712
  191. data/test/cases/associations_test.rb +0 -282
  192. data/test/cases/attribute_methods_test.rb +0 -305
  193. data/test/cases/autosave_association_test.rb +0 -1218
  194. data/test/cases/base_test.rb +0 -2166
  195. data/test/cases/batches_test.rb +0 -81
  196. data/test/cases/binary_test.rb +0 -30
  197. data/test/cases/calculations_test.rb +0 -360
  198. data/test/cases/callbacks_observers_test.rb +0 -38
  199. data/test/cases/callbacks_test.rb +0 -438
  200. data/test/cases/class_inheritable_attributes_test.rb +0 -32
  201. data/test/cases/column_alias_test.rb +0 -17
  202. data/test/cases/column_definition_test.rb +0 -70
  203. data/test/cases/connection_pool_test.rb +0 -25
  204. data/test/cases/connection_test_firebird.rb +0 -8
  205. data/test/cases/connection_test_mysql.rb +0 -65
  206. data/test/cases/copy_table_test_sqlite.rb +0 -80
  207. data/test/cases/counter_cache_test.rb +0 -84
  208. data/test/cases/database_statements_test.rb +0 -12
  209. data/test/cases/datatype_test_postgresql.rb +0 -204
  210. data/test/cases/date_time_test.rb +0 -37
  211. data/test/cases/default_test_firebird.rb +0 -16
  212. data/test/cases/defaults_test.rb +0 -111
  213. data/test/cases/deprecated_finder_test.rb +0 -30
  214. data/test/cases/dirty_test.rb +0 -316
  215. data/test/cases/finder_respond_to_test.rb +0 -76
  216. data/test/cases/finder_test.rb +0 -1098
  217. data/test/cases/fixtures_test.rb +0 -661
  218. data/test/cases/helper.rb +0 -68
  219. data/test/cases/i18n_test.rb +0 -46
  220. data/test/cases/inheritance_test.rb +0 -262
  221. data/test/cases/invalid_date_test.rb +0 -24
  222. data/test/cases/json_serialization_test.rb +0 -219
  223. data/test/cases/lifecycle_test.rb +0 -193
  224. data/test/cases/locking_test.rb +0 -350
  225. data/test/cases/method_scoping_test.rb +0 -704
  226. data/test/cases/migration_test.rb +0 -1649
  227. data/test/cases/migration_test_firebird.rb +0 -124
  228. data/test/cases/mixin_test.rb +0 -96
  229. data/test/cases/modules_test.rb +0 -109
  230. data/test/cases/multiple_db_test.rb +0 -85
  231. data/test/cases/named_scope_test.rb +0 -372
  232. data/test/cases/nested_attributes_test.rb +0 -840
  233. data/test/cases/pk_test.rb +0 -119
  234. data/test/cases/pooled_connections_test.rb +0 -103
  235. data/test/cases/query_cache_test.rb +0 -129
  236. data/test/cases/readonly_test.rb +0 -107
  237. data/test/cases/reflection_test.rb +0 -234
  238. data/test/cases/reload_models_test.rb +0 -22
  239. data/test/cases/repair_helper.rb +0 -50
  240. data/test/cases/reserved_word_test_mysql.rb +0 -176
  241. data/test/cases/sanitize_test.rb +0 -25
  242. data/test/cases/schema_authorization_test_postgresql.rb +0 -75
  243. data/test/cases/schema_dumper_test.rb +0 -211
  244. data/test/cases/schema_test_postgresql.rb +0 -178
  245. data/test/cases/serialization_test.rb +0 -47
  246. data/test/cases/sp_test_mysql.rb +0 -16
  247. data/test/cases/synonym_test_oracle.rb +0 -17
  248. data/test/cases/timestamp_test.rb +0 -75
  249. data/test/cases/transactions_test.rb +0 -543
  250. data/test/cases/unconnected_test.rb +0 -32
  251. data/test/cases/validations_i18n_test.rb +0 -925
  252. data/test/cases/validations_test.rb +0 -1684
  253. data/test/cases/xml_serialization_test.rb +0 -240
  254. data/test/cases/yaml_serialization_test.rb +0 -11
  255. data/test/config.rb +0 -5
  256. data/test/connections/jdbc_jdbcderby/connection.rb +0 -18
  257. data/test/connections/jdbc_jdbch2/connection.rb +0 -18
  258. data/test/connections/jdbc_jdbchsqldb/connection.rb +0 -18
  259. data/test/connections/jdbc_jdbcmysql/connection.rb +0 -26
  260. data/test/connections/jdbc_jdbcpostgresql/connection.rb +0 -26
  261. data/test/connections/jdbc_jdbcsqlite3/connection.rb +0 -25
  262. data/test/connections/native_db2/connection.rb +0 -25
  263. data/test/connections/native_firebird/connection.rb +0 -26
  264. data/test/connections/native_frontbase/connection.rb +0 -27
  265. data/test/connections/native_mysql/connection.rb +0 -25
  266. data/test/connections/native_openbase/connection.rb +0 -21
  267. data/test/connections/native_oracle/connection.rb +0 -27
  268. data/test/connections/native_postgresql/connection.rb +0 -21
  269. data/test/connections/native_sqlite/connection.rb +0 -25
  270. data/test/connections/native_sqlite3/connection.rb +0 -25
  271. data/test/connections/native_sqlite3/in_memory_connection.rb +0 -18
  272. data/test/connections/native_sybase/connection.rb +0 -23
  273. data/test/fixtures/accounts.yml +0 -29
  274. data/test/fixtures/all/developers.yml +0 -0
  275. data/test/fixtures/all/people.csv +0 -0
  276. data/test/fixtures/all/tasks.yml +0 -0
  277. data/test/fixtures/author_addresses.yml +0 -5
  278. data/test/fixtures/author_favorites.yml +0 -4
  279. data/test/fixtures/authors.yml +0 -9
  280. data/test/fixtures/binaries.yml +0 -132
  281. data/test/fixtures/books.yml +0 -7
  282. data/test/fixtures/categories/special_categories.yml +0 -9
  283. data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +0 -4
  284. data/test/fixtures/categories.yml +0 -14
  285. data/test/fixtures/categories_ordered.yml +0 -7
  286. data/test/fixtures/categories_posts.yml +0 -23
  287. data/test/fixtures/categorizations.yml +0 -17
  288. data/test/fixtures/clubs.yml +0 -6
  289. data/test/fixtures/comments.yml +0 -59
  290. data/test/fixtures/companies.yml +0 -56
  291. data/test/fixtures/computers.yml +0 -4
  292. data/test/fixtures/courses.yml +0 -7
  293. data/test/fixtures/customers.yml +0 -26
  294. data/test/fixtures/developers.yml +0 -21
  295. data/test/fixtures/developers_projects.yml +0 -17
  296. data/test/fixtures/edges.yml +0 -6
  297. data/test/fixtures/entrants.yml +0 -14
  298. data/test/fixtures/faces.yml +0 -11
  299. data/test/fixtures/fk_test_has_fk.yml +0 -3
  300. data/test/fixtures/fk_test_has_pk.yml +0 -2
  301. data/test/fixtures/funny_jokes.yml +0 -10
  302. data/test/fixtures/interests.yml +0 -33
  303. data/test/fixtures/items.yml +0 -4
  304. data/test/fixtures/jobs.yml +0 -7
  305. data/test/fixtures/legacy_things.yml +0 -3
  306. data/test/fixtures/mateys.yml +0 -4
  307. data/test/fixtures/member_types.yml +0 -6
  308. data/test/fixtures/members.yml +0 -6
  309. data/test/fixtures/memberships.yml +0 -20
  310. data/test/fixtures/men.yml +0 -5
  311. data/test/fixtures/minimalistics.yml +0 -2
  312. data/test/fixtures/mixed_case_monkeys.yml +0 -6
  313. data/test/fixtures/mixins.yml +0 -29
  314. data/test/fixtures/movies.yml +0 -7
  315. data/test/fixtures/naked/csv/accounts.csv +0 -1
  316. data/test/fixtures/naked/yml/accounts.yml +0 -1
  317. data/test/fixtures/naked/yml/companies.yml +0 -1
  318. data/test/fixtures/naked/yml/courses.yml +0 -1
  319. data/test/fixtures/organizations.yml +0 -5
  320. data/test/fixtures/owners.yml +0 -7
  321. data/test/fixtures/parrots.yml +0 -27
  322. data/test/fixtures/parrots_pirates.yml +0 -7
  323. data/test/fixtures/people.yml +0 -15
  324. data/test/fixtures/pets.yml +0 -14
  325. data/test/fixtures/pirates.yml +0 -9
  326. data/test/fixtures/polymorphic_designs.yml +0 -19
  327. data/test/fixtures/polymorphic_prices.yml +0 -19
  328. data/test/fixtures/posts.yml +0 -52
  329. data/test/fixtures/price_estimates.yml +0 -7
  330. data/test/fixtures/projects.yml +0 -7
  331. data/test/fixtures/readers.yml +0 -9
  332. data/test/fixtures/references.yml +0 -17
  333. data/test/fixtures/reserved_words/distinct.yml +0 -5
  334. data/test/fixtures/reserved_words/distincts_selects.yml +0 -11
  335. data/test/fixtures/reserved_words/group.yml +0 -14
  336. data/test/fixtures/reserved_words/select.yml +0 -8
  337. data/test/fixtures/reserved_words/values.yml +0 -7
  338. data/test/fixtures/ships.yml +0 -5
  339. data/test/fixtures/sponsors.yml +0 -9
  340. data/test/fixtures/subscribers.yml +0 -7
  341. data/test/fixtures/subscriptions.yml +0 -12
  342. data/test/fixtures/taggings.yml +0 -28
  343. data/test/fixtures/tags.yml +0 -7
  344. data/test/fixtures/tasks.yml +0 -7
  345. data/test/fixtures/tees.yml +0 -4
  346. data/test/fixtures/ties.yml +0 -4
  347. data/test/fixtures/topics.yml +0 -42
  348. data/test/fixtures/toys.yml +0 -4
  349. data/test/fixtures/treasures.yml +0 -10
  350. data/test/fixtures/vertices.yml +0 -4
  351. data/test/fixtures/warehouse-things.yml +0 -3
  352. data/test/fixtures/zines.yml +0 -5
  353. data/test/migrations/broken/100_migration_that_raises_exception.rb +0 -10
  354. data/test/migrations/decimal/1_give_me_big_numbers.rb +0 -15
  355. data/test/migrations/duplicate/1_people_have_last_names.rb +0 -9
  356. data/test/migrations/duplicate/2_we_need_reminders.rb +0 -12
  357. data/test/migrations/duplicate/3_foo.rb +0 -7
  358. data/test/migrations/duplicate/3_innocent_jointable.rb +0 -12
  359. data/test/migrations/duplicate_names/20080507052938_chunky.rb +0 -7
  360. data/test/migrations/duplicate_names/20080507053028_chunky.rb +0 -7
  361. data/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +0 -12
  362. data/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +0 -9
  363. data/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +0 -12
  364. data/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +0 -9
  365. data/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +0 -8
  366. data/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +0 -12
  367. data/test/migrations/missing/1000_people_have_middle_names.rb +0 -9
  368. data/test/migrations/missing/1_people_have_last_names.rb +0 -9
  369. data/test/migrations/missing/3_we_need_reminders.rb +0 -12
  370. data/test/migrations/missing/4_innocent_jointable.rb +0 -12
  371. data/test/migrations/valid/1_people_have_last_names.rb +0 -9
  372. data/test/migrations/valid/2_we_need_reminders.rb +0 -12
  373. data/test/migrations/valid/3_innocent_jointable.rb +0 -12
  374. data/test/models/author.rb +0 -151
  375. data/test/models/auto_id.rb +0 -4
  376. data/test/models/binary.rb +0 -2
  377. data/test/models/bird.rb +0 -9
  378. data/test/models/book.rb +0 -4
  379. data/test/models/categorization.rb +0 -5
  380. data/test/models/category.rb +0 -34
  381. data/test/models/citation.rb +0 -6
  382. data/test/models/club.rb +0 -13
  383. data/test/models/column_name.rb +0 -3
  384. data/test/models/comment.rb +0 -29
  385. data/test/models/company.rb +0 -173
  386. data/test/models/company_in_module.rb +0 -78
  387. data/test/models/computer.rb +0 -3
  388. data/test/models/contact.rb +0 -16
  389. data/test/models/contract.rb +0 -5
  390. data/test/models/course.rb +0 -3
  391. data/test/models/customer.rb +0 -73
  392. data/test/models/default.rb +0 -2
  393. data/test/models/developer.rb +0 -101
  394. data/test/models/edge.rb +0 -5
  395. data/test/models/entrant.rb +0 -3
  396. data/test/models/essay.rb +0 -3
  397. data/test/models/event.rb +0 -3
  398. data/test/models/event_author.rb +0 -8
  399. data/test/models/face.rb +0 -7
  400. data/test/models/guid.rb +0 -2
  401. data/test/models/interest.rb +0 -5
  402. data/test/models/invoice.rb +0 -4
  403. data/test/models/item.rb +0 -7
  404. data/test/models/job.rb +0 -5
  405. data/test/models/joke.rb +0 -3
  406. data/test/models/keyboard.rb +0 -3
  407. data/test/models/legacy_thing.rb +0 -3
  408. data/test/models/line_item.rb +0 -3
  409. data/test/models/man.rb +0 -9
  410. data/test/models/matey.rb +0 -4
  411. data/test/models/member.rb +0 -12
  412. data/test/models/member_detail.rb +0 -5
  413. data/test/models/member_type.rb +0 -3
  414. data/test/models/membership.rb +0 -9
  415. data/test/models/minimalistic.rb +0 -2
  416. data/test/models/mixed_case_monkey.rb +0 -3
  417. data/test/models/movie.rb +0 -5
  418. data/test/models/order.rb +0 -4
  419. data/test/models/organization.rb +0 -6
  420. data/test/models/owner.rb +0 -5
  421. data/test/models/parrot.rb +0 -22
  422. data/test/models/person.rb +0 -16
  423. data/test/models/pet.rb +0 -5
  424. data/test/models/pirate.rb +0 -80
  425. data/test/models/polymorphic_design.rb +0 -3
  426. data/test/models/polymorphic_price.rb +0 -3
  427. data/test/models/post.rb +0 -102
  428. data/test/models/price_estimate.rb +0 -3
  429. data/test/models/project.rb +0 -30
  430. data/test/models/reader.rb +0 -4
  431. data/test/models/reference.rb +0 -4
  432. data/test/models/reply.rb +0 -46
  433. data/test/models/ship.rb +0 -19
  434. data/test/models/ship_part.rb +0 -7
  435. data/test/models/sponsor.rb +0 -4
  436. data/test/models/subject.rb +0 -4
  437. data/test/models/subscriber.rb +0 -8
  438. data/test/models/subscription.rb +0 -4
  439. data/test/models/tag.rb +0 -7
  440. data/test/models/tagging.rb +0 -10
  441. data/test/models/task.rb +0 -3
  442. data/test/models/tee.rb +0 -4
  443. data/test/models/tie.rb +0 -4
  444. data/test/models/topic.rb +0 -80
  445. data/test/models/toy.rb +0 -6
  446. data/test/models/treasure.rb +0 -8
  447. data/test/models/vertex.rb +0 -9
  448. data/test/models/warehouse_thing.rb +0 -5
  449. data/test/models/zine.rb +0 -3
  450. data/test/schema/mysql_specific_schema.rb +0 -31
  451. data/test/schema/postgresql_specific_schema.rb +0 -114
  452. data/test/schema/schema.rb +0 -550
  453. data/test/schema/schema2.rb +0 -6
  454. data/test/schema/sqlite_specific_schema.rb +0 -25
@@ -1,22 +0,0 @@
1
- require "cases/helper"
2
- require 'models/owner'
3
- require 'models/pet'
4
-
5
- class ReloadModelsTest < ActiveRecord::TestCase
6
- fixtures :pets
7
-
8
- def test_has_one_with_reload
9
- pet = Pet.find_by_name('parrot')
10
- pet.owner = Owner.find_by_name('ashley')
11
-
12
- # Reload the class Owner, simulating auto-reloading of model classes in a
13
- # development environment. Note that meanwhile the class Pet is not
14
- # reloaded, simulating a class that is present in a plugin.
15
- Object.class_eval { remove_const :Owner }
16
- Kernel.load(File.expand_path(File.join(File.dirname(__FILE__), "../models/owner.rb")))
17
-
18
- pet = Pet.find_by_name('parrot')
19
- pet.owner = Owner.find_by_name('ashley')
20
- assert_equal pet.owner, Owner.find_by_name('ashley')
21
- end
22
- end
@@ -1,50 +0,0 @@
1
- module ActiveRecord
2
- module Testing
3
- module RepairHelper
4
- def self.included(base)
5
- base.class_eval do
6
- extend ClassMethods
7
- end
8
- end
9
-
10
- module Toolbox
11
- def self.record_validations(*model_classes)
12
- model_classes.inject({}) do |repair, klass|
13
- repair[klass] ||= {}
14
- [:validate, :validate_on_create, :validate_on_update].each do |callback|
15
- the_callback = klass.instance_variable_get("@#{callback.to_s}_callbacks")
16
- repair[klass][callback] = (the_callback.nil? ? nil : the_callback.dup)
17
- end
18
- repair
19
- end
20
- end
21
-
22
- def self.reset_validations(recorded)
23
- recorded.each do |klass, repairs|
24
- [:validate, :validate_on_create, :validate_on_update].each do |callback|
25
- klass.instance_variable_set("@#{callback.to_s}_callbacks", repairs[callback])
26
- end
27
- end
28
- end
29
- end
30
-
31
- module ClassMethods
32
- def repair_validations(*model_classes)
33
- setup do
34
- @validation_repairs = ActiveRecord::Testing::RepairHelper::Toolbox.record_validations(*model_classes)
35
- end
36
- teardown do
37
- ActiveRecord::Testing::RepairHelper::Toolbox.reset_validations(@validation_repairs)
38
- end
39
- end
40
- end
41
-
42
- def repair_validations(*model_classes, &block)
43
- validation_repairs = ActiveRecord::Testing::RepairHelper::Toolbox.record_validations(*model_classes)
44
- return block.call
45
- ensure
46
- ActiveRecord::Testing::RepairHelper::Toolbox.reset_validations(validation_repairs)
47
- end
48
- end
49
- end
50
- end
@@ -1,176 +0,0 @@
1
- require "cases/helper"
2
-
3
- class Group < ActiveRecord::Base
4
- Group.table_name = 'group'
5
- belongs_to :select, :class_name => 'Select'
6
- has_one :values
7
- end
8
-
9
- class Select < ActiveRecord::Base
10
- Select.table_name = 'select'
11
- has_many :groups
12
- end
13
-
14
- class Values < ActiveRecord::Base
15
- Values.table_name = 'values'
16
- end
17
-
18
- class Distinct < ActiveRecord::Base
19
- Distinct.table_name = 'distinct'
20
- has_and_belongs_to_many :selects
21
- has_many :values, :through => :groups
22
- end
23
-
24
- # a suite of tests to ensure the ConnectionAdapters#MysqlAdapter can handle tables with
25
- # reserved word names (ie: group, order, values, etc...)
26
- class MysqlReservedWordTest < ActiveRecord::TestCase
27
- def setup
28
- @connection = ActiveRecord::Base.connection
29
-
30
- # we call execute directly here (and do similar below) because ActiveRecord::Base#create_table()
31
- # will fail with these table names if these test cases fail
32
-
33
- create_tables_directly 'group'=>'id int auto_increment primary key, `order` varchar(255), select_id int',
34
- 'select'=>'id int auto_increment primary key',
35
- 'values'=>'id int auto_increment primary key, group_id int',
36
- 'distinct'=>'id int auto_increment primary key',
37
- 'distincts_selects'=>'distinct_id int, select_id int'
38
- end
39
-
40
- def teardown
41
- drop_tables_directly ['group', 'select', 'values', 'distinct', 'distincts_selects', 'order']
42
- end
43
-
44
- # create tables with reserved-word names and columns
45
- def test_create_tables
46
- assert_nothing_raised {
47
- @connection.create_table :order do |t|
48
- t.column :group, :string
49
- end
50
- }
51
- end
52
-
53
- # rename tables with reserved-word names
54
- def test_rename_tables
55
- assert_nothing_raised { @connection.rename_table(:group, :order) }
56
- end
57
-
58
- # alter column with a reserved-word name in a table with a reserved-word name
59
- def test_change_columns
60
- assert_nothing_raised { @connection.change_column_default(:group, :order, 'whatever') }
61
- #the quoting here will reveal any double quoting issues in change_column's interaction with the column method in the adapter
62
- assert_nothing_raised { @connection.change_column('group', 'order', :Int, :default => 0) }
63
- assert_nothing_raised { @connection.rename_column(:group, :order, :values) }
64
- end
65
-
66
- # dump structure of table with reserved word name
67
- def test_structure_dump
68
- assert_nothing_raised { @connection.structure_dump }
69
- end
70
-
71
- # introspect table with reserved word name
72
- def test_introspect
73
- assert_nothing_raised { @connection.columns(:group) }
74
- assert_nothing_raised { @connection.indexes(:group) }
75
- end
76
-
77
- #fixtures
78
- self.use_instantiated_fixtures = true
79
- self.use_transactional_fixtures = false
80
-
81
- #fixtures :group
82
-
83
- def test_fixtures
84
- f = create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
85
-
86
- assert_nothing_raised {
87
- f.each do |x|
88
- x.delete_existing_fixtures
89
- end
90
- }
91
-
92
- assert_nothing_raised {
93
- f.each do |x|
94
- x.insert_fixtures
95
- end
96
- }
97
- end
98
-
99
- #activerecord model class with reserved-word table name
100
- def test_activerecord_model
101
- create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
102
- x = nil
103
- assert_nothing_raised { x = Group.new }
104
- x.order = 'x'
105
- assert_nothing_raised { x.save }
106
- x.order = 'y'
107
- assert_nothing_raised { x.save }
108
- assert_nothing_raised { y = Group.find_by_order('y') }
109
- assert_nothing_raised { y = Group.find(1) }
110
- x = Group.find(1)
111
- end
112
-
113
- # has_one association with reserved-word table name
114
- def test_has_one_associations
115
- create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
116
- v = nil
117
- assert_nothing_raised { v = Group.find(1).values }
118
- assert_equal v.id, 2
119
- end
120
-
121
- # belongs_to association with reserved-word table name
122
- def test_belongs_to_associations
123
- create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
124
- gs = nil
125
- assert_nothing_raised { gs = Select.find(2).groups }
126
- assert_equal gs.length, 2
127
- assert(gs.collect{|x| x.id}.sort == [2, 3])
128
- end
129
-
130
- # has_and_belongs_to_many with reserved-word table name
131
- def test_has_and_belongs_to_many
132
- create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
133
- s = nil
134
- assert_nothing_raised { s = Distinct.find(1).selects }
135
- assert_equal s.length, 2
136
- assert(s.collect{|x|x.id}.sort == [1, 2])
137
- end
138
-
139
- # activerecord model introspection with reserved-word table and column names
140
- def test_activerecord_introspection
141
- assert_nothing_raised { Group.table_exists? }
142
- assert_nothing_raised { Group.columns }
143
- end
144
-
145
- # Calculations
146
- def test_calculations_work_with_reserved_words
147
- assert_nothing_raised { Group.count }
148
- end
149
-
150
- def test_associations_work_with_reserved_words
151
- assert_nothing_raised { Select.find(:all, :include => [:groups]) }
152
- end
153
-
154
- #the following functions were added to DRY test cases
155
-
156
- private
157
- # custom fixture loader, uses Fixtures#create_fixtures and appends base_path to the current file's path
158
- def create_test_fixtures(*fixture_names)
159
- Fixtures.create_fixtures(FIXTURES_ROOT + "/reserved_words", fixture_names)
160
- end
161
-
162
- # custom drop table, uses execute on connection to drop a table if it exists. note: escapes table_name
163
- def drop_tables_directly(table_names, connection = @connection)
164
- table_names.each do |name|
165
- connection.execute("DROP TABLE IF EXISTS `#{name}`")
166
- end
167
- end
168
-
169
- # custom create table, uses execute on connection to create a table, note: escapes table_name, does NOT escape columns
170
- def create_tables_directly (tables, connection = @connection)
171
- tables.each do |table_name, column_properties|
172
- connection.execute("CREATE TABLE `#{table_name}` ( #{column_properties} )")
173
- end
174
- end
175
-
176
- end
@@ -1,25 +0,0 @@
1
- require "cases/helper"
2
- require 'models/binary'
3
-
4
- class SanitizeTest < ActiveRecord::TestCase
5
- def setup
6
- end
7
-
8
- def test_sanitize_sql_array_handles_string_interpolation
9
- quoted_bambi = ActiveRecord::Base.connection.quote_string("Bambi")
10
- assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=%s", "Bambi"])
11
- assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=%s", "Bambi".mb_chars])
12
- quoted_bambi_and_thumper = ActiveRecord::Base.connection.quote_string("Bambi\nand\nThumper")
13
- assert_equal "name=#{quoted_bambi_and_thumper}",Binary.send(:sanitize_sql_array, ["name=%s", "Bambi\nand\nThumper"])
14
- assert_equal "name=#{quoted_bambi_and_thumper}",Binary.send(:sanitize_sql_array, ["name=%s", "Bambi\nand\nThumper".mb_chars])
15
- end
16
-
17
- def test_sanitize_sql_array_handles_bind_variables
18
- quoted_bambi = ActiveRecord::Base.connection.quote("Bambi")
19
- assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi"])
20
- assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi".mb_chars])
21
- quoted_bambi_and_thumper = ActiveRecord::Base.connection.quote("Bambi\nand\nThumper")
22
- assert_equal "name=#{quoted_bambi_and_thumper}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi\nand\nThumper"])
23
- assert_equal "name=#{quoted_bambi_and_thumper}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi\nand\nThumper".mb_chars])
24
- end
25
- end
@@ -1,75 +0,0 @@
1
- require "cases/helper"
2
-
3
- class SchemaThing < ActiveRecord::Base
4
- end
5
-
6
- class SchemaAuthorizationTest < ActiveRecord::TestCase
7
- self.use_transactional_fixtures = false
8
-
9
- TABLE_NAME = 'schema_things'
10
- COLUMNS = [
11
- 'id serial primary key',
12
- 'name character varying(50)'
13
- ]
14
- USERS = ['rails_pg_schema_user1', 'rails_pg_schema_user2']
15
-
16
- def setup
17
- @connection = ActiveRecord::Base.connection
18
- @connection.execute "SET search_path TO '$user',public"
19
- set_session_auth
20
- USERS.each do |u|
21
- @connection.execute "CREATE USER #{u}" rescue nil
22
- @connection.execute "CREATE SCHEMA AUTHORIZATION #{u}" rescue nil
23
- set_session_auth u
24
- @connection.execute "CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})"
25
- @connection.execute "INSERT INTO #{TABLE_NAME} (name) VALUES ('#{u}')"
26
- set_session_auth
27
- end
28
- end
29
-
30
- def teardown
31
- set_session_auth
32
- @connection.execute "RESET search_path"
33
- USERS.each do |u|
34
- @connection.execute "DROP SCHEMA #{u} CASCADE"
35
- @connection.execute "DROP USER #{u}"
36
- end
37
- end
38
-
39
- def test_schema_invisible
40
- assert_raise(ActiveRecord::StatementInvalid) do
41
- set_session_auth
42
- @connection.execute "SELECT * FROM #{TABLE_NAME}"
43
- end
44
- end
45
-
46
- def test_schema_uniqueness
47
- assert_nothing_raised do
48
- set_session_auth
49
- USERS.each do |u|
50
- set_session_auth u
51
- assert_equal u, @connection.select_value("SELECT name FROM #{TABLE_NAME} WHERE id = 1")
52
- set_session_auth
53
- end
54
- end
55
- end
56
-
57
- def test_sequence_schema_caching
58
- assert_nothing_raised do
59
- USERS.each do |u|
60
- set_session_auth u
61
- st = SchemaThing.new :name => 'TEST1'
62
- st.save!
63
- st = SchemaThing.new :id => 5, :name => 'TEST2'
64
- st.save!
65
- set_session_auth
66
- end
67
- end
68
- end
69
-
70
- private
71
- def set_session_auth auth = nil
72
- @connection.execute "SET SESSION AUTHORIZATION #{auth || 'default'}"
73
- end
74
-
75
- end
@@ -1,211 +0,0 @@
1
- require "cases/helper"
2
- require 'stringio'
3
-
4
-
5
- class SchemaDumperTest < ActiveRecord::TestCase
6
- def standard_dump
7
- stream = StringIO.new
8
- ActiveRecord::SchemaDumper.ignore_tables = []
9
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
10
- stream.string
11
- end
12
-
13
- def test_schema_dump
14
- output = standard_dump
15
- assert_match %r{create_table "accounts"}, output
16
- assert_match %r{create_table "authors"}, output
17
- assert_no_match %r{create_table "schema_migrations"}, output
18
- end
19
-
20
- def test_schema_dump_excludes_sqlite_sequence
21
- output = standard_dump
22
- assert_no_match %r{create_table "sqlite_sequence"}, output
23
- end
24
-
25
- def test_schema_dump_includes_camelcase_table_name
26
- output = standard_dump
27
- assert_match %r{create_table "CamelCase"}, output
28
- end
29
-
30
- def assert_line_up(lines, pattern, required = false)
31
- return assert(true) if lines.empty?
32
- matches = lines.map { |line| line.match(pattern) }
33
- assert matches.all? if required
34
- matches.compact!
35
- return assert(true) if matches.empty?
36
- assert_equal 1, matches.map{ |match| match.offset(0).first }.uniq.length
37
- end
38
-
39
- def column_definition_lines(output = standard_dump)
40
- output.scan(/^( *)create_table.*?\n(.*?)^\1end/m).map{ |m| m.last.split(/\n/) }
41
- end
42
-
43
- def test_types_line_up
44
- column_definition_lines.each do |column_set|
45
- next if column_set.empty?
46
-
47
- lengths = column_set.map do |column|
48
- if match = column.match(/t\.(?:integer|decimal|float|datetime|timestamp|time|date|text|binary|string|boolean)\s+"/)
49
- match[0].length
50
- end
51
- end
52
-
53
- assert_equal 1, lengths.uniq.length
54
- end
55
- end
56
-
57
- def test_arguments_line_up
58
- column_definition_lines.each do |column_set|
59
- assert_line_up(column_set, /:default => /)
60
- assert_line_up(column_set, /:limit => /)
61
- assert_line_up(column_set, /:null => /)
62
- end
63
- end
64
-
65
- def test_no_dump_errors
66
- output = standard_dump
67
- assert_no_match %r{\# Could not dump table}, output
68
- end
69
-
70
- def test_schema_dump_includes_not_null_columns
71
- stream = StringIO.new
72
-
73
- ActiveRecord::SchemaDumper.ignore_tables = [/^[^r]/]
74
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
75
- output = stream.string
76
- assert_match %r{:null => false}, output
77
- end
78
-
79
- def test_schema_dump_includes_limit_constraint_for_integer_columns
80
- stream = StringIO.new
81
-
82
- ActiveRecord::SchemaDumper.ignore_tables = [/^(?!integer_limits)/]
83
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
84
- output = stream.string
85
-
86
- if current_adapter?(:PostgreSQLAdapter)
87
- assert_match %r{c_int_1.*:limit => 2}, output
88
- assert_match %r{c_int_2.*:limit => 2}, output
89
-
90
- # int 3 is 4 bytes in postgresql
91
- assert_match %r{c_int_3.*}, output
92
- assert_no_match %r{c_int_3.*:limit}, output
93
-
94
- assert_match %r{c_int_4.*}, output
95
- assert_no_match %r{c_int_4.*:limit}, output
96
- elsif current_adapter?(:MysqlAdapter)
97
- assert_match %r{c_int_1.*:limit => 1}, output
98
- assert_match %r{c_int_2.*:limit => 2}, output
99
- assert_match %r{c_int_3.*:limit => 3}, output
100
-
101
- assert_match %r{c_int_4.*}, output
102
- assert_no_match %r{c_int_4.*:limit}, output
103
- elsif current_adapter?(:SQLiteAdapter)
104
- assert_match %r{c_int_1.*:limit => 1}, output
105
- assert_match %r{c_int_2.*:limit => 2}, output
106
- assert_match %r{c_int_3.*:limit => 3}, output
107
- assert_match %r{c_int_4.*:limit => 4}, output
108
- end
109
- assert_match %r{c_int_without_limit.*}, output
110
- assert_no_match %r{c_int_without_limit.*:limit}, output
111
-
112
- if current_adapter?(:SQLiteAdapter)
113
- assert_match %r{c_int_5.*:limit => 5}, output
114
- assert_match %r{c_int_6.*:limit => 6}, output
115
- assert_match %r{c_int_7.*:limit => 7}, output
116
- assert_match %r{c_int_8.*:limit => 8}, output
117
- else
118
- assert_match %r{c_int_5.*:limit => 8}, output
119
- assert_match %r{c_int_6.*:limit => 8}, output
120
- assert_match %r{c_int_7.*:limit => 8}, output
121
- assert_match %r{c_int_8.*:limit => 8}, output
122
- end
123
- end
124
-
125
- def test_schema_dump_with_string_ignored_table
126
- stream = StringIO.new
127
-
128
- ActiveRecord::SchemaDumper.ignore_tables = ['accounts']
129
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
130
- output = stream.string
131
- assert_no_match %r{create_table "accounts"}, output
132
- assert_match %r{create_table "authors"}, output
133
- assert_no_match %r{create_table "schema_migrations"}, output
134
- end
135
-
136
- def test_schema_dump_with_regexp_ignored_table
137
- stream = StringIO.new
138
-
139
- ActiveRecord::SchemaDumper.ignore_tables = [/^account/]
140
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
141
- output = stream.string
142
- assert_no_match %r{create_table "accounts"}, output
143
- assert_match %r{create_table "authors"}, output
144
- assert_no_match %r{create_table "schema_migrations"}, output
145
- end
146
-
147
- def test_schema_dump_illegal_ignored_table_value
148
- stream = StringIO.new
149
- ActiveRecord::SchemaDumper.ignore_tables = [5]
150
- assert_raise(StandardError) do
151
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
152
- end
153
- end
154
-
155
- def test_schema_dumps_index_columns_in_right_order
156
- index_definition = standard_dump.split(/\n/).grep(/add_index.*companies/).first.strip
157
- assert_equal 'add_index "companies", ["firm_id", "type", "rating", "ruby_type"], :name => "company_index"', index_definition
158
- end
159
-
160
- def test_schema_dump_should_honor_nonstandard_primary_keys
161
- output = standard_dump
162
- match = output.match(%r{create_table "movies"(.*)do})
163
- assert_not_nil(match, "nonstandardpk table not found")
164
- assert_match %r(:primary_key => "movieid"), match[1], "non-standard primary key not preserved"
165
- end
166
-
167
- if current_adapter?(:MysqlAdapter)
168
- def test_schema_dump_should_not_add_default_value_for_mysql_text_field
169
- output = standard_dump
170
- assert_match %r{t.text\s+"body",\s+:null => false$}, output
171
- end
172
-
173
- def test_schema_dump_includes_length_for_mysql_blob_and_text_fields
174
- output = standard_dump
175
- assert_match %r{t.binary\s+"tiny_blob",\s+:limit => 255$}, output
176
- assert_match %r{t.binary\s+"normal_blob"$}, output
177
- assert_match %r{t.binary\s+"medium_blob",\s+:limit => 16777215$}, output
178
- assert_match %r{t.binary\s+"long_blob",\s+:limit => 2147483647$}, output
179
- assert_match %r{t.text\s+"tiny_text",\s+:limit => 255$}, output
180
- assert_match %r{t.text\s+"normal_text"$}, output
181
- assert_match %r{t.text\s+"medium_text",\s+:limit => 16777215$}, output
182
- assert_match %r{t.text\s+"long_text",\s+:limit => 2147483647$}, output
183
- end
184
- end
185
-
186
- def test_schema_dump_includes_decimal_options
187
- stream = StringIO.new
188
- ActiveRecord::SchemaDumper.ignore_tables = [/^[^n]/]
189
- ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
190
- output = stream.string
191
- assert_match %r{:precision => 3,[[:space:]]+:scale => 2,[[:space:]]+:default => 2.78}, output
192
- end
193
-
194
- if current_adapter?(:PostgreSQLAdapter)
195
- def test_schema_dump_includes_xml_shorthand_definition
196
- output = standard_dump
197
- if %r{create_table "postgresql_xml_data_type"} =~ output
198
- assert_match %r{t.xml "data"}, output
199
- end
200
- end
201
- end
202
-
203
- def test_schema_dump_keeps_id_column_when_id_is_false_and_id_column_added
204
- output = standard_dump
205
- match = output.match(%r{create_table "goofy_string_id"(.*)do.*\n(.*)\n})
206
- assert_not_nil(match, "goofy_string_id table not found")
207
- assert_match %r(:id => false), match[1], "no table id not preserved"
208
- assert_match %r{t.string[[:space:]]+"id",[[:space:]]+:null => false$}, match[2], "non-primary key id column not preserved"
209
- end
210
- end
211
-