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,21 +1,37 @@
|
|
1
|
-
require 'benchmark'
|
2
1
|
require 'date'
|
3
2
|
require 'bigdecimal'
|
4
3
|
require 'bigdecimal/util'
|
5
|
-
|
6
|
-
|
7
|
-
require 'active_record/connection_adapters/
|
8
|
-
require '
|
9
|
-
require 'active_record/connection_adapters/abstract/database_statements'
|
10
|
-
require 'active_record/connection_adapters/abstract/quoting'
|
11
|
-
require 'active_record/connection_adapters/abstract/connection_pool'
|
12
|
-
require 'active_record/connection_adapters/abstract/connection_specification'
|
13
|
-
require 'active_record/connection_adapters/abstract/query_cache'
|
14
|
-
require 'active_record/connection_adapters/abstract/database_limits'
|
4
|
+
require 'active_support/core_ext/benchmark'
|
5
|
+
require 'active_support/deprecation'
|
6
|
+
require 'active_record/connection_adapters/schema_cache'
|
7
|
+
require 'monitor'
|
15
8
|
|
16
9
|
module ActiveRecord
|
17
10
|
module ConnectionAdapters # :nodoc:
|
18
|
-
|
11
|
+
extend ActiveSupport::Autoload
|
12
|
+
|
13
|
+
autoload :Column
|
14
|
+
|
15
|
+
autoload_under 'abstract' do
|
16
|
+
autoload :IndexDefinition, 'active_record/connection_adapters/abstract/schema_definitions'
|
17
|
+
autoload :ColumnDefinition, 'active_record/connection_adapters/abstract/schema_definitions'
|
18
|
+
autoload :TableDefinition, 'active_record/connection_adapters/abstract/schema_definitions'
|
19
|
+
autoload :Table, 'active_record/connection_adapters/abstract/schema_definitions'
|
20
|
+
|
21
|
+
autoload :SchemaStatements
|
22
|
+
autoload :DatabaseStatements
|
23
|
+
autoload :DatabaseLimits
|
24
|
+
autoload :Quoting
|
25
|
+
|
26
|
+
autoload :ConnectionPool
|
27
|
+
autoload :ConnectionHandler, 'active_record/connection_adapters/abstract/connection_pool'
|
28
|
+
autoload :ConnectionManagement, 'active_record/connection_adapters/abstract/connection_pool'
|
29
|
+
autoload :ConnectionSpecification
|
30
|
+
|
31
|
+
autoload :QueryCache
|
32
|
+
end
|
33
|
+
|
34
|
+
# Active Record supports multiple database systems. AbstractAdapter and
|
19
35
|
# related classes form the abstraction layer which makes this possible.
|
20
36
|
# An AbstractAdapter represents a connection to a database, and provides an
|
21
37
|
# abstract interface for database-specific functionality such as establishing
|
@@ -33,66 +49,103 @@ module ActiveRecord
|
|
33
49
|
include DatabaseLimits
|
34
50
|
include QueryCache
|
35
51
|
include ActiveSupport::Callbacks
|
36
|
-
|
52
|
+
include MonitorMixin
|
37
53
|
|
38
|
-
|
54
|
+
define_callbacks :checkout, :checkin
|
39
55
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
56
|
+
attr_accessor :visitor, :pool
|
57
|
+
attr_reader :schema_cache, :last_use, :in_use, :logger
|
58
|
+
alias :in_use? :in_use
|
59
|
+
|
60
|
+
def initialize(connection, logger = nil, pool = nil) #:nodoc:
|
61
|
+
super()
|
62
|
+
|
63
|
+
@active = nil
|
64
|
+
@connection = connection
|
65
|
+
@in_use = false
|
66
|
+
@instrumenter = ActiveSupport::Notifications.instrumenter
|
67
|
+
@last_use = false
|
68
|
+
@logger = logger
|
69
|
+
@open_transactions = 0
|
70
|
+
@pool = pool
|
71
|
+
@query_cache = Hash.new { |h,sql| h[sql] = {} }
|
44
72
|
@query_cache_enabled = false
|
73
|
+
@schema_cache = SchemaCache.new self
|
74
|
+
@visitor = nil
|
45
75
|
end
|
46
76
|
|
47
|
-
|
77
|
+
def lease
|
78
|
+
synchronize do
|
79
|
+
unless in_use
|
80
|
+
@in_use = true
|
81
|
+
@last_use = Time.now
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def expire
|
87
|
+
@in_use = false
|
88
|
+
end
|
89
|
+
|
90
|
+
# Returns the human-readable name of the adapter. Use mixed case - one
|
48
91
|
# can always use downcase if needed.
|
49
92
|
def adapter_name
|
50
93
|
'Abstract'
|
51
94
|
end
|
52
95
|
|
53
|
-
# Does this adapter support migrations?
|
96
|
+
# Does this adapter support migrations? Backend specific, as the
|
54
97
|
# abstract adapter always returns +false+.
|
55
98
|
def supports_migrations?
|
56
99
|
false
|
57
100
|
end
|
58
101
|
|
59
102
|
# Can this adapter determine the primary key for tables not attached
|
60
|
-
# to an
|
103
|
+
# to an Active Record class, such as join tables? Backend specific, as
|
61
104
|
# the abstract adapter always returns +false+.
|
62
105
|
def supports_primary_key?
|
63
106
|
false
|
64
107
|
end
|
65
108
|
|
66
|
-
# Does this adapter support using DISTINCT within COUNT?
|
109
|
+
# Does this adapter support using DISTINCT within COUNT? This is +true+
|
67
110
|
# for all adapters except sqlite.
|
68
111
|
def supports_count_distinct?
|
69
112
|
true
|
70
113
|
end
|
71
114
|
|
72
|
-
# Does this adapter support DDL rollbacks in transactions?
|
73
|
-
# CREATE TABLE or ALTER TABLE get rolled back by a transaction?
|
74
|
-
# SQL Server, and others support this.
|
115
|
+
# Does this adapter support DDL rollbacks in transactions? That is, would
|
116
|
+
# CREATE TABLE or ALTER TABLE get rolled back by a transaction? PostgreSQL,
|
117
|
+
# SQL Server, and others support this. MySQL and others do not.
|
75
118
|
def supports_ddl_transactions?
|
76
119
|
false
|
77
120
|
end
|
78
|
-
|
79
|
-
|
80
|
-
|
121
|
+
|
122
|
+
def supports_bulk_alter?
|
123
|
+
false
|
124
|
+
end
|
125
|
+
|
126
|
+
# Does this adapter support savepoints? PostgreSQL and MySQL do,
|
127
|
+
# SQLite < 3.6.8 does not.
|
81
128
|
def supports_savepoints?
|
82
129
|
false
|
83
130
|
end
|
84
131
|
|
85
132
|
# Should primary key values be selected from their corresponding
|
86
|
-
# sequence before the insert statement?
|
133
|
+
# sequence before the insert statement? If true, next_sequence_value
|
87
134
|
# is called before each insert to set the record's primary key.
|
88
135
|
# This is false for all adapters but Firebird.
|
89
136
|
def prefetch_primary_key?(table_name = nil)
|
90
137
|
false
|
91
138
|
end
|
92
139
|
|
93
|
-
|
94
|
-
|
95
|
-
|
140
|
+
# Does this adapter support index sort order?
|
141
|
+
def supports_index_sort_order?
|
142
|
+
false
|
143
|
+
end
|
144
|
+
|
145
|
+
# Does this adapter support explain? As of this writing sqlite3,
|
146
|
+
# mysql2, and postgresql are the only ones that do.
|
147
|
+
def supports_explain?
|
148
|
+
false
|
96
149
|
end
|
97
150
|
|
98
151
|
# QUOTING ==================================================
|
@@ -102,10 +155,16 @@ module ActiveRecord
|
|
102
155
|
quote_column_name(name)
|
103
156
|
end
|
104
157
|
|
158
|
+
# Returns a bind substitution value given a +column+ and list of current
|
159
|
+
# +binds+
|
160
|
+
def substitute_at(column, index)
|
161
|
+
Arel::Nodes::BindParam.new '?'
|
162
|
+
end
|
163
|
+
|
105
164
|
# REFERENTIAL INTEGRITY ====================================
|
106
165
|
|
107
166
|
# Override to turn off referential integrity while executing <tt>&block</tt>.
|
108
|
-
def disable_referential_integrity
|
167
|
+
def disable_referential_integrity
|
109
168
|
yield
|
110
169
|
end
|
111
170
|
|
@@ -140,9 +199,17 @@ module ActiveRecord
|
|
140
199
|
# this should be overridden by concrete adapters
|
141
200
|
end
|
142
201
|
|
143
|
-
|
202
|
+
###
|
203
|
+
# Clear any caching the database adapter may be doing, for example
|
204
|
+
# clearing the prepared statement cache. This is database specific.
|
205
|
+
def clear_cache!
|
206
|
+
# this should be overridden by concrete adapters
|
207
|
+
end
|
208
|
+
|
209
|
+
# Returns true if its required to reload the connection between requests for development mode.
|
210
|
+
# This is not the case for Ruby/MySQL and it's not necessary for any adapters except SQLite.
|
144
211
|
def requires_reloading?
|
145
|
-
|
212
|
+
false
|
146
213
|
end
|
147
214
|
|
148
215
|
# Checks whether the connection to the database is still active (i.e. not stale).
|
@@ -162,12 +229,9 @@ module ActiveRecord
|
|
162
229
|
@connection
|
163
230
|
end
|
164
231
|
|
165
|
-
|
166
|
-
@open_transactions ||= 0
|
167
|
-
end
|
232
|
+
attr_reader :open_transactions
|
168
233
|
|
169
234
|
def increment_open_transactions
|
170
|
-
@open_transactions ||= 0
|
171
235
|
@open_transactions += 1
|
172
236
|
end
|
173
237
|
|
@@ -188,62 +252,45 @@ module ActiveRecord
|
|
188
252
|
def release_savepoint
|
189
253
|
end
|
190
254
|
|
255
|
+
def case_sensitive_modifier(node)
|
256
|
+
node
|
257
|
+
end
|
258
|
+
|
259
|
+
def case_insensitive_comparison(table, attribute, column, value)
|
260
|
+
table[attribute].lower.eq(table.lower(value))
|
261
|
+
end
|
262
|
+
|
191
263
|
def current_savepoint_name
|
192
264
|
"active_record_#{open_transactions}"
|
193
265
|
end
|
194
266
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
@logger.debug(format_log_entry(name, sql.squeeze(' ')))
|
199
|
-
end
|
267
|
+
# Check the connection back in to the connection pool
|
268
|
+
def close
|
269
|
+
pool.checkin self
|
200
270
|
end
|
201
271
|
|
202
272
|
protected
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
log_info(sql, name, 0)
|
212
|
-
nil
|
213
|
-
end
|
214
|
-
rescue SystemExit, SignalException, NoMemoryError => e
|
215
|
-
# Don't re-wrap these exceptions. They are probably not being caused by invalid
|
216
|
-
# sql, but rather some external stimulus beyond the responsibilty of this code.
|
217
|
-
# Additionaly, wrapping these exceptions with StatementInvalid would lead to
|
218
|
-
# meaningful loss of data, such as losing SystemExit#status.
|
219
|
-
raise e
|
273
|
+
|
274
|
+
def log(sql, name = "SQL", binds = [])
|
275
|
+
@instrumenter.instrument(
|
276
|
+
"sql.active_record",
|
277
|
+
:sql => sql,
|
278
|
+
:name => name,
|
279
|
+
:connection_id => object_id,
|
280
|
+
:binds => binds) { yield }
|
220
281
|
rescue Exception => e
|
221
|
-
# Log message and raise exception.
|
222
|
-
# Set last_verification to 0, so that connection gets verified
|
223
|
-
# upon reentering the request loop
|
224
|
-
@last_verification = 0
|
225
282
|
message = "#{e.class.name}: #{e.message}: #{sql}"
|
226
|
-
|
227
|
-
|
283
|
+
@logger.debug message if @logger
|
284
|
+
exception = translate_exception(e, message)
|
285
|
+
exception.set_backtrace e.backtrace
|
286
|
+
raise exception
|
228
287
|
end
|
229
288
|
|
230
|
-
def
|
231
|
-
|
232
|
-
|
233
|
-
@@row_even = false
|
234
|
-
message_color, dump_color = "4;36;1", "0;1"
|
235
|
-
else
|
236
|
-
@@row_even = true
|
237
|
-
message_color, dump_color = "4;35;1", "0"
|
238
|
-
end
|
239
|
-
|
240
|
-
log_entry = " \e[#{message_color}m#{message}\e[0m "
|
241
|
-
log_entry << "\e[#{dump_color}m%#{String === dump ? 's' : 'p'}\e[0m" % dump if dump
|
242
|
-
log_entry
|
243
|
-
else
|
244
|
-
"%s %s" % [message, dump]
|
245
|
-
end
|
289
|
+
def translate_exception(e, message)
|
290
|
+
# override in derived class
|
291
|
+
ActiveRecord::StatementInvalid.new(message)
|
246
292
|
end
|
293
|
+
|
247
294
|
end
|
248
295
|
end
|
249
296
|
end
|