activerecord 3.2.6 → 6.0.0
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 +611 -6417
- data/MIT-LICENSE +4 -2
- data/README.rdoc +44 -47
- data/examples/performance.rb +79 -71
- data/examples/simple.rb +6 -5
- data/lib/active_record/aggregations.rb +268 -238
- data/lib/active_record/association_relation.rb +40 -0
- data/lib/active_record/associations/alias_tracker.rb +47 -42
- data/lib/active_record/associations/association.rb +173 -81
- data/lib/active_record/associations/association_scope.rb +124 -92
- data/lib/active_record/associations/belongs_to_association.rb +83 -38
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +11 -9
- data/lib/active_record/associations/builder/association.rb +113 -32
- data/lib/active_record/associations/builder/belongs_to.rb +105 -60
- data/lib/active_record/associations/builder/collection_association.rb +53 -56
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +98 -41
- data/lib/active_record/associations/builder/has_many.rb +11 -63
- data/lib/active_record/associations/builder/has_one.rb +47 -45
- data/lib/active_record/associations/builder/singular_association.rb +30 -18
- data/lib/active_record/associations/collection_association.rb +217 -295
- data/lib/active_record/associations/collection_proxy.rb +1074 -77
- data/lib/active_record/associations/foreign_association.rb +20 -0
- data/lib/active_record/associations/has_many_association.rb +78 -50
- data/lib/active_record/associations/has_many_through_association.rb +99 -61
- data/lib/active_record/associations/has_one_association.rb +75 -30
- data/lib/active_record/associations/has_one_through_association.rb +20 -11
- data/lib/active_record/associations/join_dependency/join_association.rb +45 -119
- data/lib/active_record/associations/join_dependency/join_base.rb +11 -12
- data/lib/active_record/associations/join_dependency/join_part.rb +35 -42
- data/lib/active_record/associations/join_dependency.rb +208 -164
- data/lib/active_record/associations/preloader/association.rb +93 -87
- data/lib/active_record/associations/preloader/through_association.rb +87 -38
- data/lib/active_record/associations/preloader.rb +134 -110
- data/lib/active_record/associations/singular_association.rb +19 -24
- data/lib/active_record/associations/through_association.rb +61 -27
- data/lib/active_record/associations.rb +1766 -1505
- data/lib/active_record/attribute_assignment.rb +57 -193
- data/lib/active_record/attribute_decorators.rb +90 -0
- data/lib/active_record/attribute_methods/before_type_cast.rb +58 -8
- data/lib/active_record/attribute_methods/dirty.rb +187 -67
- data/lib/active_record/attribute_methods/primary_key.rb +100 -78
- data/lib/active_record/attribute_methods/query.rb +10 -8
- data/lib/active_record/attribute_methods/read.rb +29 -118
- data/lib/active_record/attribute_methods/serialization.rb +60 -72
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +69 -42
- data/lib/active_record/attribute_methods/write.rb +36 -44
- data/lib/active_record/attribute_methods.rb +306 -161
- data/lib/active_record/attributes.rb +279 -0
- data/lib/active_record/autosave_association.rb +324 -238
- data/lib/active_record/base.rb +114 -507
- data/lib/active_record/callbacks.rb +147 -83
- data/lib/active_record/coders/json.rb +15 -0
- data/lib/active_record/coders/yaml_column.rb +32 -23
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +962 -279
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +32 -5
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +331 -209
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +95 -23
- data/lib/active_record/connection_adapters/abstract/quoting.rb +201 -65
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +23 -0
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +153 -0
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +510 -289
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +93 -0
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +1182 -313
- data/lib/active_record/connection_adapters/abstract/transaction.rb +323 -0
- data/lib/active_record/connection_adapters/abstract_adapter.rb +585 -120
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +610 -463
- data/lib/active_record/connection_adapters/column.rb +58 -233
- data/lib/active_record/connection_adapters/connection_specification.rb +297 -0
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +29 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +27 -0
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +200 -0
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +72 -0
- data/lib/active_record/connection_adapters/mysql/quoting.rb +81 -0
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +72 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +95 -0
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +88 -0
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +264 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +31 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +75 -207
- data/lib/active_record/connection_adapters/postgresql/column.rb +30 -0
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +182 -0
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +92 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +53 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +17 -0
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +50 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +23 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +23 -0
- data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +21 -0
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +71 -0
- data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +45 -0
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +41 -0
- data/lib/active_record/connection_adapters/postgresql/oid/oid.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +65 -0
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +97 -0
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +18 -0
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +113 -0
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +26 -0
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +28 -0
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +30 -0
- data/lib/active_record/connection_adapters/postgresql/oid.rb +34 -0
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +205 -0
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +43 -0
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -0
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +222 -0
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +50 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +776 -0
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +36 -0
- data/lib/active_record/connection_adapters/postgresql/utils.rb +81 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +695 -1052
- data/lib/active_record/connection_adapters/schema_cache.rb +115 -24
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +37 -0
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +118 -0
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +103 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +137 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +528 -26
- data/lib/active_record/connection_adapters/statement_pool.rb +34 -13
- data/lib/active_record/connection_handling.rb +267 -0
- data/lib/active_record/core.rb +599 -0
- data/lib/active_record/counter_cache.rb +177 -103
- data/lib/active_record/database_configurations/database_config.rb +37 -0
- data/lib/active_record/database_configurations/hash_config.rb +50 -0
- data/lib/active_record/database_configurations/url_config.rb +79 -0
- data/lib/active_record/database_configurations.rb +233 -0
- data/lib/active_record/define_callbacks.rb +22 -0
- data/lib/active_record/dynamic_matchers.rb +107 -64
- data/lib/active_record/enum.rb +274 -0
- data/lib/active_record/errors.rb +254 -61
- data/lib/active_record/explain.rb +35 -70
- data/lib/active_record/explain_registry.rb +32 -0
- data/lib/active_record/explain_subscriber.rb +18 -8
- data/lib/active_record/fixture_set/file.rb +82 -0
- data/lib/active_record/fixture_set/model_metadata.rb +33 -0
- data/lib/active_record/fixture_set/render_context.rb +17 -0
- data/lib/active_record/fixture_set/table_row.rb +153 -0
- data/lib/active_record/fixture_set/table_rows.rb +47 -0
- data/lib/active_record/fixtures.rb +291 -475
- data/lib/active_record/gem_version.rb +17 -0
- data/lib/active_record/inheritance.rb +219 -100
- data/lib/active_record/insert_all.rb +179 -0
- data/lib/active_record/integration.rb +175 -17
- data/lib/active_record/internal_metadata.rb +53 -0
- data/lib/active_record/legacy_yaml_adapter.rb +48 -0
- data/lib/active_record/locale/en.yml +9 -1
- data/lib/active_record/locking/optimistic.rb +106 -92
- data/lib/active_record/locking/pessimistic.rb +23 -11
- data/lib/active_record/log_subscriber.rb +80 -30
- data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
- data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
- data/lib/active_record/middleware/database_selector.rb +75 -0
- data/lib/active_record/migration/command_recorder.rb +235 -56
- data/lib/active_record/migration/compatibility.rb +244 -0
- data/lib/active_record/migration/join_table.rb +17 -0
- data/lib/active_record/migration.rb +917 -301
- data/lib/active_record/model_schema.rb +351 -175
- data/lib/active_record/nested_attributes.rb +366 -235
- data/lib/active_record/no_touching.rb +65 -0
- data/lib/active_record/null_relation.rb +68 -0
- data/lib/active_record/persistence.rb +761 -166
- data/lib/active_record/query_cache.rb +22 -44
- data/lib/active_record/querying.rb +55 -31
- data/lib/active_record/railtie.rb +185 -47
- data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
- data/lib/active_record/railties/console_sandbox.rb +5 -4
- data/lib/active_record/railties/controller_runtime.rb +35 -33
- data/lib/active_record/railties/databases.rake +366 -463
- data/lib/active_record/readonly_attributes.rb +4 -6
- data/lib/active_record/reflection.rb +736 -228
- data/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
- data/lib/active_record/relation/batches.rb +252 -52
- data/lib/active_record/relation/calculations.rb +340 -270
- data/lib/active_record/relation/delegation.rb +117 -36
- data/lib/active_record/relation/finder_methods.rb +439 -286
- data/lib/active_record/relation/from_clause.rb +26 -0
- data/lib/active_record/relation/merger.rb +184 -0
- data/lib/active_record/relation/predicate_builder/array_handler.rb +49 -0
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +43 -0
- data/lib/active_record/relation/predicate_builder/base_handler.rb +18 -0
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +53 -0
- data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +19 -0
- data/lib/active_record/relation/predicate_builder.rb +131 -39
- data/lib/active_record/relation/query_attribute.rb +50 -0
- data/lib/active_record/relation/query_methods.rb +1163 -221
- data/lib/active_record/relation/record_fetch_warning.rb +51 -0
- data/lib/active_record/relation/spawn_methods.rb +49 -120
- data/lib/active_record/relation/where_clause.rb +190 -0
- data/lib/active_record/relation/where_clause_factory.rb +33 -0
- data/lib/active_record/relation.rb +671 -349
- data/lib/active_record/result.rb +149 -15
- data/lib/active_record/runtime_registry.rb +24 -0
- data/lib/active_record/sanitization.rb +153 -133
- data/lib/active_record/schema.rb +22 -19
- data/lib/active_record/schema_dumper.rb +178 -112
- data/lib/active_record/schema_migration.rb +60 -0
- data/lib/active_record/scoping/default.rb +107 -98
- data/lib/active_record/scoping/named.rb +130 -115
- data/lib/active_record/scoping.rb +77 -123
- data/lib/active_record/secure_token.rb +40 -0
- data/lib/active_record/serialization.rb +10 -6
- data/lib/active_record/statement_cache.rb +148 -0
- data/lib/active_record/store.rb +256 -16
- data/lib/active_record/suppressor.rb +61 -0
- data/lib/active_record/table_metadata.rb +75 -0
- data/lib/active_record/tasks/database_tasks.rb +506 -0
- data/lib/active_record/tasks/mysql_database_tasks.rb +115 -0
- data/lib/active_record/tasks/postgresql_database_tasks.rb +141 -0
- data/lib/active_record/tasks/sqlite_database_tasks.rb +77 -0
- data/lib/active_record/test_databases.rb +23 -0
- data/lib/active_record/test_fixtures.rb +224 -0
- data/lib/active_record/timestamp.rb +93 -39
- data/lib/active_record/touch_later.rb +66 -0
- data/lib/active_record/transactions.rb +260 -129
- data/lib/active_record/translation.rb +3 -1
- data/lib/active_record/type/adapter_specific_registry.rb +129 -0
- data/lib/active_record/type/date.rb +9 -0
- data/lib/active_record/type/date_time.rb +9 -0
- data/lib/active_record/type/decimal_without_scale.rb +15 -0
- data/lib/active_record/type/hash_lookup_type_map.rb +25 -0
- data/lib/active_record/type/internal/timezone.rb +17 -0
- data/lib/active_record/type/json.rb +30 -0
- data/lib/active_record/type/serialized.rb +71 -0
- data/lib/active_record/type/text.rb +11 -0
- data/lib/active_record/type/time.rb +21 -0
- data/lib/active_record/type/type_map.rb +62 -0
- data/lib/active_record/type/unsigned_integer.rb +17 -0
- data/lib/active_record/type.rb +78 -0
- data/lib/active_record/type_caster/connection.rb +34 -0
- data/lib/active_record/type_caster/map.rb +20 -0
- data/lib/active_record/type_caster.rb +9 -0
- data/lib/active_record/validations/absence.rb +25 -0
- data/lib/active_record/validations/associated.rb +35 -18
- data/lib/active_record/validations/length.rb +26 -0
- data/lib/active_record/validations/presence.rb +68 -0
- data/lib/active_record/validations/uniqueness.rb +123 -77
- data/lib/active_record/validations.rb +54 -43
- data/lib/active_record/version.rb +7 -7
- data/lib/active_record.rb +97 -49
- data/lib/arel/alias_predication.rb +9 -0
- data/lib/arel/attributes/attribute.rb +37 -0
- data/lib/arel/attributes.rb +22 -0
- data/lib/arel/collectors/bind.rb +24 -0
- data/lib/arel/collectors/composite.rb +31 -0
- data/lib/arel/collectors/plain_string.rb +20 -0
- data/lib/arel/collectors/sql_string.rb +20 -0
- data/lib/arel/collectors/substitute_binds.rb +28 -0
- data/lib/arel/crud.rb +42 -0
- data/lib/arel/delete_manager.rb +18 -0
- data/lib/arel/errors.rb +9 -0
- data/lib/arel/expressions.rb +29 -0
- data/lib/arel/factory_methods.rb +49 -0
- data/lib/arel/insert_manager.rb +49 -0
- data/lib/arel/math.rb +45 -0
- data/lib/arel/nodes/and.rb +32 -0
- data/lib/arel/nodes/ascending.rb +23 -0
- data/lib/arel/nodes/binary.rb +52 -0
- data/lib/arel/nodes/bind_param.rb +36 -0
- data/lib/arel/nodes/case.rb +55 -0
- data/lib/arel/nodes/casted.rb +50 -0
- data/lib/arel/nodes/comment.rb +29 -0
- data/lib/arel/nodes/count.rb +12 -0
- data/lib/arel/nodes/delete_statement.rb +45 -0
- data/lib/arel/nodes/descending.rb +23 -0
- data/lib/arel/nodes/equality.rb +18 -0
- data/lib/arel/nodes/extract.rb +24 -0
- data/lib/arel/nodes/false.rb +16 -0
- data/lib/arel/nodes/full_outer_join.rb +8 -0
- data/lib/arel/nodes/function.rb +44 -0
- data/lib/arel/nodes/grouping.rb +8 -0
- data/lib/arel/nodes/in.rb +8 -0
- data/lib/arel/nodes/infix_operation.rb +80 -0
- data/lib/arel/nodes/inner_join.rb +8 -0
- data/lib/arel/nodes/insert_statement.rb +37 -0
- data/lib/arel/nodes/join_source.rb +20 -0
- data/lib/arel/nodes/matches.rb +18 -0
- data/lib/arel/nodes/named_function.rb +23 -0
- data/lib/arel/nodes/node.rb +50 -0
- data/lib/arel/nodes/node_expression.rb +13 -0
- data/lib/arel/nodes/outer_join.rb +8 -0
- data/lib/arel/nodes/over.rb +15 -0
- data/lib/arel/nodes/regexp.rb +16 -0
- data/lib/arel/nodes/right_outer_join.rb +8 -0
- data/lib/arel/nodes/select_core.rb +67 -0
- data/lib/arel/nodes/select_statement.rb +41 -0
- data/lib/arel/nodes/sql_literal.rb +16 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/table_alias.rb +27 -0
- data/lib/arel/nodes/terminal.rb +16 -0
- data/lib/arel/nodes/true.rb +16 -0
- data/lib/arel/nodes/unary.rb +45 -0
- data/lib/arel/nodes/unary_operation.rb +20 -0
- data/lib/arel/nodes/unqualified_column.rb +22 -0
- data/lib/arel/nodes/update_statement.rb +41 -0
- data/lib/arel/nodes/values_list.rb +9 -0
- data/lib/arel/nodes/window.rb +126 -0
- data/lib/arel/nodes/with.rb +11 -0
- data/lib/arel/nodes.rb +68 -0
- data/lib/arel/order_predications.rb +13 -0
- data/lib/arel/predications.rb +257 -0
- data/lib/arel/select_manager.rb +271 -0
- data/lib/arel/table.rb +110 -0
- data/lib/arel/tree_manager.rb +72 -0
- data/lib/arel/update_manager.rb +34 -0
- data/lib/arel/visitors/depth_first.rb +204 -0
- data/lib/arel/visitors/dot.rb +297 -0
- data/lib/arel/visitors/ibm_db.rb +34 -0
- data/lib/arel/visitors/informix.rb +62 -0
- data/lib/arel/visitors/mssql.rb +157 -0
- data/lib/arel/visitors/mysql.rb +83 -0
- data/lib/arel/visitors/oracle.rb +159 -0
- data/lib/arel/visitors/oracle12.rb +66 -0
- data/lib/arel/visitors/postgresql.rb +110 -0
- data/lib/arel/visitors/sqlite.rb +39 -0
- data/lib/arel/visitors/to_sql.rb +889 -0
- data/lib/arel/visitors/visitor.rb +46 -0
- data/lib/arel/visitors/where_sql.rb +23 -0
- data/lib/arel/visitors.rb +20 -0
- data/lib/arel/window_predications.rb +9 -0
- data/lib/arel.rb +51 -0
- data/lib/rails/generators/active_record/application_record/application_record_generator.rb +27 -0
- data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
- data/lib/rails/generators/active_record/migration/migration_generator.rb +59 -9
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +24 -0
- data/lib/rails/generators/active_record/migration/templates/migration.rb.tt +48 -0
- data/lib/rails/generators/active_record/migration.rb +41 -8
- data/lib/rails/generators/active_record/model/model_generator.rb +24 -22
- data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
- data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +1 -1
- data/lib/rails/generators/active_record.rb +10 -16
- metadata +285 -149
- data/examples/associations.png +0 -0
- data/lib/active_record/associations/has_and_belongs_to_many_association.rb +0 -63
- data/lib/active_record/associations/join_helper.rb +0 -55
- data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
- data/lib/active_record/associations/preloader/collection_association.rb +0 -24
- data/lib/active_record/associations/preloader/has_and_belongs_to_many.rb +0 -60
- data/lib/active_record/associations/preloader/has_many.rb +0 -17
- data/lib/active_record/associations/preloader/has_many_through.rb +0 -15
- data/lib/active_record/associations/preloader/has_one.rb +0 -23
- data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
- data/lib/active_record/associations/preloader/singular_association.rb +0 -21
- data/lib/active_record/attribute_methods/deprecated_underscore_read.rb +0 -32
- data/lib/active_record/connection_adapters/abstract/connection_specification.rb +0 -188
- data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -426
- data/lib/active_record/connection_adapters/sqlite_adapter.rb +0 -579
- data/lib/active_record/dynamic_finder_match.rb +0 -68
- data/lib/active_record/dynamic_scope_match.rb +0 -23
- data/lib/active_record/fixtures/file.rb +0 -65
- data/lib/active_record/identity_map.rb +0 -162
- data/lib/active_record/observer.rb +0 -121
- data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
- data/lib/active_record/serializers/xml_serializer.rb +0 -203
- data/lib/active_record/session_store.rb +0 -358
- data/lib/active_record/test_case.rb +0 -73
- data/lib/rails/generators/active_record/migration/templates/migration.rb +0 -34
- data/lib/rails/generators/active_record/model/templates/migration.rb +0 -15
- data/lib/rails/generators/active_record/model/templates/model.rb +0 -12
- data/lib/rails/generators/active_record/observer/observer_generator.rb +0 -15
- data/lib/rails/generators/active_record/observer/templates/observer.rb +0 -4
- data/lib/rails/generators/active_record/session_migration/session_migration_generator.rb +0 -25
- data/lib/rails/generators/active_record/session_migration/templates/migration.rb +0 -12
@@ -1,55 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
# Helper class module which gets mixed into JoinDependency::JoinAssociation and AssociationScope
|
4
|
-
module JoinHelper #:nodoc:
|
5
|
-
|
6
|
-
def join_type
|
7
|
-
Arel::InnerJoin
|
8
|
-
end
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
def construct_tables
|
13
|
-
tables = []
|
14
|
-
chain.each do |reflection|
|
15
|
-
tables << alias_tracker.aliased_table_for(
|
16
|
-
table_name_for(reflection),
|
17
|
-
table_alias_for(reflection, reflection != self.reflection)
|
18
|
-
)
|
19
|
-
|
20
|
-
if reflection.source_macro == :has_and_belongs_to_many
|
21
|
-
tables << alias_tracker.aliased_table_for(
|
22
|
-
(reflection.source_reflection || reflection).options[:join_table],
|
23
|
-
table_alias_for(reflection, true)
|
24
|
-
)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
tables
|
28
|
-
end
|
29
|
-
|
30
|
-
def table_name_for(reflection)
|
31
|
-
reflection.table_name
|
32
|
-
end
|
33
|
-
|
34
|
-
def table_alias_for(reflection, join = false)
|
35
|
-
name = "#{reflection.plural_name}_#{alias_suffix}"
|
36
|
-
name << "_join" if join
|
37
|
-
name
|
38
|
-
end
|
39
|
-
|
40
|
-
def join(table, constraint)
|
41
|
-
table.create_join(table, table.create_on(constraint), join_type)
|
42
|
-
end
|
43
|
-
|
44
|
-
def sanitize(conditions, table)
|
45
|
-
conditions = conditions.map do |condition|
|
46
|
-
condition = active_record.send(:sanitize_sql, interpolate(condition), table.table_alias || table.name)
|
47
|
-
condition = Arel.sql(condition) unless condition.is_a?(Arel::Node)
|
48
|
-
condition
|
49
|
-
end
|
50
|
-
|
51
|
-
conditions.length == 1 ? conditions.first : Arel::Nodes::And.new(conditions)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
class Preloader
|
4
|
-
class BelongsTo < SingularAssociation #:nodoc:
|
5
|
-
|
6
|
-
def association_key_name
|
7
|
-
reflection.options[:primary_key] || klass && klass.primary_key
|
8
|
-
end
|
9
|
-
|
10
|
-
def owner_key_name
|
11
|
-
reflection.foreign_key
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
class Preloader
|
4
|
-
class CollectionAssociation < Association #:nodoc:
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
def build_scope
|
9
|
-
super.order(preload_options[:order] || options[:order])
|
10
|
-
end
|
11
|
-
|
12
|
-
def preload
|
13
|
-
associated_records_by_owner.each do |owner, records|
|
14
|
-
association = owner.association(reflection.name)
|
15
|
-
association.loaded!
|
16
|
-
association.target.concat(records)
|
17
|
-
records.each { |record| association.set_inverse_instance(record) }
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
class Preloader
|
4
|
-
class HasAndBelongsToMany < CollectionAssociation #:nodoc:
|
5
|
-
attr_reader :join_table
|
6
|
-
|
7
|
-
def initialize(klass, records, reflection, preload_options)
|
8
|
-
super
|
9
|
-
@join_table = Arel::Table.new(options[:join_table]).alias('t0')
|
10
|
-
end
|
11
|
-
|
12
|
-
# Unlike the other associations, we want to get a raw array of rows so that we can
|
13
|
-
# access the aliased column on the join table
|
14
|
-
def records_for(ids)
|
15
|
-
scope = super
|
16
|
-
klass.connection.select_all(scope.arel, 'SQL', scope.bind_values)
|
17
|
-
end
|
18
|
-
|
19
|
-
def owner_key_name
|
20
|
-
reflection.active_record_primary_key
|
21
|
-
end
|
22
|
-
|
23
|
-
def association_key_name
|
24
|
-
'ar_association_key_name'
|
25
|
-
end
|
26
|
-
|
27
|
-
def association_key
|
28
|
-
join_table[reflection.foreign_key]
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
# Once we have used the join table column (in super), we manually instantiate the
|
34
|
-
# actual records, ensuring that we don't create more than one instances of the same
|
35
|
-
# record
|
36
|
-
def associated_records_by_owner
|
37
|
-
records = {}
|
38
|
-
super.each do |owner_key, rows|
|
39
|
-
rows.map! { |row| records[row[klass.primary_key]] ||= klass.instantiate(row) }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def build_scope
|
44
|
-
super.joins(join).select(join_select)
|
45
|
-
end
|
46
|
-
|
47
|
-
def join_select
|
48
|
-
association_key.as(Arel.sql(association_key_name))
|
49
|
-
end
|
50
|
-
|
51
|
-
def join
|
52
|
-
condition = table[reflection.association_primary_key].eq(
|
53
|
-
join_table[reflection.association_foreign_key])
|
54
|
-
|
55
|
-
table.create_join(join_table, table.create_on(condition))
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
class Preloader
|
4
|
-
class HasMany < CollectionAssociation #:nodoc:
|
5
|
-
|
6
|
-
def association_key_name
|
7
|
-
reflection.foreign_key
|
8
|
-
end
|
9
|
-
|
10
|
-
def owner_key_name
|
11
|
-
reflection.active_record_primary_key
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
class Preloader
|
4
|
-
class HasManyThrough < CollectionAssociation #:nodoc:
|
5
|
-
include ThroughAssociation
|
6
|
-
|
7
|
-
def associated_records_by_owner
|
8
|
-
super.each do |owner, records|
|
9
|
-
records.uniq! if options[:uniq]
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
class Preloader
|
4
|
-
class HasOne < SingularAssociation #:nodoc:
|
5
|
-
|
6
|
-
def association_key_name
|
7
|
-
reflection.foreign_key
|
8
|
-
end
|
9
|
-
|
10
|
-
def owner_key_name
|
11
|
-
reflection.active_record_primary_key
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def build_scope
|
17
|
-
super.order(preload_options[:order] || options[:order])
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
module Associations
|
3
|
-
class Preloader
|
4
|
-
class SingularAssociation < Association #:nodoc:
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
def preload
|
9
|
-
associated_records_by_owner.each do |owner, associated_records|
|
10
|
-
record = associated_records.first
|
11
|
-
|
12
|
-
association = owner.association(reflection.name)
|
13
|
-
association.target = record
|
14
|
-
association.set_inverse_instance(record)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
require 'active_support/deprecation'
|
3
|
-
|
4
|
-
module ActiveRecord
|
5
|
-
module AttributeMethods
|
6
|
-
module DeprecatedUnderscoreRead
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
|
9
|
-
included do
|
10
|
-
attribute_method_prefix "_"
|
11
|
-
end
|
12
|
-
|
13
|
-
module ClassMethods
|
14
|
-
protected
|
15
|
-
|
16
|
-
def define_method__attribute(attr_name)
|
17
|
-
# Do nothing, let it hit method missing instead.
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
protected
|
22
|
-
|
23
|
-
def _attribute(attr_name)
|
24
|
-
ActiveSupport::Deprecation.warn(
|
25
|
-
"You have called '_#{attr_name}'. This is deprecated. Please use " \
|
26
|
-
"either '#{attr_name}' or read_attribute('#{attr_name}')."
|
27
|
-
)
|
28
|
-
read_attribute(attr_name)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,188 +0,0 @@
|
|
1
|
-
module ActiveRecord
|
2
|
-
class Base
|
3
|
-
class ConnectionSpecification #:nodoc:
|
4
|
-
attr_reader :config, :adapter_method
|
5
|
-
def initialize (config, adapter_method)
|
6
|
-
@config, @adapter_method = config, adapter_method
|
7
|
-
end
|
8
|
-
|
9
|
-
##
|
10
|
-
# Builds a ConnectionSpecification from user input
|
11
|
-
class Resolver # :nodoc:
|
12
|
-
attr_reader :config, :klass, :configurations
|
13
|
-
|
14
|
-
def initialize(config, configurations)
|
15
|
-
@config = config
|
16
|
-
@configurations = configurations
|
17
|
-
end
|
18
|
-
|
19
|
-
def spec
|
20
|
-
case config
|
21
|
-
when nil
|
22
|
-
raise AdapterNotSpecified unless defined?(Rails.env)
|
23
|
-
resolve_string_connection Rails.env
|
24
|
-
when Symbol, String
|
25
|
-
resolve_string_connection config.to_s
|
26
|
-
when Hash
|
27
|
-
resolve_hash_connection config
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
def resolve_string_connection(spec) # :nodoc:
|
33
|
-
hash = configurations.fetch(spec) do |k|
|
34
|
-
connection_url_to_hash(k)
|
35
|
-
end
|
36
|
-
|
37
|
-
raise(AdapterNotSpecified, "#{spec} database is not configured") unless hash
|
38
|
-
|
39
|
-
resolve_hash_connection hash
|
40
|
-
end
|
41
|
-
|
42
|
-
def resolve_hash_connection(spec) # :nodoc:
|
43
|
-
spec = spec.symbolize_keys
|
44
|
-
|
45
|
-
raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)
|
46
|
-
|
47
|
-
begin
|
48
|
-
require "active_record/connection_adapters/#{spec[:adapter]}_adapter"
|
49
|
-
rescue LoadError => e
|
50
|
-
raise LoadError, "Please install the #{spec[:adapter]} adapter: `gem install activerecord-#{spec[:adapter]}-adapter` (#{e.message})", e.backtrace
|
51
|
-
end
|
52
|
-
|
53
|
-
adapter_method = "#{spec[:adapter]}_connection"
|
54
|
-
|
55
|
-
ConnectionSpecification.new(spec, adapter_method)
|
56
|
-
end
|
57
|
-
|
58
|
-
def connection_url_to_hash(url) # :nodoc:
|
59
|
-
config = URI.parse url
|
60
|
-
adapter = config.scheme
|
61
|
-
adapter = "postgresql" if adapter == "postgres"
|
62
|
-
spec = { :adapter => adapter,
|
63
|
-
:username => config.user,
|
64
|
-
:password => config.password,
|
65
|
-
:port => config.port,
|
66
|
-
:database => config.path.sub(%r{^/},""),
|
67
|
-
:host => config.host }
|
68
|
-
spec.reject!{ |_,value| !value }
|
69
|
-
if config.query
|
70
|
-
options = Hash[config.query.split("&").map{ |pair| pair.split("=") }].symbolize_keys
|
71
|
-
spec.merge!(options)
|
72
|
-
end
|
73
|
-
spec
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
##
|
79
|
-
# :singleton-method:
|
80
|
-
# The connection handler
|
81
|
-
class_attribute :connection_handler, :instance_writer => false
|
82
|
-
self.connection_handler = ConnectionAdapters::ConnectionHandler.new
|
83
|
-
|
84
|
-
# Returns the connection currently associated with the class. This can
|
85
|
-
# also be used to "borrow" the connection to do database work that isn't
|
86
|
-
# easily done without going straight to SQL.
|
87
|
-
def connection
|
88
|
-
self.class.connection
|
89
|
-
end
|
90
|
-
|
91
|
-
# Establishes the connection to the database. Accepts a hash as input where
|
92
|
-
# the <tt>:adapter</tt> key must be specified with the name of a database adapter (in lower-case)
|
93
|
-
# example for regular databases (MySQL, Postgresql, etc):
|
94
|
-
#
|
95
|
-
# ActiveRecord::Base.establish_connection(
|
96
|
-
# :adapter => "mysql",
|
97
|
-
# :host => "localhost",
|
98
|
-
# :username => "myuser",
|
99
|
-
# :password => "mypass",
|
100
|
-
# :database => "somedatabase"
|
101
|
-
# )
|
102
|
-
#
|
103
|
-
# Example for SQLite database:
|
104
|
-
#
|
105
|
-
# ActiveRecord::Base.establish_connection(
|
106
|
-
# :adapter => "sqlite",
|
107
|
-
# :database => "path/to/dbfile"
|
108
|
-
# )
|
109
|
-
#
|
110
|
-
# Also accepts keys as strings (for parsing from YAML for example):
|
111
|
-
#
|
112
|
-
# ActiveRecord::Base.establish_connection(
|
113
|
-
# "adapter" => "sqlite",
|
114
|
-
# "database" => "path/to/dbfile"
|
115
|
-
# )
|
116
|
-
#
|
117
|
-
# Or a URL:
|
118
|
-
#
|
119
|
-
# ActiveRecord::Base.establish_connection(
|
120
|
-
# "postgres://myuser:mypass@localhost/somedatabase"
|
121
|
-
# )
|
122
|
-
#
|
123
|
-
# The exceptions AdapterNotSpecified, AdapterNotFound and ArgumentError
|
124
|
-
# may be returned on an error.
|
125
|
-
def self.establish_connection(spec = ENV["DATABASE_URL"])
|
126
|
-
resolver = ConnectionSpecification::Resolver.new spec, configurations
|
127
|
-
spec = resolver.spec
|
128
|
-
|
129
|
-
unless respond_to?(spec.adapter_method)
|
130
|
-
raise AdapterNotFound, "database configuration specifies nonexistent #{spec.config[:adapter]} adapter"
|
131
|
-
end
|
132
|
-
|
133
|
-
remove_connection
|
134
|
-
connection_handler.establish_connection name, spec
|
135
|
-
end
|
136
|
-
|
137
|
-
class << self
|
138
|
-
# Returns the connection currently associated with the class. This can
|
139
|
-
# also be used to "borrow" the connection to do database work unrelated
|
140
|
-
# to any of the specific Active Records.
|
141
|
-
def connection
|
142
|
-
retrieve_connection
|
143
|
-
end
|
144
|
-
|
145
|
-
def connection_id
|
146
|
-
Thread.current['ActiveRecord::Base.connection_id']
|
147
|
-
end
|
148
|
-
|
149
|
-
def connection_id=(connection_id)
|
150
|
-
Thread.current['ActiveRecord::Base.connection_id'] = connection_id
|
151
|
-
end
|
152
|
-
|
153
|
-
# Returns the configuration of the associated connection as a hash:
|
154
|
-
#
|
155
|
-
# ActiveRecord::Base.connection_config
|
156
|
-
# # => {:pool=>5, :timeout=>5000, :database=>"db/development.sqlite3", :adapter=>"sqlite3"}
|
157
|
-
#
|
158
|
-
# Please use only for reading.
|
159
|
-
def connection_config
|
160
|
-
connection_pool.spec.config
|
161
|
-
end
|
162
|
-
|
163
|
-
def connection_pool
|
164
|
-
connection_handler.retrieve_connection_pool(self) or raise ConnectionNotEstablished
|
165
|
-
end
|
166
|
-
|
167
|
-
def retrieve_connection
|
168
|
-
connection_handler.retrieve_connection(self)
|
169
|
-
end
|
170
|
-
|
171
|
-
# Returns true if Active Record is connected.
|
172
|
-
def connected?
|
173
|
-
connection_handler.connected?(self)
|
174
|
-
end
|
175
|
-
|
176
|
-
def remove_connection(klass = self)
|
177
|
-
connection_handler.remove_connection(klass)
|
178
|
-
end
|
179
|
-
|
180
|
-
def clear_active_connections!
|
181
|
-
connection_handler.clear_active_connections!
|
182
|
-
end
|
183
|
-
|
184
|
-
delegate :clear_reloadable_connections!,
|
185
|
-
:clear_all_connections!,:verify_active_connections!, :to => :connection_handler
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|