activerecord 2.3.18 → 3.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,22 +0,0 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'models/owner'
|
3
|
-
require 'models/pet'
|
4
|
-
|
5
|
-
class ReloadModelsTest < ActiveRecord::TestCase
|
6
|
-
fixtures :pets
|
7
|
-
|
8
|
-
def test_has_one_with_reload
|
9
|
-
pet = Pet.find_by_name('parrot')
|
10
|
-
pet.owner = Owner.find_by_name('ashley')
|
11
|
-
|
12
|
-
# Reload the class Owner, simulating auto-reloading of model classes in a
|
13
|
-
# development environment. Note that meanwhile the class Pet is not
|
14
|
-
# reloaded, simulating a class that is present in a plugin.
|
15
|
-
Object.class_eval { remove_const :Owner }
|
16
|
-
Kernel.load(File.expand_path(File.join(File.dirname(__FILE__), "../models/owner.rb")))
|
17
|
-
|
18
|
-
pet = Pet.find_by_name('parrot')
|
19
|
-
pet.owner = Owner.find_by_name('ashley')
|
20
|
-
assert_equal pet.owner, Owner.find_by_name('ashley')
|
21
|
-
end
|
22
|
-
end
|
data/test/cases/repair_helper.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Testing
|
3
|
-
module RepairHelper
|
4
|
-
def self.included(base)
|
5
|
-
base.class_eval do
|
6
|
-
extend ClassMethods
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
module Toolbox
|
11
|
-
def self.record_validations(*model_classes)
|
12
|
-
model_classes.inject({}) do |repair, klass|
|
13
|
-
repair[klass] ||= {}
|
14
|
-
[:validate, :validate_on_create, :validate_on_update].each do |callback|
|
15
|
-
the_callback = klass.instance_variable_get("@#{callback.to_s}_callbacks")
|
16
|
-
repair[klass][callback] = (the_callback.nil? ? nil : the_callback.dup)
|
17
|
-
end
|
18
|
-
repair
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.reset_validations(recorded)
|
23
|
-
recorded.each do |klass, repairs|
|
24
|
-
[:validate, :validate_on_create, :validate_on_update].each do |callback|
|
25
|
-
klass.instance_variable_set("@#{callback.to_s}_callbacks", repairs[callback])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
module ClassMethods
|
32
|
-
def repair_validations(*model_classes)
|
33
|
-
setup do
|
34
|
-
@validation_repairs = ActiveRecord::Testing::RepairHelper::Toolbox.record_validations(*model_classes)
|
35
|
-
end
|
36
|
-
teardown do
|
37
|
-
ActiveRecord::Testing::RepairHelper::Toolbox.reset_validations(@validation_repairs)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def repair_validations(*model_classes, &block)
|
43
|
-
validation_repairs = ActiveRecord::Testing::RepairHelper::Toolbox.record_validations(*model_classes)
|
44
|
-
return block.call
|
45
|
-
ensure
|
46
|
-
ActiveRecord::Testing::RepairHelper::Toolbox.reset_validations(validation_repairs)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,176 +0,0 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
|
3
|
-
class Group < ActiveRecord::Base
|
4
|
-
Group.table_name = 'group'
|
5
|
-
belongs_to :select, :class_name => 'Select'
|
6
|
-
has_one :values
|
7
|
-
end
|
8
|
-
|
9
|
-
class Select < ActiveRecord::Base
|
10
|
-
Select.table_name = 'select'
|
11
|
-
has_many :groups
|
12
|
-
end
|
13
|
-
|
14
|
-
class Values < ActiveRecord::Base
|
15
|
-
Values.table_name = 'values'
|
16
|
-
end
|
17
|
-
|
18
|
-
class Distinct < ActiveRecord::Base
|
19
|
-
Distinct.table_name = 'distinct'
|
20
|
-
has_and_belongs_to_many :selects
|
21
|
-
has_many :values, :through => :groups
|
22
|
-
end
|
23
|
-
|
24
|
-
# a suite of tests to ensure the ConnectionAdapters#MysqlAdapter can handle tables with
|
25
|
-
# reserved word names (ie: group, order, values, etc...)
|
26
|
-
class MysqlReservedWordTest < ActiveRecord::TestCase
|
27
|
-
def setup
|
28
|
-
@connection = ActiveRecord::Base.connection
|
29
|
-
|
30
|
-
# we call execute directly here (and do similar below) because ActiveRecord::Base#create_table()
|
31
|
-
# will fail with these table names if these test cases fail
|
32
|
-
|
33
|
-
create_tables_directly 'group'=>'id int auto_increment primary key, `order` varchar(255), select_id int',
|
34
|
-
'select'=>'id int auto_increment primary key',
|
35
|
-
'values'=>'id int auto_increment primary key, group_id int',
|
36
|
-
'distinct'=>'id int auto_increment primary key',
|
37
|
-
'distincts_selects'=>'distinct_id int, select_id int'
|
38
|
-
end
|
39
|
-
|
40
|
-
def teardown
|
41
|
-
drop_tables_directly ['group', 'select', 'values', 'distinct', 'distincts_selects', 'order']
|
42
|
-
end
|
43
|
-
|
44
|
-
# create tables with reserved-word names and columns
|
45
|
-
def test_create_tables
|
46
|
-
assert_nothing_raised {
|
47
|
-
@connection.create_table :order do |t|
|
48
|
-
t.column :group, :string
|
49
|
-
end
|
50
|
-
}
|
51
|
-
end
|
52
|
-
|
53
|
-
# rename tables with reserved-word names
|
54
|
-
def test_rename_tables
|
55
|
-
assert_nothing_raised { @connection.rename_table(:group, :order) }
|
56
|
-
end
|
57
|
-
|
58
|
-
# alter column with a reserved-word name in a table with a reserved-word name
|
59
|
-
def test_change_columns
|
60
|
-
assert_nothing_raised { @connection.change_column_default(:group, :order, 'whatever') }
|
61
|
-
#the quoting here will reveal any double quoting issues in change_column's interaction with the column method in the adapter
|
62
|
-
assert_nothing_raised { @connection.change_column('group', 'order', :Int, :default => 0) }
|
63
|
-
assert_nothing_raised { @connection.rename_column(:group, :order, :values) }
|
64
|
-
end
|
65
|
-
|
66
|
-
# dump structure of table with reserved word name
|
67
|
-
def test_structure_dump
|
68
|
-
assert_nothing_raised { @connection.structure_dump }
|
69
|
-
end
|
70
|
-
|
71
|
-
# introspect table with reserved word name
|
72
|
-
def test_introspect
|
73
|
-
assert_nothing_raised { @connection.columns(:group) }
|
74
|
-
assert_nothing_raised { @connection.indexes(:group) }
|
75
|
-
end
|
76
|
-
|
77
|
-
#fixtures
|
78
|
-
self.use_instantiated_fixtures = true
|
79
|
-
self.use_transactional_fixtures = false
|
80
|
-
|
81
|
-
#fixtures :group
|
82
|
-
|
83
|
-
def test_fixtures
|
84
|
-
f = create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
|
85
|
-
|
86
|
-
assert_nothing_raised {
|
87
|
-
f.each do |x|
|
88
|
-
x.delete_existing_fixtures
|
89
|
-
end
|
90
|
-
}
|
91
|
-
|
92
|
-
assert_nothing_raised {
|
93
|
-
f.each do |x|
|
94
|
-
x.insert_fixtures
|
95
|
-
end
|
96
|
-
}
|
97
|
-
end
|
98
|
-
|
99
|
-
#activerecord model class with reserved-word table name
|
100
|
-
def test_activerecord_model
|
101
|
-
create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
|
102
|
-
x = nil
|
103
|
-
assert_nothing_raised { x = Group.new }
|
104
|
-
x.order = 'x'
|
105
|
-
assert_nothing_raised { x.save }
|
106
|
-
x.order = 'y'
|
107
|
-
assert_nothing_raised { x.save }
|
108
|
-
assert_nothing_raised { y = Group.find_by_order('y') }
|
109
|
-
assert_nothing_raised { y = Group.find(1) }
|
110
|
-
x = Group.find(1)
|
111
|
-
end
|
112
|
-
|
113
|
-
# has_one association with reserved-word table name
|
114
|
-
def test_has_one_associations
|
115
|
-
create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
|
116
|
-
v = nil
|
117
|
-
assert_nothing_raised { v = Group.find(1).values }
|
118
|
-
assert_equal v.id, 2
|
119
|
-
end
|
120
|
-
|
121
|
-
# belongs_to association with reserved-word table name
|
122
|
-
def test_belongs_to_associations
|
123
|
-
create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
|
124
|
-
gs = nil
|
125
|
-
assert_nothing_raised { gs = Select.find(2).groups }
|
126
|
-
assert_equal gs.length, 2
|
127
|
-
assert(gs.collect{|x| x.id}.sort == [2, 3])
|
128
|
-
end
|
129
|
-
|
130
|
-
# has_and_belongs_to_many with reserved-word table name
|
131
|
-
def test_has_and_belongs_to_many
|
132
|
-
create_test_fixtures :select, :distinct, :group, :values, :distincts_selects
|
133
|
-
s = nil
|
134
|
-
assert_nothing_raised { s = Distinct.find(1).selects }
|
135
|
-
assert_equal s.length, 2
|
136
|
-
assert(s.collect{|x|x.id}.sort == [1, 2])
|
137
|
-
end
|
138
|
-
|
139
|
-
# activerecord model introspection with reserved-word table and column names
|
140
|
-
def test_activerecord_introspection
|
141
|
-
assert_nothing_raised { Group.table_exists? }
|
142
|
-
assert_nothing_raised { Group.columns }
|
143
|
-
end
|
144
|
-
|
145
|
-
# Calculations
|
146
|
-
def test_calculations_work_with_reserved_words
|
147
|
-
assert_nothing_raised { Group.count }
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_associations_work_with_reserved_words
|
151
|
-
assert_nothing_raised { Select.find(:all, :include => [:groups]) }
|
152
|
-
end
|
153
|
-
|
154
|
-
#the following functions were added to DRY test cases
|
155
|
-
|
156
|
-
private
|
157
|
-
# custom fixture loader, uses Fixtures#create_fixtures and appends base_path to the current file's path
|
158
|
-
def create_test_fixtures(*fixture_names)
|
159
|
-
Fixtures.create_fixtures(FIXTURES_ROOT + "/reserved_words", fixture_names)
|
160
|
-
end
|
161
|
-
|
162
|
-
# custom drop table, uses execute on connection to drop a table if it exists. note: escapes table_name
|
163
|
-
def drop_tables_directly(table_names, connection = @connection)
|
164
|
-
table_names.each do |name|
|
165
|
-
connection.execute("DROP TABLE IF EXISTS `#{name}`")
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
# custom create table, uses execute on connection to create a table, note: escapes table_name, does NOT escape columns
|
170
|
-
def create_tables_directly (tables, connection = @connection)
|
171
|
-
tables.each do |table_name, column_properties|
|
172
|
-
connection.execute("CREATE TABLE `#{table_name}` ( #{column_properties} )")
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
end
|
data/test/cases/sanitize_test.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'models/binary'
|
3
|
-
|
4
|
-
class SanitizeTest < ActiveRecord::TestCase
|
5
|
-
def setup
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_sanitize_sql_array_handles_string_interpolation
|
9
|
-
quoted_bambi = ActiveRecord::Base.connection.quote_string("Bambi")
|
10
|
-
assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=%s", "Bambi"])
|
11
|
-
assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=%s", "Bambi".mb_chars])
|
12
|
-
quoted_bambi_and_thumper = ActiveRecord::Base.connection.quote_string("Bambi\nand\nThumper")
|
13
|
-
assert_equal "name=#{quoted_bambi_and_thumper}",Binary.send(:sanitize_sql_array, ["name=%s", "Bambi\nand\nThumper"])
|
14
|
-
assert_equal "name=#{quoted_bambi_and_thumper}",Binary.send(:sanitize_sql_array, ["name=%s", "Bambi\nand\nThumper".mb_chars])
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_sanitize_sql_array_handles_bind_variables
|
18
|
-
quoted_bambi = ActiveRecord::Base.connection.quote("Bambi")
|
19
|
-
assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi"])
|
20
|
-
assert_equal "name=#{quoted_bambi}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi".mb_chars])
|
21
|
-
quoted_bambi_and_thumper = ActiveRecord::Base.connection.quote("Bambi\nand\nThumper")
|
22
|
-
assert_equal "name=#{quoted_bambi_and_thumper}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi\nand\nThumper"])
|
23
|
-
assert_equal "name=#{quoted_bambi_and_thumper}", Binary.send(:sanitize_sql_array, ["name=?", "Bambi\nand\nThumper".mb_chars])
|
24
|
-
end
|
25
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
|
3
|
-
class SchemaThing < ActiveRecord::Base
|
4
|
-
end
|
5
|
-
|
6
|
-
class SchemaAuthorizationTest < ActiveRecord::TestCase
|
7
|
-
self.use_transactional_fixtures = false
|
8
|
-
|
9
|
-
TABLE_NAME = 'schema_things'
|
10
|
-
COLUMNS = [
|
11
|
-
'id serial primary key',
|
12
|
-
'name character varying(50)'
|
13
|
-
]
|
14
|
-
USERS = ['rails_pg_schema_user1', 'rails_pg_schema_user2']
|
15
|
-
|
16
|
-
def setup
|
17
|
-
@connection = ActiveRecord::Base.connection
|
18
|
-
@connection.execute "SET search_path TO '$user',public"
|
19
|
-
set_session_auth
|
20
|
-
USERS.each do |u|
|
21
|
-
@connection.execute "CREATE USER #{u}" rescue nil
|
22
|
-
@connection.execute "CREATE SCHEMA AUTHORIZATION #{u}" rescue nil
|
23
|
-
set_session_auth u
|
24
|
-
@connection.execute "CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})"
|
25
|
-
@connection.execute "INSERT INTO #{TABLE_NAME} (name) VALUES ('#{u}')"
|
26
|
-
set_session_auth
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def teardown
|
31
|
-
set_session_auth
|
32
|
-
@connection.execute "RESET search_path"
|
33
|
-
USERS.each do |u|
|
34
|
-
@connection.execute "DROP SCHEMA #{u} CASCADE"
|
35
|
-
@connection.execute "DROP USER #{u}"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_schema_invisible
|
40
|
-
assert_raise(ActiveRecord::StatementInvalid) do
|
41
|
-
set_session_auth
|
42
|
-
@connection.execute "SELECT * FROM #{TABLE_NAME}"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_schema_uniqueness
|
47
|
-
assert_nothing_raised do
|
48
|
-
set_session_auth
|
49
|
-
USERS.each do |u|
|
50
|
-
set_session_auth u
|
51
|
-
assert_equal u, @connection.select_value("SELECT name FROM #{TABLE_NAME} WHERE id = 1")
|
52
|
-
set_session_auth
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_sequence_schema_caching
|
58
|
-
assert_nothing_raised do
|
59
|
-
USERS.each do |u|
|
60
|
-
set_session_auth u
|
61
|
-
st = SchemaThing.new :name => 'TEST1'
|
62
|
-
st.save!
|
63
|
-
st = SchemaThing.new :id => 5, :name => 'TEST2'
|
64
|
-
st.save!
|
65
|
-
set_session_auth
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
private
|
71
|
-
def set_session_auth auth = nil
|
72
|
-
@connection.execute "SET SESSION AUTHORIZATION #{auth || 'default'}"
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
@@ -1,211 +0,0 @@
|
|
1
|
-
require "cases/helper"
|
2
|
-
require 'stringio'
|
3
|
-
|
4
|
-
|
5
|
-
class SchemaDumperTest < ActiveRecord::TestCase
|
6
|
-
def standard_dump
|
7
|
-
stream = StringIO.new
|
8
|
-
ActiveRecord::SchemaDumper.ignore_tables = []
|
9
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
10
|
-
stream.string
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_schema_dump
|
14
|
-
output = standard_dump
|
15
|
-
assert_match %r{create_table "accounts"}, output
|
16
|
-
assert_match %r{create_table "authors"}, output
|
17
|
-
assert_no_match %r{create_table "schema_migrations"}, output
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_schema_dump_excludes_sqlite_sequence
|
21
|
-
output = standard_dump
|
22
|
-
assert_no_match %r{create_table "sqlite_sequence"}, output
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_schema_dump_includes_camelcase_table_name
|
26
|
-
output = standard_dump
|
27
|
-
assert_match %r{create_table "CamelCase"}, output
|
28
|
-
end
|
29
|
-
|
30
|
-
def assert_line_up(lines, pattern, required = false)
|
31
|
-
return assert(true) if lines.empty?
|
32
|
-
matches = lines.map { |line| line.match(pattern) }
|
33
|
-
assert matches.all? if required
|
34
|
-
matches.compact!
|
35
|
-
return assert(true) if matches.empty?
|
36
|
-
assert_equal 1, matches.map{ |match| match.offset(0).first }.uniq.length
|
37
|
-
end
|
38
|
-
|
39
|
-
def column_definition_lines(output = standard_dump)
|
40
|
-
output.scan(/^( *)create_table.*?\n(.*?)^\1end/m).map{ |m| m.last.split(/\n/) }
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_types_line_up
|
44
|
-
column_definition_lines.each do |column_set|
|
45
|
-
next if column_set.empty?
|
46
|
-
|
47
|
-
lengths = column_set.map do |column|
|
48
|
-
if match = column.match(/t\.(?:integer|decimal|float|datetime|timestamp|time|date|text|binary|string|boolean)\s+"/)
|
49
|
-
match[0].length
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
assert_equal 1, lengths.uniq.length
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_arguments_line_up
|
58
|
-
column_definition_lines.each do |column_set|
|
59
|
-
assert_line_up(column_set, /:default => /)
|
60
|
-
assert_line_up(column_set, /:limit => /)
|
61
|
-
assert_line_up(column_set, /:null => /)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def test_no_dump_errors
|
66
|
-
output = standard_dump
|
67
|
-
assert_no_match %r{\# Could not dump table}, output
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_schema_dump_includes_not_null_columns
|
71
|
-
stream = StringIO.new
|
72
|
-
|
73
|
-
ActiveRecord::SchemaDumper.ignore_tables = [/^[^r]/]
|
74
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
75
|
-
output = stream.string
|
76
|
-
assert_match %r{:null => false}, output
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_schema_dump_includes_limit_constraint_for_integer_columns
|
80
|
-
stream = StringIO.new
|
81
|
-
|
82
|
-
ActiveRecord::SchemaDumper.ignore_tables = [/^(?!integer_limits)/]
|
83
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
84
|
-
output = stream.string
|
85
|
-
|
86
|
-
if current_adapter?(:PostgreSQLAdapter)
|
87
|
-
assert_match %r{c_int_1.*:limit => 2}, output
|
88
|
-
assert_match %r{c_int_2.*:limit => 2}, output
|
89
|
-
|
90
|
-
# int 3 is 4 bytes in postgresql
|
91
|
-
assert_match %r{c_int_3.*}, output
|
92
|
-
assert_no_match %r{c_int_3.*:limit}, output
|
93
|
-
|
94
|
-
assert_match %r{c_int_4.*}, output
|
95
|
-
assert_no_match %r{c_int_4.*:limit}, output
|
96
|
-
elsif current_adapter?(:MysqlAdapter)
|
97
|
-
assert_match %r{c_int_1.*:limit => 1}, output
|
98
|
-
assert_match %r{c_int_2.*:limit => 2}, output
|
99
|
-
assert_match %r{c_int_3.*:limit => 3}, output
|
100
|
-
|
101
|
-
assert_match %r{c_int_4.*}, output
|
102
|
-
assert_no_match %r{c_int_4.*:limit}, output
|
103
|
-
elsif current_adapter?(:SQLiteAdapter)
|
104
|
-
assert_match %r{c_int_1.*:limit => 1}, output
|
105
|
-
assert_match %r{c_int_2.*:limit => 2}, output
|
106
|
-
assert_match %r{c_int_3.*:limit => 3}, output
|
107
|
-
assert_match %r{c_int_4.*:limit => 4}, output
|
108
|
-
end
|
109
|
-
assert_match %r{c_int_without_limit.*}, output
|
110
|
-
assert_no_match %r{c_int_without_limit.*:limit}, output
|
111
|
-
|
112
|
-
if current_adapter?(:SQLiteAdapter)
|
113
|
-
assert_match %r{c_int_5.*:limit => 5}, output
|
114
|
-
assert_match %r{c_int_6.*:limit => 6}, output
|
115
|
-
assert_match %r{c_int_7.*:limit => 7}, output
|
116
|
-
assert_match %r{c_int_8.*:limit => 8}, output
|
117
|
-
else
|
118
|
-
assert_match %r{c_int_5.*:limit => 8}, output
|
119
|
-
assert_match %r{c_int_6.*:limit => 8}, output
|
120
|
-
assert_match %r{c_int_7.*:limit => 8}, output
|
121
|
-
assert_match %r{c_int_8.*:limit => 8}, output
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_schema_dump_with_string_ignored_table
|
126
|
-
stream = StringIO.new
|
127
|
-
|
128
|
-
ActiveRecord::SchemaDumper.ignore_tables = ['accounts']
|
129
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
130
|
-
output = stream.string
|
131
|
-
assert_no_match %r{create_table "accounts"}, output
|
132
|
-
assert_match %r{create_table "authors"}, output
|
133
|
-
assert_no_match %r{create_table "schema_migrations"}, output
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_schema_dump_with_regexp_ignored_table
|
137
|
-
stream = StringIO.new
|
138
|
-
|
139
|
-
ActiveRecord::SchemaDumper.ignore_tables = [/^account/]
|
140
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
141
|
-
output = stream.string
|
142
|
-
assert_no_match %r{create_table "accounts"}, output
|
143
|
-
assert_match %r{create_table "authors"}, output
|
144
|
-
assert_no_match %r{create_table "schema_migrations"}, output
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_schema_dump_illegal_ignored_table_value
|
148
|
-
stream = StringIO.new
|
149
|
-
ActiveRecord::SchemaDumper.ignore_tables = [5]
|
150
|
-
assert_raise(StandardError) do
|
151
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
def test_schema_dumps_index_columns_in_right_order
|
156
|
-
index_definition = standard_dump.split(/\n/).grep(/add_index.*companies/).first.strip
|
157
|
-
assert_equal 'add_index "companies", ["firm_id", "type", "rating", "ruby_type"], :name => "company_index"', index_definition
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_schema_dump_should_honor_nonstandard_primary_keys
|
161
|
-
output = standard_dump
|
162
|
-
match = output.match(%r{create_table "movies"(.*)do})
|
163
|
-
assert_not_nil(match, "nonstandardpk table not found")
|
164
|
-
assert_match %r(:primary_key => "movieid"), match[1], "non-standard primary key not preserved"
|
165
|
-
end
|
166
|
-
|
167
|
-
if current_adapter?(:MysqlAdapter)
|
168
|
-
def test_schema_dump_should_not_add_default_value_for_mysql_text_field
|
169
|
-
output = standard_dump
|
170
|
-
assert_match %r{t.text\s+"body",\s+:null => false$}, output
|
171
|
-
end
|
172
|
-
|
173
|
-
def test_schema_dump_includes_length_for_mysql_blob_and_text_fields
|
174
|
-
output = standard_dump
|
175
|
-
assert_match %r{t.binary\s+"tiny_blob",\s+:limit => 255$}, output
|
176
|
-
assert_match %r{t.binary\s+"normal_blob"$}, output
|
177
|
-
assert_match %r{t.binary\s+"medium_blob",\s+:limit => 16777215$}, output
|
178
|
-
assert_match %r{t.binary\s+"long_blob",\s+:limit => 2147483647$}, output
|
179
|
-
assert_match %r{t.text\s+"tiny_text",\s+:limit => 255$}, output
|
180
|
-
assert_match %r{t.text\s+"normal_text"$}, output
|
181
|
-
assert_match %r{t.text\s+"medium_text",\s+:limit => 16777215$}, output
|
182
|
-
assert_match %r{t.text\s+"long_text",\s+:limit => 2147483647$}, output
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
def test_schema_dump_includes_decimal_options
|
187
|
-
stream = StringIO.new
|
188
|
-
ActiveRecord::SchemaDumper.ignore_tables = [/^[^n]/]
|
189
|
-
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
190
|
-
output = stream.string
|
191
|
-
assert_match %r{:precision => 3,[[:space:]]+:scale => 2,[[:space:]]+:default => 2.78}, output
|
192
|
-
end
|
193
|
-
|
194
|
-
if current_adapter?(:PostgreSQLAdapter)
|
195
|
-
def test_schema_dump_includes_xml_shorthand_definition
|
196
|
-
output = standard_dump
|
197
|
-
if %r{create_table "postgresql_xml_data_type"} =~ output
|
198
|
-
assert_match %r{t.xml "data"}, output
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
def test_schema_dump_keeps_id_column_when_id_is_false_and_id_column_added
|
204
|
-
output = standard_dump
|
205
|
-
match = output.match(%r{create_table "goofy_string_id"(.*)do.*\n(.*)\n})
|
206
|
-
assert_not_nil(match, "goofy_string_id table not found")
|
207
|
-
assert_match %r(:id => false), match[1], "no table id not preserved"
|
208
|
-
assert_match %r{t.string[[:space:]]+"id",[[:space:]]+:null => false$}, match[2], "non-primary key id column not preserved"
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|