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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1014 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +222 -0
- data/examples/performance.rb +100 -126
- data/examples/simple.rb +14 -0
- data/lib/active_record/aggregations.rb +93 -99
- data/lib/active_record/associations/alias_tracker.rb +76 -0
- data/lib/active_record/associations/association.rb +247 -0
- data/lib/active_record/associations/association_scope.rb +134 -0
- data/lib/active_record/associations/belongs_to_association.rb +54 -61
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +17 -59
- data/lib/active_record/associations/builder/association.rb +55 -0
- data/lib/active_record/associations/builder/belongs_to.rb +88 -0
- data/lib/active_record/associations/builder/collection_association.rb +75 -0
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +57 -0
- data/lib/active_record/associations/builder/has_many.rb +71 -0
- data/lib/active_record/associations/builder/has_one.rb +62 -0
- data/lib/active_record/associations/builder/singular_association.rb +32 -0
- data/lib/active_record/associations/collection_association.rb +580 -0
- data/lib/active_record/associations/collection_proxy.rb +133 -0
- data/lib/active_record/associations/has_and_belongs_to_many_association.rb +39 -119
- data/lib/active_record/associations/has_many_association.rb +60 -79
- data/lib/active_record/associations/has_many_through_association.rb +127 -206
- data/lib/active_record/associations/has_one_association.rb +55 -114
- data/lib/active_record/associations/has_one_through_association.rb +25 -26
- data/lib/active_record/associations/join_dependency/join_association.rb +159 -0
- data/lib/active_record/associations/join_dependency/join_base.rb +24 -0
- data/lib/active_record/associations/join_dependency/join_part.rb +78 -0
- data/lib/active_record/associations/join_dependency.rb +214 -0
- data/lib/active_record/associations/join_helper.rb +55 -0
- data/lib/active_record/associations/preloader/association.rb +125 -0
- data/lib/active_record/associations/preloader/belongs_to.rb +17 -0
- data/lib/active_record/associations/preloader/collection_association.rb +24 -0
- data/lib/active_record/associations/preloader/has_and_belongs_to_many.rb +60 -0
- data/lib/active_record/associations/preloader/has_many.rb +17 -0
- data/lib/active_record/associations/preloader/has_many_through.rb +15 -0
- data/lib/active_record/associations/preloader/has_one.rb +23 -0
- data/lib/active_record/associations/preloader/has_one_through.rb +9 -0
- data/lib/active_record/associations/preloader/singular_association.rb +21 -0
- data/lib/active_record/associations/preloader/through_association.rb +67 -0
- data/lib/active_record/associations/preloader.rb +181 -0
- data/lib/active_record/associations/singular_association.rb +64 -0
- data/lib/active_record/associations/through_association.rb +87 -0
- data/lib/active_record/associations.rb +693 -1337
- data/lib/active_record/attribute_assignment.rb +221 -0
- data/lib/active_record/attribute_methods/before_type_cast.rb +31 -0
- data/lib/active_record/attribute_methods/deprecated_underscore_read.rb +32 -0
- data/lib/active_record/attribute_methods/dirty.rb +111 -0
- data/lib/active_record/attribute_methods/primary_key.rb +114 -0
- data/lib/active_record/attribute_methods/query.rb +39 -0
- data/lib/active_record/attribute_methods/read.rb +136 -0
- data/lib/active_record/attribute_methods/serialization.rb +120 -0
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +65 -0
- data/lib/active_record/attribute_methods/write.rb +70 -0
- data/lib/active_record/attribute_methods.rb +211 -339
- data/lib/active_record/autosave_association.rb +179 -149
- data/lib/active_record/base.rb +401 -2907
- data/lib/active_record/callbacks.rb +91 -176
- data/lib/active_record/coders/yaml_column.rb +41 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +236 -119
- data/lib/active_record/connection_adapters/abstract/connection_specification.rb +110 -58
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +12 -11
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +175 -74
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +31 -35
- data/lib/active_record/connection_adapters/abstract/quoting.rb +71 -21
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +81 -311
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +194 -78
- data/lib/active_record/connection_adapters/abstract_adapter.rb +130 -83
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +676 -0
- data/lib/active_record/connection_adapters/column.rb +296 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +280 -0
- data/lib/active_record/connection_adapters/mysql_adapter.rb +272 -493
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +650 -405
- data/lib/active_record/connection_adapters/schema_cache.rb +69 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +30 -9
- data/lib/active_record/connection_adapters/sqlite_adapter.rb +276 -147
- data/lib/active_record/connection_adapters/statement_pool.rb +40 -0
- data/lib/active_record/counter_cache.rb +123 -0
- data/lib/active_record/dynamic_finder_match.rb +41 -14
- data/lib/active_record/dynamic_matchers.rb +84 -0
- data/lib/active_record/dynamic_scope_match.rb +13 -15
- data/lib/active_record/errors.rb +195 -0
- data/lib/active_record/explain.rb +86 -0
- data/lib/active_record/explain_subscriber.rb +25 -0
- data/lib/active_record/fixtures/file.rb +65 -0
- data/lib/active_record/fixtures.rb +695 -770
- data/lib/active_record/identity_map.rb +162 -0
- data/lib/active_record/inheritance.rb +174 -0
- data/lib/active_record/integration.rb +60 -0
- data/lib/active_record/locale/en.yml +9 -27
- data/lib/active_record/locking/optimistic.rb +76 -73
- data/lib/active_record/locking/pessimistic.rb +32 -10
- data/lib/active_record/log_subscriber.rb +72 -0
- data/lib/active_record/migration/command_recorder.rb +105 -0
- data/lib/active_record/migration.rb +415 -205
- data/lib/active_record/model_schema.rb +368 -0
- data/lib/active_record/nested_attributes.rb +153 -63
- data/lib/active_record/observer.rb +27 -103
- data/lib/active_record/persistence.rb +376 -0
- data/lib/active_record/query_cache.rb +49 -8
- data/lib/active_record/querying.rb +58 -0
- data/lib/active_record/railtie.rb +131 -0
- data/lib/active_record/railties/console_sandbox.rb +6 -0
- data/lib/active_record/railties/controller_runtime.rb +49 -0
- data/lib/active_record/railties/databases.rake +659 -0
- data/lib/active_record/railties/jdbcmysql_error.rb +16 -0
- data/lib/active_record/readonly_attributes.rb +26 -0
- data/lib/active_record/reflection.rb +269 -120
- data/lib/active_record/relation/batches.rb +90 -0
- data/lib/active_record/relation/calculations.rb +372 -0
- data/lib/active_record/relation/delegation.rb +49 -0
- data/lib/active_record/relation/finder_methods.rb +402 -0
- data/lib/active_record/relation/predicate_builder.rb +63 -0
- data/lib/active_record/relation/query_methods.rb +417 -0
- data/lib/active_record/relation/spawn_methods.rb +180 -0
- data/lib/active_record/relation.rb +537 -0
- data/lib/active_record/result.rb +40 -0
- data/lib/active_record/sanitization.rb +194 -0
- data/lib/active_record/schema.rb +9 -6
- data/lib/active_record/schema_dumper.rb +55 -32
- data/lib/active_record/scoping/default.rb +142 -0
- data/lib/active_record/scoping/named.rb +200 -0
- data/lib/active_record/scoping.rb +152 -0
- data/lib/active_record/serialization.rb +8 -91
- data/lib/active_record/serializers/xml_serializer.rb +43 -197
- data/lib/active_record/session_store.rb +129 -103
- data/lib/active_record/store.rb +52 -0
- data/lib/active_record/test_case.rb +30 -23
- data/lib/active_record/timestamp.rb +95 -52
- data/lib/active_record/transactions.rb +212 -66
- data/lib/active_record/translation.rb +22 -0
- data/lib/active_record/validations/associated.rb +43 -0
- data/lib/active_record/validations/uniqueness.rb +180 -0
- data/lib/active_record/validations.rb +43 -1106
- data/lib/active_record/version.rb +5 -4
- data/lib/active_record.rb +121 -48
- data/lib/rails/generators/active_record/migration/migration_generator.rb +25 -0
- data/lib/rails/generators/active_record/migration/templates/migration.rb +34 -0
- data/lib/rails/generators/active_record/migration.rb +15 -0
- data/lib/rails/generators/active_record/model/model_generator.rb +47 -0
- data/lib/rails/generators/active_record/model/templates/migration.rb +15 -0
- data/lib/rails/generators/active_record/model/templates/model.rb +12 -0
- data/lib/rails/generators/active_record/model/templates/module.rb +7 -0
- data/lib/rails/generators/active_record/observer/observer_generator.rb +15 -0
- data/lib/rails/generators/active_record/observer/templates/observer.rb +4 -0
- data/lib/rails/generators/active_record/session_migration/session_migration_generator.rb +25 -0
- data/lib/rails/generators/active_record/session_migration/templates/migration.rb +12 -0
- data/lib/rails/generators/active_record.rb +25 -0
- metadata +187 -363
- data/CHANGELOG +0 -5904
- data/README +0 -351
- data/RUNNING_UNIT_TESTS +0 -36
- data/Rakefile +0 -268
- data/install.rb +0 -30
- data/lib/active_record/association_preload.rb +0 -406
- data/lib/active_record/associations/association_collection.rb +0 -533
- data/lib/active_record/associations/association_proxy.rb +0 -288
- data/lib/active_record/batches.rb +0 -85
- data/lib/active_record/calculations.rb +0 -321
- data/lib/active_record/dirty.rb +0 -183
- data/lib/active_record/named_scope.rb +0 -197
- data/lib/active_record/serializers/json_serializer.rb +0 -91
- data/lib/activerecord.rb +0 -2
- data/test/assets/example.log +0 -1
- data/test/assets/flowers.jpg +0 -0
- data/test/cases/aaa_create_tables_test.rb +0 -24
- data/test/cases/active_schema_test_mysql.rb +0 -122
- data/test/cases/active_schema_test_postgresql.rb +0 -24
- data/test/cases/adapter_test.rb +0 -144
- data/test/cases/aggregations_test.rb +0 -167
- data/test/cases/ar_schema_test.rb +0 -32
- data/test/cases/associations/belongs_to_associations_test.rb +0 -438
- data/test/cases/associations/callbacks_test.rb +0 -161
- data/test/cases/associations/cascaded_eager_loading_test.rb +0 -131
- data/test/cases/associations/eager_load_includes_full_sti_class_test.rb +0 -36
- data/test/cases/associations/eager_load_nested_include_test.rb +0 -131
- data/test/cases/associations/eager_load_nested_polymorphic_include.rb +0 -19
- data/test/cases/associations/eager_singularization_test.rb +0 -145
- data/test/cases/associations/eager_test.rb +0 -852
- data/test/cases/associations/extension_test.rb +0 -62
- data/test/cases/associations/habtm_join_table_test.rb +0 -56
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +0 -827
- data/test/cases/associations/has_many_associations_test.rb +0 -1273
- data/test/cases/associations/has_many_through_associations_test.rb +0 -360
- data/test/cases/associations/has_one_associations_test.rb +0 -330
- data/test/cases/associations/has_one_through_associations_test.rb +0 -209
- data/test/cases/associations/inner_join_association_test.rb +0 -93
- data/test/cases/associations/inverse_associations_test.rb +0 -566
- data/test/cases/associations/join_model_test.rb +0 -712
- data/test/cases/associations_test.rb +0 -282
- data/test/cases/attribute_methods_test.rb +0 -305
- data/test/cases/autosave_association_test.rb +0 -1218
- data/test/cases/base_test.rb +0 -2166
- data/test/cases/batches_test.rb +0 -81
- data/test/cases/binary_test.rb +0 -30
- data/test/cases/calculations_test.rb +0 -360
- data/test/cases/callbacks_observers_test.rb +0 -38
- data/test/cases/callbacks_test.rb +0 -438
- data/test/cases/class_inheritable_attributes_test.rb +0 -32
- data/test/cases/column_alias_test.rb +0 -17
- data/test/cases/column_definition_test.rb +0 -70
- data/test/cases/connection_pool_test.rb +0 -25
- data/test/cases/connection_test_firebird.rb +0 -8
- data/test/cases/connection_test_mysql.rb +0 -65
- data/test/cases/copy_table_test_sqlite.rb +0 -80
- data/test/cases/counter_cache_test.rb +0 -84
- data/test/cases/database_statements_test.rb +0 -12
- data/test/cases/datatype_test_postgresql.rb +0 -204
- data/test/cases/date_time_test.rb +0 -37
- data/test/cases/default_test_firebird.rb +0 -16
- data/test/cases/defaults_test.rb +0 -111
- data/test/cases/deprecated_finder_test.rb +0 -30
- data/test/cases/dirty_test.rb +0 -316
- data/test/cases/finder_respond_to_test.rb +0 -76
- data/test/cases/finder_test.rb +0 -1098
- data/test/cases/fixtures_test.rb +0 -661
- data/test/cases/helper.rb +0 -68
- data/test/cases/i18n_test.rb +0 -46
- data/test/cases/inheritance_test.rb +0 -262
- data/test/cases/invalid_date_test.rb +0 -24
- data/test/cases/json_serialization_test.rb +0 -219
- data/test/cases/lifecycle_test.rb +0 -193
- data/test/cases/locking_test.rb +0 -350
- data/test/cases/method_scoping_test.rb +0 -704
- data/test/cases/migration_test.rb +0 -1649
- data/test/cases/migration_test_firebird.rb +0 -124
- data/test/cases/mixin_test.rb +0 -96
- data/test/cases/modules_test.rb +0 -109
- data/test/cases/multiple_db_test.rb +0 -85
- data/test/cases/named_scope_test.rb +0 -372
- data/test/cases/nested_attributes_test.rb +0 -840
- data/test/cases/pk_test.rb +0 -119
- data/test/cases/pooled_connections_test.rb +0 -103
- data/test/cases/query_cache_test.rb +0 -129
- data/test/cases/readonly_test.rb +0 -107
- data/test/cases/reflection_test.rb +0 -234
- data/test/cases/reload_models_test.rb +0 -22
- data/test/cases/repair_helper.rb +0 -50
- data/test/cases/reserved_word_test_mysql.rb +0 -176
- data/test/cases/sanitize_test.rb +0 -25
- data/test/cases/schema_authorization_test_postgresql.rb +0 -75
- data/test/cases/schema_dumper_test.rb +0 -211
- data/test/cases/schema_test_postgresql.rb +0 -178
- data/test/cases/serialization_test.rb +0 -47
- data/test/cases/sp_test_mysql.rb +0 -16
- data/test/cases/synonym_test_oracle.rb +0 -17
- data/test/cases/timestamp_test.rb +0 -75
- data/test/cases/transactions_test.rb +0 -543
- data/test/cases/unconnected_test.rb +0 -32
- data/test/cases/validations_i18n_test.rb +0 -925
- data/test/cases/validations_test.rb +0 -1684
- data/test/cases/xml_serialization_test.rb +0 -240
- data/test/cases/yaml_serialization_test.rb +0 -11
- data/test/config.rb +0 -5
- data/test/connections/jdbc_jdbcderby/connection.rb +0 -18
- data/test/connections/jdbc_jdbch2/connection.rb +0 -18
- data/test/connections/jdbc_jdbchsqldb/connection.rb +0 -18
- data/test/connections/jdbc_jdbcmysql/connection.rb +0 -26
- data/test/connections/jdbc_jdbcpostgresql/connection.rb +0 -26
- data/test/connections/jdbc_jdbcsqlite3/connection.rb +0 -25
- data/test/connections/native_db2/connection.rb +0 -25
- data/test/connections/native_firebird/connection.rb +0 -26
- data/test/connections/native_frontbase/connection.rb +0 -27
- data/test/connections/native_mysql/connection.rb +0 -25
- data/test/connections/native_openbase/connection.rb +0 -21
- data/test/connections/native_oracle/connection.rb +0 -27
- data/test/connections/native_postgresql/connection.rb +0 -21
- data/test/connections/native_sqlite/connection.rb +0 -25
- data/test/connections/native_sqlite3/connection.rb +0 -25
- data/test/connections/native_sqlite3/in_memory_connection.rb +0 -18
- data/test/connections/native_sybase/connection.rb +0 -23
- data/test/fixtures/accounts.yml +0 -29
- data/test/fixtures/all/developers.yml +0 -0
- data/test/fixtures/all/people.csv +0 -0
- data/test/fixtures/all/tasks.yml +0 -0
- data/test/fixtures/author_addresses.yml +0 -5
- data/test/fixtures/author_favorites.yml +0 -4
- data/test/fixtures/authors.yml +0 -9
- data/test/fixtures/binaries.yml +0 -132
- data/test/fixtures/books.yml +0 -7
- data/test/fixtures/categories/special_categories.yml +0 -9
- data/test/fixtures/categories/subsubdir/arbitrary_filename.yml +0 -4
- data/test/fixtures/categories.yml +0 -14
- data/test/fixtures/categories_ordered.yml +0 -7
- data/test/fixtures/categories_posts.yml +0 -23
- data/test/fixtures/categorizations.yml +0 -17
- data/test/fixtures/clubs.yml +0 -6
- data/test/fixtures/comments.yml +0 -59
- data/test/fixtures/companies.yml +0 -56
- data/test/fixtures/computers.yml +0 -4
- data/test/fixtures/courses.yml +0 -7
- data/test/fixtures/customers.yml +0 -26
- data/test/fixtures/developers.yml +0 -21
- data/test/fixtures/developers_projects.yml +0 -17
- data/test/fixtures/edges.yml +0 -6
- data/test/fixtures/entrants.yml +0 -14
- data/test/fixtures/faces.yml +0 -11
- data/test/fixtures/fk_test_has_fk.yml +0 -3
- data/test/fixtures/fk_test_has_pk.yml +0 -2
- data/test/fixtures/funny_jokes.yml +0 -10
- data/test/fixtures/interests.yml +0 -33
- data/test/fixtures/items.yml +0 -4
- data/test/fixtures/jobs.yml +0 -7
- data/test/fixtures/legacy_things.yml +0 -3
- data/test/fixtures/mateys.yml +0 -4
- data/test/fixtures/member_types.yml +0 -6
- data/test/fixtures/members.yml +0 -6
- data/test/fixtures/memberships.yml +0 -20
- data/test/fixtures/men.yml +0 -5
- data/test/fixtures/minimalistics.yml +0 -2
- data/test/fixtures/mixed_case_monkeys.yml +0 -6
- data/test/fixtures/mixins.yml +0 -29
- data/test/fixtures/movies.yml +0 -7
- data/test/fixtures/naked/csv/accounts.csv +0 -1
- data/test/fixtures/naked/yml/accounts.yml +0 -1
- data/test/fixtures/naked/yml/companies.yml +0 -1
- data/test/fixtures/naked/yml/courses.yml +0 -1
- data/test/fixtures/organizations.yml +0 -5
- data/test/fixtures/owners.yml +0 -7
- data/test/fixtures/parrots.yml +0 -27
- data/test/fixtures/parrots_pirates.yml +0 -7
- data/test/fixtures/people.yml +0 -15
- data/test/fixtures/pets.yml +0 -14
- data/test/fixtures/pirates.yml +0 -9
- data/test/fixtures/polymorphic_designs.yml +0 -19
- data/test/fixtures/polymorphic_prices.yml +0 -19
- data/test/fixtures/posts.yml +0 -52
- data/test/fixtures/price_estimates.yml +0 -7
- data/test/fixtures/projects.yml +0 -7
- data/test/fixtures/readers.yml +0 -9
- data/test/fixtures/references.yml +0 -17
- data/test/fixtures/reserved_words/distinct.yml +0 -5
- data/test/fixtures/reserved_words/distincts_selects.yml +0 -11
- data/test/fixtures/reserved_words/group.yml +0 -14
- data/test/fixtures/reserved_words/select.yml +0 -8
- data/test/fixtures/reserved_words/values.yml +0 -7
- data/test/fixtures/ships.yml +0 -5
- data/test/fixtures/sponsors.yml +0 -9
- data/test/fixtures/subscribers.yml +0 -7
- data/test/fixtures/subscriptions.yml +0 -12
- data/test/fixtures/taggings.yml +0 -28
- data/test/fixtures/tags.yml +0 -7
- data/test/fixtures/tasks.yml +0 -7
- data/test/fixtures/tees.yml +0 -4
- data/test/fixtures/ties.yml +0 -4
- data/test/fixtures/topics.yml +0 -42
- data/test/fixtures/toys.yml +0 -4
- data/test/fixtures/treasures.yml +0 -10
- data/test/fixtures/vertices.yml +0 -4
- data/test/fixtures/warehouse-things.yml +0 -3
- data/test/fixtures/zines.yml +0 -5
- data/test/migrations/broken/100_migration_that_raises_exception.rb +0 -10
- data/test/migrations/decimal/1_give_me_big_numbers.rb +0 -15
- data/test/migrations/duplicate/1_people_have_last_names.rb +0 -9
- data/test/migrations/duplicate/2_we_need_reminders.rb +0 -12
- data/test/migrations/duplicate/3_foo.rb +0 -7
- data/test/migrations/duplicate/3_innocent_jointable.rb +0 -12
- data/test/migrations/duplicate_names/20080507052938_chunky.rb +0 -7
- data/test/migrations/duplicate_names/20080507053028_chunky.rb +0 -7
- data/test/migrations/interleaved/pass_1/3_innocent_jointable.rb +0 -12
- data/test/migrations/interleaved/pass_2/1_people_have_last_names.rb +0 -9
- data/test/migrations/interleaved/pass_2/3_innocent_jointable.rb +0 -12
- data/test/migrations/interleaved/pass_3/1_people_have_last_names.rb +0 -9
- data/test/migrations/interleaved/pass_3/2_i_raise_on_down.rb +0 -8
- data/test/migrations/interleaved/pass_3/3_innocent_jointable.rb +0 -12
- data/test/migrations/missing/1000_people_have_middle_names.rb +0 -9
- data/test/migrations/missing/1_people_have_last_names.rb +0 -9
- data/test/migrations/missing/3_we_need_reminders.rb +0 -12
- data/test/migrations/missing/4_innocent_jointable.rb +0 -12
- data/test/migrations/valid/1_people_have_last_names.rb +0 -9
- data/test/migrations/valid/2_we_need_reminders.rb +0 -12
- data/test/migrations/valid/3_innocent_jointable.rb +0 -12
- data/test/models/author.rb +0 -151
- data/test/models/auto_id.rb +0 -4
- data/test/models/binary.rb +0 -2
- data/test/models/bird.rb +0 -9
- data/test/models/book.rb +0 -4
- data/test/models/categorization.rb +0 -5
- data/test/models/category.rb +0 -34
- data/test/models/citation.rb +0 -6
- data/test/models/club.rb +0 -13
- data/test/models/column_name.rb +0 -3
- data/test/models/comment.rb +0 -29
- data/test/models/company.rb +0 -173
- data/test/models/company_in_module.rb +0 -78
- data/test/models/computer.rb +0 -3
- data/test/models/contact.rb +0 -16
- data/test/models/contract.rb +0 -5
- data/test/models/course.rb +0 -3
- data/test/models/customer.rb +0 -73
- data/test/models/default.rb +0 -2
- data/test/models/developer.rb +0 -101
- data/test/models/edge.rb +0 -5
- data/test/models/entrant.rb +0 -3
- data/test/models/essay.rb +0 -3
- data/test/models/event.rb +0 -3
- data/test/models/event_author.rb +0 -8
- data/test/models/face.rb +0 -7
- data/test/models/guid.rb +0 -2
- data/test/models/interest.rb +0 -5
- data/test/models/invoice.rb +0 -4
- data/test/models/item.rb +0 -7
- data/test/models/job.rb +0 -5
- data/test/models/joke.rb +0 -3
- data/test/models/keyboard.rb +0 -3
- data/test/models/legacy_thing.rb +0 -3
- data/test/models/line_item.rb +0 -3
- data/test/models/man.rb +0 -9
- data/test/models/matey.rb +0 -4
- data/test/models/member.rb +0 -12
- data/test/models/member_detail.rb +0 -5
- data/test/models/member_type.rb +0 -3
- data/test/models/membership.rb +0 -9
- data/test/models/minimalistic.rb +0 -2
- data/test/models/mixed_case_monkey.rb +0 -3
- data/test/models/movie.rb +0 -5
- data/test/models/order.rb +0 -4
- data/test/models/organization.rb +0 -6
- data/test/models/owner.rb +0 -5
- data/test/models/parrot.rb +0 -22
- data/test/models/person.rb +0 -16
- data/test/models/pet.rb +0 -5
- data/test/models/pirate.rb +0 -80
- data/test/models/polymorphic_design.rb +0 -3
- data/test/models/polymorphic_price.rb +0 -3
- data/test/models/post.rb +0 -102
- data/test/models/price_estimate.rb +0 -3
- data/test/models/project.rb +0 -30
- data/test/models/reader.rb +0 -4
- data/test/models/reference.rb +0 -4
- data/test/models/reply.rb +0 -46
- data/test/models/ship.rb +0 -19
- data/test/models/ship_part.rb +0 -7
- data/test/models/sponsor.rb +0 -4
- data/test/models/subject.rb +0 -4
- data/test/models/subscriber.rb +0 -8
- data/test/models/subscription.rb +0 -4
- data/test/models/tag.rb +0 -7
- data/test/models/tagging.rb +0 -10
- data/test/models/task.rb +0 -3
- data/test/models/tee.rb +0 -4
- data/test/models/tie.rb +0 -4
- data/test/models/topic.rb +0 -80
- data/test/models/toy.rb +0 -6
- data/test/models/treasure.rb +0 -8
- data/test/models/vertex.rb +0 -9
- data/test/models/warehouse_thing.rb +0 -5
- data/test/models/zine.rb +0 -3
- data/test/schema/mysql_specific_schema.rb +0 -31
- data/test/schema/postgresql_specific_schema.rb +0 -114
- data/test/schema/schema.rb +0 -550
- data/test/schema/schema2.rb +0 -6
- 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
|
data/test/cases/defaults_test.rb
DELETED
@@ -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
|