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,80 +0,0 @@
1
- require "cases/helper"
2
-
3
- class CopyTableTest < ActiveRecord::TestCase
4
- fixtures :companies, :comments
5
-
6
- def setup
7
- @connection = ActiveRecord::Base.connection
8
- class << @connection
9
- public :copy_table, :table_structure, :indexes
10
- end
11
- end
12
-
13
- def test_copy_table(from = 'customers', to = 'customers2', options = {})
14
- assert_nothing_raised {copy_table(from, to, options)}
15
- assert_equal row_count(from), row_count(to)
16
-
17
- if block_given?
18
- yield from, to, options
19
- else
20
- assert_equal column_names(from), column_names(to)
21
- end
22
-
23
- @connection.drop_table(to) rescue nil
24
- end
25
-
26
- def test_copy_table_renaming_column
27
- test_copy_table('customers', 'customers2',
28
- :rename => {'name' => 'person_name'}) do |from, to, options|
29
- expected = column_values(from, 'name')
30
- assert expected.any?, 'only nils in resultset; real values are needed'
31
- assert_equal expected, column_values(to, 'person_name')
32
- end
33
- end
34
-
35
- def test_copy_table_with_index
36
- test_copy_table('comments', 'comments_with_index') do
37
- @connection.add_index('comments_with_index', ['post_id', 'type'])
38
- test_copy_table('comments_with_index', 'comments_with_index2') do
39
- assert_equal table_indexes_without_name('comments_with_index'),
40
- table_indexes_without_name('comments_with_index2')
41
- end
42
- end
43
- end
44
-
45
- def test_copy_table_without_primary_key
46
- test_copy_table('developers_projects', 'programmers_projects')
47
- end
48
-
49
- def test_copy_table_with_id_col_that_is_not_primary_key
50
- test_copy_table('goofy_string_id', 'goofy_string_id2') do |from, to, options|
51
- original_id = @connection.columns('goofy_string_id').detect{|col| col.name == 'id' }
52
- copied_id = @connection.columns('goofy_string_id2').detect{|col| col.name == 'id' }
53
- assert_equal original_id.type, copied_id.type
54
- assert_equal original_id.sql_type, copied_id.sql_type
55
- assert_equal original_id.limit, copied_id.limit
56
- assert_equal original_id.primary, copied_id.primary
57
- end
58
- end
59
-
60
- protected
61
- def copy_table(from, to, options = {})
62
- @connection.copy_table(from, to, {:temporary => true}.merge(options))
63
- end
64
-
65
- def column_names(table)
66
- @connection.table_structure(table).map {|column| column['name']}
67
- end
68
-
69
- def column_values(table, column)
70
- @connection.select_all("SELECT #{column} FROM #{table} ORDER BY id").map {|row| row[column]}
71
- end
72
-
73
- def table_indexes_without_name(table)
74
- @connection.indexes('comments_with_index').delete(:name)
75
- end
76
-
77
- def row_count(table)
78
- @connection.select_one("SELECT COUNT(*) AS count FROM #{table}")['count']
79
- end
80
- end
@@ -1,84 +0,0 @@
1
- require 'cases/helper'
2
- require 'models/topic'
3
- require 'models/reply'
4
- require 'models/category'
5
- require 'models/categorization'
6
-
7
- class CounterCacheTest < ActiveRecord::TestCase
8
- fixtures :topics, :categories, :categorizations
9
-
10
- class SpecialTopic < ::Topic
11
- has_many :special_replies, :foreign_key => 'parent_id'
12
- end
13
-
14
- class SpecialReply < ::Reply
15
- belongs_to :special_topic, :foreign_key => 'parent_id', :counter_cache => 'replies_count'
16
- end
17
-
18
- test "increment counter" do
19
- topic = Topic.find(1)
20
- assert_difference 'topic.reload.replies_count' do
21
- Topic.increment_counter(:replies_count, topic.id)
22
- end
23
- end
24
-
25
- test "decrement counter" do
26
- topic = Topic.find(1)
27
- assert_difference 'topic.reload.replies_count', -1 do
28
- Topic.decrement_counter(:replies_count, topic.id)
29
- end
30
- end
31
-
32
- test "reset counters" do
33
- topic = Topic.find(1)
34
- # throw the count off by 1
35
- Topic.increment_counter(:replies_count, topic.id)
36
-
37
- # check that it gets reset
38
- assert_difference 'topic.reload.replies_count', -1 do
39
- Topic.reset_counters(topic.id, :replies)
40
- end
41
- end
42
-
43
- test "reset counters with string argument" do
44
- topic = Topic.find(1)
45
- Topic.increment_counter('replies_count', topic.id)
46
-
47
- assert_difference 'topic.reload.replies_count', -1 do
48
- Topic.reset_counters(topic.id, 'replies')
49
- end
50
- end
51
-
52
- test "reset counters with modularized and camelized classnames" do
53
- special = SpecialTopic.create!(:title => 'Special')
54
- SpecialTopic.increment_counter(:replies_count, special.id)
55
-
56
- assert_difference 'special.reload.replies_count', -1 do
57
- SpecialTopic.reset_counters(special.id, :special_replies)
58
- end
59
- end
60
-
61
- test "update counter with initial null value" do
62
- category = categories(:general)
63
- assert_equal 2, category.categorizations.count
64
- assert_nil category.categorizations_count
65
-
66
- Category.update_counters(category.id, :categorizations_count => category.categorizations.count)
67
- assert_equal 2, category.reload.categorizations_count
68
- end
69
-
70
- test "update counter for decrement" do
71
- topic = Topic.find(1)
72
- assert_difference 'topic.reload.replies_count', -3 do
73
- Topic.update_counters(topic.id, :replies_count => -3)
74
- end
75
- end
76
-
77
- test "update counters of multiple records" do
78
- t1, t2 = topics(:first, :second)
79
-
80
- assert_difference ['t1.reload.replies_count', 't2.reload.replies_count'], 2 do
81
- Topic.update_counters([t1.id, t2.id], :replies_count => 2)
82
- end
83
- end
84
- end
@@ -1,12 +0,0 @@
1
- require "cases/helper"
2
-
3
- class DatabaseStatementsTest < ActiveRecord::TestCase
4
- def setup
5
- @connection = ActiveRecord::Base.connection
6
- end
7
-
8
- def test_insert_should_return_the_inserted_id
9
- id = @connection.insert("INSERT INTO accounts (firm_id,credit_limit) VALUES (42,5000)")
10
- assert_not_nil id
11
- end
12
- end
@@ -1,204 +0,0 @@
1
- require "cases/helper"
2
-
3
- class PostgresqlArray < ActiveRecord::Base
4
- end
5
-
6
- class PostgresqlMoney < ActiveRecord::Base
7
- end
8
-
9
- class PostgresqlNumber < ActiveRecord::Base
10
- end
11
-
12
- class PostgresqlTime < ActiveRecord::Base
13
- end
14
-
15
- class PostgresqlNetworkAddress < ActiveRecord::Base
16
- end
17
-
18
- class PostgresqlBitString < ActiveRecord::Base
19
- end
20
-
21
- class PostgresqlOid < ActiveRecord::Base
22
- end
23
-
24
- class PostgresqlDataTypeTest < ActiveRecord::TestCase
25
- self.use_transactional_fixtures = false
26
-
27
- def setup
28
- @connection = ActiveRecord::Base.connection
29
- @connection.execute("set lc_monetary = 'C'")
30
-
31
- @connection.execute("INSERT INTO postgresql_arrays (commission_by_quarter, nicknames) VALUES ( '{35000,21000,18000,17000}', '{foo,bar,baz}' )")
32
- @first_array = PostgresqlArray.find(1)
33
-
34
- @connection.execute("INSERT INTO postgresql_moneys (wealth) VALUES ('567.89'::money)")
35
- @connection.execute("INSERT INTO postgresql_moneys (wealth) VALUES ('-567.89'::money)")
36
- @first_money = PostgresqlMoney.find(1)
37
- @second_money = PostgresqlMoney.find(2)
38
-
39
- @connection.execute("INSERT INTO postgresql_numbers (single, double) VALUES (123.456, 123456.789)")
40
- @first_number = PostgresqlNumber.find(1)
41
-
42
- @connection.execute("INSERT INTO postgresql_times (time_interval) VALUES ('1 year 2 days ago')")
43
- @first_time = PostgresqlTime.find(1)
44
-
45
- @connection.execute("INSERT INTO postgresql_network_addresses (cidr_address, inet_address, mac_address) VALUES('192.168.0/24', '172.16.1.254/32', '01:23:45:67:89:0a')")
46
- @first_network_address = PostgresqlNetworkAddress.find(1)
47
-
48
- @connection.execute("INSERT INTO postgresql_bit_strings (bit_string, bit_string_varying) VALUES (B'00010101', X'15')")
49
- @first_bit_string = PostgresqlBitString.find(1)
50
-
51
- @connection.execute("INSERT INTO postgresql_oids (obj_id) VALUES (1234)")
52
- @first_oid = PostgresqlOid.find(1)
53
- end
54
-
55
- def test_data_type_of_array_types
56
- assert_equal :string, @first_array.column_for_attribute(:commission_by_quarter).type
57
- assert_equal :string, @first_array.column_for_attribute(:nicknames).type
58
- end
59
-
60
- def test_data_type_of_money_types
61
- assert_equal :decimal, @first_money.column_for_attribute(:wealth).type
62
- end
63
-
64
- def test_data_type_of_number_types
65
- assert_equal :float, @first_number.column_for_attribute(:single).type
66
- assert_equal :float, @first_number.column_for_attribute(:double).type
67
- end
68
-
69
- def test_data_type_of_time_types
70
- assert_equal :string, @first_time.column_for_attribute(:time_interval).type
71
- end
72
-
73
- def test_data_type_of_network_address_types
74
- assert_equal :string, @first_network_address.column_for_attribute(:cidr_address).type
75
- assert_equal :string, @first_network_address.column_for_attribute(:inet_address).type
76
- assert_equal :string, @first_network_address.column_for_attribute(:mac_address).type
77
- end
78
-
79
- def test_data_type_of_bit_string_types
80
- assert_equal :string, @first_bit_string.column_for_attribute(:bit_string).type
81
- assert_equal :string, @first_bit_string.column_for_attribute(:bit_string_varying).type
82
- end
83
-
84
- def test_data_type_of_oid_types
85
- assert_equal :integer, @first_oid.column_for_attribute(:obj_id).type
86
- end
87
-
88
- def test_array_values
89
- assert_equal '{35000,21000,18000,17000}', @first_array.commission_by_quarter
90
- assert_equal '{foo,bar,baz}', @first_array.nicknames
91
- end
92
-
93
- def test_money_values
94
- assert_equal 567.89, @first_money.wealth
95
- assert_equal -567.89, @second_money.wealth
96
- end
97
-
98
- def test_number_values
99
- assert_equal 123.456, @first_number.single
100
- assert_equal 123456.789, @first_number.double
101
- end
102
-
103
- def test_time_values
104
- assert_equal '-1 years -2 days', @first_time.time_interval
105
- end
106
-
107
- def test_network_address_values
108
- assert_equal '192.168.0.0/24', @first_network_address.cidr_address
109
- assert_equal '172.16.1.254', @first_network_address.inet_address
110
- assert_equal '01:23:45:67:89:0a', @first_network_address.mac_address
111
- end
112
-
113
- def test_bit_string_values
114
- assert_equal '00010101', @first_bit_string.bit_string
115
- assert_equal '00010101', @first_bit_string.bit_string_varying
116
- end
117
-
118
- def test_oid_values
119
- assert_equal 1234, @first_oid.obj_id
120
- end
121
-
122
- def test_update_integer_array
123
- new_value = '{32800,95000,29350,17000}'
124
- assert @first_array.commission_by_quarter = new_value
125
- assert @first_array.save
126
- assert @first_array.reload
127
- assert_equal @first_array.commission_by_quarter, new_value
128
- assert @first_array.commission_by_quarter = new_value
129
- assert @first_array.save
130
- assert @first_array.reload
131
- assert_equal @first_array.commission_by_quarter, new_value
132
- end
133
-
134
- def test_update_text_array
135
- new_value = '{robby,robert,rob,robbie}'
136
- assert @first_array.nicknames = new_value
137
- assert @first_array.save
138
- assert @first_array.reload
139
- assert_equal @first_array.nicknames, new_value
140
- assert @first_array.nicknames = new_value
141
- assert @first_array.save
142
- assert @first_array.reload
143
- assert_equal @first_array.nicknames, new_value
144
- end
145
-
146
- def test_update_money
147
- new_value = BigDecimal.new('123.45')
148
- assert @first_money.wealth = new_value
149
- assert @first_money.save
150
- assert @first_money.reload
151
- assert_equal new_value, @first_money.wealth
152
- end
153
-
154
- def test_update_number
155
- new_single = 789.012
156
- new_double = 789012.345
157
- assert @first_number.single = new_single
158
- assert @first_number.double = new_double
159
- assert @first_number.save
160
- assert @first_number.reload
161
- assert_equal @first_number.single, new_single
162
- assert_equal @first_number.double, new_double
163
- end
164
-
165
- def test_update_time
166
- assert @first_time.time_interval = '2 years 3 minutes'
167
- assert @first_time.save
168
- assert @first_time.reload
169
- assert_equal @first_time.time_interval, '2 years 00:03:00'
170
- end
171
-
172
- def test_update_network_address
173
- new_cidr_address = '10.1.2.3/32'
174
- new_inet_address = '10.0.0.0/8'
175
- new_mac_address = 'bc:de:f0:12:34:56'
176
- assert @first_network_address.cidr_address = new_cidr_address
177
- assert @first_network_address.inet_address = new_inet_address
178
- assert @first_network_address.mac_address = new_mac_address
179
- assert @first_network_address.save
180
- assert @first_network_address.reload
181
- assert_equal @first_network_address.cidr_address, new_cidr_address
182
- assert_equal @first_network_address.inet_address, new_inet_address
183
- assert_equal @first_network_address.mac_address, new_mac_address
184
- end
185
-
186
- def test_update_bit_string
187
- new_bit_string = '11111111'
188
- new_bit_string_varying = 'FF'
189
- assert @first_bit_string.bit_string = new_bit_string
190
- assert @first_bit_string.bit_string_varying = new_bit_string_varying
191
- assert @first_bit_string.save
192
- assert @first_bit_string.reload
193
- assert_equal @first_bit_string.bit_string, new_bit_string
194
- assert_equal @first_bit_string.bit_string, @first_bit_string.bit_string_varying
195
- end
196
-
197
- def test_update_oid
198
- new_value = 567890
199
- assert @first_oid.obj_id = new_value
200
- assert @first_oid.save
201
- assert @first_oid.reload
202
- assert_equal @first_oid.obj_id, new_value
203
- end
204
- end
@@ -1,37 +0,0 @@
1
- require "cases/helper"
2
- require 'models/topic'
3
- require 'models/task'
4
-
5
- class DateTimeTest < ActiveRecord::TestCase
6
- def test_saves_both_date_and_time
7
- time_values = [1807, 2, 10, 15, 30, 45]
8
- now = DateTime.civil(*time_values)
9
-
10
- task = Task.new
11
- task.starting = now
12
- task.save!
13
-
14
- # check against Time.local_time, since some platforms will return a Time instead of a DateTime
15
- assert_equal Time.local_time(*time_values), Task.find(task.id).starting
16
- end
17
-
18
- def test_assign_empty_date_time
19
- task = Task.new
20
- task.starting = ''
21
- task.ending = nil
22
- assert_nil task.starting
23
- assert_nil task.ending
24
- end
25
-
26
- def test_assign_empty_date
27
- topic = Topic.new
28
- topic.last_read = ''
29
- assert_nil topic.last_read
30
- end
31
-
32
- def test_assign_empty_time
33
- topic = Topic.new
34
- topic.bonus_time = ''
35
- assert_nil topic.bonus_time
36
- end
37
- end
@@ -1,16 +0,0 @@
1
- require "cases/helper"
2
- require 'models/default'
3
-
4
- class DefaultTest < ActiveRecord::TestCase
5
- def test_default_timestamp
6
- default = Default.new
7
- assert_instance_of(Time, default.default_timestamp)
8
- assert_equal(:datetime, default.column_for_attribute(:default_timestamp).type)
9
-
10
- # Variance should be small; increase if required -- e.g., if test db is on
11
- # remote host and clocks aren't synchronized.
12
- t1 = Time.new
13
- accepted_variance = 1.0
14
- assert_in_delta(t1.to_f, default.default_timestamp.to_f, accepted_variance)
15
- end
16
- end
@@ -1,111 +0,0 @@
1
- require "cases/helper"
2
- require 'models/default'
3
- require 'models/entrant'
4
-
5
- class DefaultTest < ActiveRecord::TestCase
6
- def test_nil_defaults_for_not_null_columns
7
- column_defaults =
8
- if current_adapter?(:MysqlAdapter) && (Mysql.client_version < 50051 || (50100..50122).include?(Mysql.client_version))
9
- { 'id' => nil, 'name' => '', 'course_id' => nil }
10
- else
11
- { 'id' => nil, 'name' => nil, 'course_id' => nil }
12
- end
13
-
14
- column_defaults.each do |name, default|
15
- column = Entrant.columns_hash[name]
16
- assert !column.null, "#{name} column should be NOT NULL"
17
- assert_equal default, column.default, "#{name} column should be DEFAULT #{default.inspect}"
18
- end
19
- end
20
-
21
- if current_adapter?(:PostgreSQLAdapter, :FirebirdAdapter, :OpenBaseAdapter, :OracleAdapter)
22
- def test_default_integers
23
- default = Default.new
24
- assert_instance_of Fixnum, default.positive_integer
25
- assert_equal 1, default.positive_integer
26
- assert_instance_of Fixnum, default.negative_integer
27
- assert_equal -1, default.negative_integer
28
- assert_instance_of BigDecimal, default.decimal_number
29
- assert_equal BigDecimal.new("2.78"), default.decimal_number
30
- end
31
- end
32
-
33
- if current_adapter?(:PostgreSQLAdapter)
34
- def test_multiline_default_text
35
- # older postgres versions represent the default with escapes ("\\012" for a newline)
36
- assert ( "--- []\n\n" == Default.columns_hash['multiline_default'].default ||
37
- "--- []\\012\\012" == Default.columns_hash['multiline_default'].default)
38
- end
39
- end
40
- end
41
-
42
- if current_adapter?(:MysqlAdapter)
43
- class DefaultsTestWithoutTransactionalFixtures < ActiveRecord::TestCase
44
- # ActiveRecord::Base#create! (and #save and other related methods) will
45
- # open a new transaction. When in transactional fixtures mode, this will
46
- # cause ActiveRecord to create a new savepoint. However, since MySQL doesn't
47
- # support DDL transactions, creating a table will result in any created
48
- # savepoints to be automatically released. This in turn causes the savepoint
49
- # release code in AbstractAdapter#transaction to fail.
50
- #
51
- # We don't want that to happen, so we disable transactional fixtures here.
52
- self.use_transactional_fixtures = false
53
-
54
- # MySQL 5 and higher is quirky with not null text/blob columns.
55
- # With MySQL Text/blob columns cannot have defaults. If the column is not
56
- # null MySQL will report that the column has a null default
57
- # but it behaves as though the column had a default of ''
58
- def test_mysql_text_not_null_defaults
59
- klass = Class.new(ActiveRecord::Base)
60
- klass.table_name = 'test_mysql_text_not_null_defaults'
61
- klass.connection.create_table klass.table_name do |t|
62
- t.column :non_null_text, :text, :null => false
63
- t.column :non_null_blob, :blob, :null => false
64
- t.column :null_text, :text, :null => true
65
- t.column :null_blob, :blob, :null => true
66
- end
67
- assert_equal '', klass.columns_hash['non_null_blob'].default
68
- assert_equal '', klass.columns_hash['non_null_text'].default
69
-
70
- assert_equal nil, klass.columns_hash['null_blob'].default
71
- assert_equal nil, klass.columns_hash['null_text'].default
72
-
73
- assert_nothing_raised do
74
- instance = klass.create!
75
- assert_equal '', instance.non_null_text
76
- assert_equal '', instance.non_null_blob
77
- assert_nil instance.null_text
78
- assert_nil instance.null_blob
79
- end
80
- ensure
81
- klass.connection.drop_table(klass.table_name) rescue nil
82
- end
83
-
84
- # MySQL uses an implicit default 0 rather than NULL unless in strict mode.
85
- # We use an implicit NULL so schema.rb is compatible with other databases.
86
- def test_mysql_integer_not_null_defaults
87
- klass = Class.new(ActiveRecord::Base)
88
- klass.table_name = 'test_integer_not_null_default_zero'
89
- klass.connection.create_table klass.table_name do |t|
90
- t.column :zero, :integer, :null => false, :default => 0
91
- t.column :omit, :integer, :null => false
92
- end
93
-
94
- assert_equal 0, klass.columns_hash['zero'].default
95
- assert !klass.columns_hash['zero'].null
96
- # 0 in MySQL 4, nil in 5.
97
- assert [0, nil].include?(klass.columns_hash['omit'].default)
98
- assert !klass.columns_hash['omit'].null
99
-
100
- assert_raise(ActiveRecord::StatementInvalid) { klass.create! }
101
-
102
- assert_nothing_raised do
103
- instance = klass.create!(:omit => 1)
104
- assert_equal 0, instance.zero
105
- assert_equal 1, instance.omit
106
- end
107
- ensure
108
- klass.connection.drop_table(klass.table_name) rescue nil
109
- end
110
- end
111
- end
@@ -1,30 +0,0 @@
1
- require "cases/helper"
2
- require 'models/entrant'
3
-
4
- class DeprecatedFinderTest < ActiveRecord::TestCase
5
- fixtures :entrants
6
-
7
- def test_deprecated_find_all_was_removed
8
- assert_raise(NoMethodError) { Entrant.find_all }
9
- end
10
-
11
- def test_deprecated_find_first_was_removed
12
- assert_raise(NoMethodError) { Entrant.find_first }
13
- end
14
-
15
- def test_deprecated_find_on_conditions_was_removed
16
- assert_raise(NoMethodError) { Entrant.find_on_conditions }
17
- end
18
-
19
- def test_count
20
- assert_equal(0, Entrant.count(:conditions => "id > 3"))
21
- assert_equal(1, Entrant.count(:conditions => ["id > ?", 2]))
22
- assert_equal(2, Entrant.count(:conditions => ["id > ?", 1]))
23
- end
24
-
25
- def test_count_by_sql
26
- assert_equal(0, Entrant.count_by_sql("SELECT COUNT(*) FROM entrants WHERE id > 3"))
27
- assert_equal(1, Entrant.count_by_sql(["SELECT COUNT(*) FROM entrants WHERE id > ?", 2]))
28
- assert_equal(2, Entrant.count_by_sql(["SELECT COUNT(*) FROM entrants WHERE id > ?", 1]))
29
- end
30
- end