activerecord 4.2.6 → 5.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 +4 -4
- data/CHANGELOG.md +1307 -1105
- data/MIT-LICENSE +2 -2
- data/README.rdoc +7 -8
- data/examples/performance.rb +2 -3
- data/examples/simple.rb +0 -1
- data/lib/active_record/aggregations.rb +37 -23
- data/lib/active_record/association_relation.rb +3 -3
- data/lib/active_record/associations/alias_tracker.rb +19 -16
- data/lib/active_record/associations/association.rb +11 -9
- data/lib/active_record/associations/association_scope.rb +73 -102
- data/lib/active_record/associations/belongs_to_association.rb +21 -32
- data/lib/active_record/associations/builder/association.rb +28 -34
- data/lib/active_record/associations/builder/belongs_to.rb +43 -18
- data/lib/active_record/associations/builder/collection_association.rb +7 -19
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +14 -11
- data/lib/active_record/associations/builder/has_many.rb +4 -4
- data/lib/active_record/associations/builder/has_one.rb +11 -6
- data/lib/active_record/associations/builder/singular_association.rb +3 -10
- data/lib/active_record/associations/collection_association.rb +50 -31
- data/lib/active_record/associations/collection_proxy.rb +69 -29
- data/lib/active_record/associations/foreign_association.rb +1 -1
- data/lib/active_record/associations/has_many_association.rb +20 -71
- data/lib/active_record/associations/has_many_through_association.rb +8 -47
- data/lib/active_record/associations/has_one_association.rb +12 -5
- data/lib/active_record/associations/join_dependency/join_association.rb +20 -8
- data/lib/active_record/associations/join_dependency.rb +29 -19
- data/lib/active_record/associations/preloader/association.rb +46 -52
- data/lib/active_record/associations/preloader/collection_association.rb +0 -6
- data/lib/active_record/associations/preloader/has_many_through.rb +1 -1
- data/lib/active_record/associations/preloader/has_one.rb +0 -8
- data/lib/active_record/associations/preloader/through_association.rb +27 -14
- data/lib/active_record/associations/preloader.rb +14 -4
- data/lib/active_record/associations/singular_association.rb +7 -1
- data/lib/active_record/associations/through_association.rb +11 -3
- data/lib/active_record/associations.rb +317 -209
- data/lib/active_record/attribute/user_provided_default.rb +28 -0
- data/lib/active_record/attribute.rb +68 -18
- data/lib/active_record/attribute_assignment.rb +20 -141
- data/lib/active_record/attribute_decorators.rb +6 -5
- data/lib/active_record/attribute_methods/before_type_cast.rb +1 -1
- data/lib/active_record/attribute_methods/dirty.rb +46 -86
- data/lib/active_record/attribute_methods/primary_key.rb +2 -2
- data/lib/active_record/attribute_methods/query.rb +2 -2
- data/lib/active_record/attribute_methods/read.rb +31 -59
- data/lib/active_record/attribute_methods/serialization.rb +13 -16
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +61 -14
- data/lib/active_record/attribute_methods/write.rb +14 -38
- data/lib/active_record/attribute_methods.rb +70 -45
- data/lib/active_record/attribute_mutation_tracker.rb +70 -0
- data/lib/active_record/attribute_set/builder.rb +6 -4
- data/lib/active_record/attribute_set.rb +30 -3
- data/lib/active_record/attributes.rb +199 -80
- data/lib/active_record/autosave_association.rb +49 -16
- data/lib/active_record/base.rb +32 -23
- data/lib/active_record/callbacks.rb +39 -43
- data/lib/active_record/coders/json.rb +1 -1
- data/lib/active_record/coders/yaml_column.rb +20 -8
- data/lib/active_record/collection_cache_key.rb +40 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +452 -182
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +3 -3
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +65 -61
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +2 -2
- data/lib/active_record/connection_adapters/abstract/quoting.rb +74 -9
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +3 -3
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +61 -39
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +236 -185
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +72 -17
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +378 -140
- data/lib/active_record/connection_adapters/abstract/transaction.rb +51 -34
- data/lib/active_record/connection_adapters/abstract_adapter.rb +153 -59
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +405 -362
- data/lib/active_record/connection_adapters/column.rb +28 -43
- data/lib/active_record/connection_adapters/connection_specification.rb +15 -27
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +22 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +50 -0
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +125 -0
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +70 -0
- data/lib/active_record/connection_adapters/mysql/quoting.rb +51 -0
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +67 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +93 -0
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +54 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +32 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +25 -176
- data/lib/active_record/connection_adapters/postgresql/column.rb +5 -10
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +10 -72
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +42 -0
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +27 -56
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +3 -1
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +7 -22
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +3 -3
- data/lib/active_record/connection_adapters/postgresql/oid/json.rb +1 -26
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +0 -4
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +4 -4
- data/lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb +50 -0
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +31 -17
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +0 -4
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +2 -2
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +1 -1
- data/lib/active_record/connection_adapters/postgresql/oid.rb +1 -6
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +26 -18
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +29 -10
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +107 -79
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +47 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +234 -148
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +35 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +248 -160
- data/lib/active_record/connection_adapters/schema_cache.rb +36 -23
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +32 -0
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +19 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +48 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +22 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +148 -203
- data/lib/active_record/connection_adapters/statement_pool.rb +31 -12
- data/lib/active_record/connection_handling.rb +37 -14
- data/lib/active_record/core.rb +89 -107
- data/lib/active_record/counter_cache.rb +13 -24
- data/lib/active_record/dynamic_matchers.rb +1 -20
- data/lib/active_record/enum.rb +113 -76
- data/lib/active_record/errors.rb +87 -48
- data/lib/active_record/explain_registry.rb +1 -1
- data/lib/active_record/explain_subscriber.rb +1 -1
- data/lib/active_record/fixture_set/file.rb +26 -5
- data/lib/active_record/fixtures.rb +76 -40
- data/lib/active_record/gem_version.rb +3 -3
- data/lib/active_record/inheritance.rb +32 -40
- data/lib/active_record/integration.rb +4 -4
- data/lib/active_record/internal_metadata.rb +56 -0
- data/lib/active_record/legacy_yaml_adapter.rb +18 -2
- data/lib/active_record/locale/en.yml +3 -2
- data/lib/active_record/locking/optimistic.rb +15 -15
- data/lib/active_record/locking/pessimistic.rb +1 -1
- data/lib/active_record/log_subscriber.rb +43 -21
- data/lib/active_record/migration/command_recorder.rb +59 -18
- data/lib/active_record/migration/compatibility.rb +126 -0
- data/lib/active_record/migration.rb +364 -109
- data/lib/active_record/model_schema.rb +128 -38
- data/lib/active_record/nested_attributes.rb +58 -29
- data/lib/active_record/null_relation.rb +16 -8
- data/lib/active_record/persistence.rb +121 -80
- data/lib/active_record/query_cache.rb +15 -18
- data/lib/active_record/querying.rb +10 -9
- data/lib/active_record/railtie.rb +27 -18
- data/lib/active_record/railties/controller_runtime.rb +1 -1
- data/lib/active_record/railties/databases.rake +58 -45
- data/lib/active_record/readonly_attributes.rb +1 -1
- data/lib/active_record/reflection.rb +282 -115
- data/lib/active_record/relation/batches/batch_enumerator.rb +67 -0
- data/lib/active_record/relation/batches.rb +139 -34
- data/lib/active_record/relation/calculations.rb +80 -102
- data/lib/active_record/relation/delegation.rb +7 -20
- data/lib/active_record/relation/finder_methods.rb +163 -81
- data/lib/active_record/relation/from_clause.rb +32 -0
- data/lib/active_record/relation/merger.rb +16 -42
- data/lib/active_record/relation/predicate_builder/array_handler.rb +11 -15
- data/lib/active_record/relation/predicate_builder/association_query_handler.rb +88 -0
- data/lib/active_record/relation/predicate_builder/base_handler.rb +17 -0
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +17 -0
- data/lib/active_record/relation/predicate_builder/class_handler.rb +27 -0
- data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +57 -0
- data/lib/active_record/relation/predicate_builder/range_handler.rb +33 -0
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
- data/lib/active_record/relation/predicate_builder.rb +120 -107
- data/lib/active_record/relation/query_attribute.rb +19 -0
- data/lib/active_record/relation/query_methods.rb +308 -244
- data/lib/active_record/relation/record_fetch_warning.rb +49 -0
- data/lib/active_record/relation/spawn_methods.rb +4 -7
- data/lib/active_record/relation/where_clause.rb +174 -0
- data/lib/active_record/relation/where_clause_factory.rb +38 -0
- data/lib/active_record/relation.rb +176 -116
- data/lib/active_record/result.rb +4 -3
- data/lib/active_record/runtime_registry.rb +1 -1
- data/lib/active_record/sanitization.rb +95 -66
- data/lib/active_record/schema.rb +26 -22
- data/lib/active_record/schema_dumper.rb +62 -38
- data/lib/active_record/schema_migration.rb +11 -17
- data/lib/active_record/scoping/default.rb +23 -9
- data/lib/active_record/scoping/named.rb +49 -28
- data/lib/active_record/scoping.rb +32 -15
- data/lib/active_record/secure_token.rb +38 -0
- data/lib/active_record/serialization.rb +2 -4
- data/lib/active_record/statement_cache.rb +16 -14
- data/lib/active_record/store.rb +8 -3
- data/lib/active_record/suppressor.rb +58 -0
- data/lib/active_record/table_metadata.rb +68 -0
- data/lib/active_record/tasks/database_tasks.rb +58 -41
- data/lib/active_record/tasks/mysql_database_tasks.rb +16 -20
- data/lib/active_record/tasks/postgresql_database_tasks.rb +11 -2
- data/lib/active_record/tasks/sqlite_database_tasks.rb +5 -1
- data/lib/active_record/timestamp.rb +20 -9
- data/lib/active_record/touch_later.rb +58 -0
- data/lib/active_record/transactions.rb +138 -56
- data/lib/active_record/type/adapter_specific_registry.rb +130 -0
- data/lib/active_record/type/date.rb +2 -41
- data/lib/active_record/type/date_time.rb +2 -49
- data/lib/active_record/type/internal/abstract_json.rb +29 -0
- data/lib/active_record/type/internal/timezone.rb +15 -0
- data/lib/active_record/type/serialized.rb +15 -14
- data/lib/active_record/type/time.rb +10 -16
- data/lib/active_record/type/type_map.rb +4 -4
- data/lib/active_record/type.rb +66 -17
- data/lib/active_record/type_caster/connection.rb +29 -0
- data/lib/active_record/type_caster/map.rb +19 -0
- data/lib/active_record/type_caster.rb +7 -0
- data/lib/active_record/validations/absence.rb +23 -0
- data/lib/active_record/validations/associated.rb +10 -3
- data/lib/active_record/validations/length.rb +24 -0
- data/lib/active_record/validations/presence.rb +11 -12
- data/lib/active_record/validations/uniqueness.rb +30 -29
- data/lib/active_record/validations.rb +33 -32
- data/lib/active_record.rb +7 -2
- data/lib/rails/generators/active_record/migration/migration_generator.rb +7 -4
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +8 -3
- data/lib/rails/generators/active_record/migration/templates/migration.rb +8 -1
- data/lib/rails/generators/active_record/migration.rb +7 -0
- data/lib/rails/generators/active_record/model/model_generator.rb +32 -15
- data/lib/rails/generators/active_record/model/templates/application_record.rb +5 -0
- data/lib/rails/generators/active_record/model/templates/model.rb +3 -0
- metadata +58 -34
- data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -491
- data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +0 -11
- data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
- data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
- data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +0 -11
- data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
- data/lib/active_record/serializers/xml_serializer.rb +0 -193
- data/lib/active_record/type/big_integer.rb +0 -13
- data/lib/active_record/type/binary.rb +0 -50
- data/lib/active_record/type/boolean.rb +0 -31
- data/lib/active_record/type/decimal.rb +0 -50
- data/lib/active_record/type/decimal_without_scale.rb +0 -11
- data/lib/active_record/type/decorator.rb +0 -14
- data/lib/active_record/type/float.rb +0 -19
- data/lib/active_record/type/integer.rb +0 -59
- data/lib/active_record/type/mutable.rb +0 -16
- data/lib/active_record/type/numeric.rb +0 -36
- data/lib/active_record/type/string.rb +0 -40
- data/lib/active_record/type/text.rb +0 -11
- data/lib/active_record/type/time_value.rb +0 -38
- data/lib/active_record/type/unsigned_integer.rb +0 -15
- data/lib/active_record/type/value.rb +0 -105
@@ -1,6 +1,16 @@
|
|
1
1
|
require 'active_record'
|
2
2
|
|
3
3
|
db_namespace = namespace :db do
|
4
|
+
desc "Set the environment value for the database"
|
5
|
+
task "environment:set" => [:environment, :load_config] do
|
6
|
+
ActiveRecord::InternalMetadata.create_table
|
7
|
+
ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Migrator.current_environment
|
8
|
+
end
|
9
|
+
|
10
|
+
task :check_protected_environments => [:environment, :load_config] do
|
11
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!
|
12
|
+
end
|
13
|
+
|
4
14
|
task :load_config do
|
5
15
|
ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration || {}
|
6
16
|
ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
@@ -12,30 +22,34 @@ db_namespace = namespace :db do
|
|
12
22
|
end
|
13
23
|
end
|
14
24
|
|
15
|
-
desc 'Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RAILS_ENV it defaults to creating the development and test databases.'
|
25
|
+
desc 'Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to creating the development and test databases.'
|
16
26
|
task :create => [:load_config] do
|
17
27
|
ActiveRecord::Tasks::DatabaseTasks.create_current
|
18
28
|
end
|
19
29
|
|
20
30
|
namespace :drop do
|
21
|
-
task :all => :load_config do
|
31
|
+
task :all => [:load_config, :check_protected_environments] do
|
22
32
|
ActiveRecord::Tasks::DatabaseTasks.drop_all
|
23
33
|
end
|
24
34
|
end
|
25
35
|
|
26
|
-
desc 'Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV it defaults to dropping the development and test databases.'
|
27
|
-
task :drop => [:load_config] do
|
36
|
+
desc 'Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to dropping the development and test databases.'
|
37
|
+
task :drop => [:load_config, :check_protected_environments] do
|
38
|
+
db_namespace["drop:_unsafe"].invoke
|
39
|
+
end
|
40
|
+
|
41
|
+
task "drop:_unsafe" => [:load_config] do
|
28
42
|
ActiveRecord::Tasks::DatabaseTasks.drop_current
|
29
43
|
end
|
30
44
|
|
31
45
|
namespace :purge do
|
32
|
-
task :all => :load_config do
|
46
|
+
task :all => [:load_config, :check_protected_environments] do
|
33
47
|
ActiveRecord::Tasks::DatabaseTasks.purge_all
|
34
48
|
end
|
35
49
|
end
|
36
50
|
|
37
|
-
# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:
|
38
|
-
task :purge => [:load_config] do
|
51
|
+
# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:purge:all to purge all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases."
|
52
|
+
task :purge => [:load_config, :check_protected_environments] do
|
39
53
|
ActiveRecord::Tasks::DatabaseTasks.purge_current
|
40
54
|
end
|
41
55
|
|
@@ -79,7 +93,7 @@ db_namespace = namespace :db do
|
|
79
93
|
task :up => [:environment, :load_config] do
|
80
94
|
version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
|
81
95
|
raise 'VERSION is required' unless version
|
82
|
-
ActiveRecord::Migrator.run(:up, ActiveRecord::
|
96
|
+
ActiveRecord::Migrator.run(:up, ActiveRecord::Tasks::DatabaseTasks.migrations_paths, version)
|
83
97
|
db_namespace['_dump'].invoke
|
84
98
|
end
|
85
99
|
|
@@ -87,7 +101,7 @@ db_namespace = namespace :db do
|
|
87
101
|
task :down => [:environment, :load_config] do
|
88
102
|
version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
|
89
103
|
raise 'VERSION is required - To go down one migration, run db:rollback' unless version
|
90
|
-
ActiveRecord::Migrator.run(:down, ActiveRecord::
|
104
|
+
ActiveRecord::Migrator.run(:down, ActiveRecord::Tasks::DatabaseTasks.migrations_paths, version)
|
91
105
|
db_namespace['_dump'].invoke
|
92
106
|
end
|
93
107
|
|
@@ -99,13 +113,15 @@ db_namespace = namespace :db do
|
|
99
113
|
db_list = ActiveRecord::SchemaMigration.normalized_versions
|
100
114
|
|
101
115
|
file_list =
|
102
|
-
ActiveRecord::
|
103
|
-
|
104
|
-
|
105
|
-
|
116
|
+
ActiveRecord::Tasks::DatabaseTasks.migrations_paths.flat_map do |path|
|
117
|
+
Dir.foreach(path).map do |file|
|
118
|
+
next unless ActiveRecord::Migrator.match_to_migration_filename?(file)
|
119
|
+
|
120
|
+
version, name, scope = ActiveRecord::Migrator.parse_migration_filename(file)
|
121
|
+
version = ActiveRecord::SchemaMigration.normalize_migration_number(version)
|
106
122
|
status = db_list.delete(version) ? 'up' : 'down'
|
107
|
-
[status, version,
|
108
|
-
end
|
123
|
+
[status, version, (name + scope).humanize]
|
124
|
+
end.compact
|
109
125
|
end
|
110
126
|
|
111
127
|
db_list.map! do |version|
|
@@ -125,22 +141,19 @@ db_namespace = namespace :db do
|
|
125
141
|
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
126
142
|
task :rollback => [:environment, :load_config] do
|
127
143
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
128
|
-
ActiveRecord::Migrator.rollback(ActiveRecord::
|
144
|
+
ActiveRecord::Migrator.rollback(ActiveRecord::Tasks::DatabaseTasks.migrations_paths, step)
|
129
145
|
db_namespace['_dump'].invoke
|
130
146
|
end
|
131
147
|
|
132
148
|
# desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
133
149
|
task :forward => [:environment, :load_config] do
|
134
150
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
135
|
-
ActiveRecord::Migrator.forward(ActiveRecord::
|
151
|
+
ActiveRecord::Migrator.forward(ActiveRecord::Tasks::DatabaseTasks.migrations_paths, step)
|
136
152
|
db_namespace['_dump'].invoke
|
137
153
|
end
|
138
154
|
|
139
155
|
# desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
|
140
|
-
task :reset => [:
|
141
|
-
db_namespace["drop"].invoke
|
142
|
-
db_namespace["setup"].invoke
|
143
|
-
end
|
156
|
+
task :reset => [ 'db:drop', 'db:setup' ]
|
144
157
|
|
145
158
|
# desc "Retrieves the charset for the current environment's database"
|
146
159
|
task :charset => [:environment, :load_config] do
|
@@ -162,29 +175,29 @@ db_namespace = namespace :db do
|
|
162
175
|
end
|
163
176
|
|
164
177
|
# desc "Raises an error if there are pending migrations"
|
165
|
-
task :abort_if_pending_migrations => :environment do
|
166
|
-
pending_migrations = ActiveRecord::Migrator.open(ActiveRecord::
|
178
|
+
task :abort_if_pending_migrations => [:environment, :load_config] do
|
179
|
+
pending_migrations = ActiveRecord::Migrator.open(ActiveRecord::Tasks::DatabaseTasks.migrations_paths).pending_migrations
|
167
180
|
|
168
181
|
if pending_migrations.any?
|
169
182
|
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
|
170
183
|
pending_migrations.each do |pending_migration|
|
171
184
|
puts ' %4d %s' % [pending_migration.version, pending_migration.name]
|
172
185
|
end
|
173
|
-
abort %{Run `
|
186
|
+
abort %{Run `rails db:migrate` to update your database then try again.}
|
174
187
|
end
|
175
188
|
end
|
176
189
|
|
177
|
-
desc '
|
190
|
+
desc 'Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)'
|
178
191
|
task :setup => ['db:schema:load_if_ruby', 'db:structure:load_if_sql', :seed]
|
179
192
|
|
180
|
-
desc '
|
193
|
+
desc 'Loads the seed data from db/seeds.rb'
|
181
194
|
task :seed do
|
182
195
|
db_namespace['abort_if_pending_migrations'].invoke
|
183
196
|
ActiveRecord::Tasks::DatabaseTasks.load_seed
|
184
197
|
end
|
185
198
|
|
186
199
|
namespace :fixtures do
|
187
|
-
desc "
|
200
|
+
desc "Loads fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
|
188
201
|
task :load => [:environment, :load_config] do
|
189
202
|
require 'active_record/fixtures'
|
190
203
|
|
@@ -232,7 +245,7 @@ db_namespace = namespace :db do
|
|
232
245
|
end
|
233
246
|
|
234
247
|
namespace :schema do
|
235
|
-
desc '
|
248
|
+
desc 'Creates a db/schema.rb file that is portable against any DB supported by Active Record'
|
236
249
|
task :dump => [:environment, :load_config] do
|
237
250
|
require 'active_record/schema_dumper'
|
238
251
|
filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, 'schema.rb')
|
@@ -242,8 +255,8 @@ db_namespace = namespace :db do
|
|
242
255
|
db_namespace['schema:dump'].reenable
|
243
256
|
end
|
244
257
|
|
245
|
-
desc '
|
246
|
-
task :load => [:environment, :load_config] do
|
258
|
+
desc 'Loads a schema.rb file into the database'
|
259
|
+
task :load => [:environment, :load_config, :check_protected_environments] do
|
247
260
|
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV['SCHEMA'])
|
248
261
|
end
|
249
262
|
|
@@ -252,29 +265,29 @@ db_namespace = namespace :db do
|
|
252
265
|
end
|
253
266
|
|
254
267
|
namespace :cache do
|
255
|
-
desc '
|
268
|
+
desc 'Creates a db/schema_cache.dump file.'
|
256
269
|
task :dump => [:environment, :load_config] do
|
257
270
|
con = ActiveRecord::Base.connection
|
258
271
|
filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.dump")
|
259
272
|
|
260
273
|
con.schema_cache.clear!
|
261
|
-
con.
|
274
|
+
con.data_sources.each { |table| con.schema_cache.add(table) }
|
262
275
|
open(filename, 'wb') { |f| f.write(Marshal.dump(con.schema_cache)) }
|
263
276
|
end
|
264
277
|
|
265
|
-
desc '
|
278
|
+
desc 'Clears a db/schema_cache.dump file.'
|
266
279
|
task :clear => [:environment, :load_config] do
|
267
280
|
filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.dump")
|
268
|
-
|
281
|
+
rm_f filename, verbose: false
|
269
282
|
end
|
270
283
|
end
|
271
284
|
|
272
285
|
end
|
273
286
|
|
274
287
|
namespace :structure do
|
275
|
-
desc '
|
288
|
+
desc 'Dumps the database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql'
|
276
289
|
task :dump => [:environment, :load_config] do
|
277
|
-
filename = ENV['
|
290
|
+
filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "structure.sql")
|
278
291
|
current_config = ActiveRecord::Tasks::DatabaseTasks.current_config
|
279
292
|
ActiveRecord::Tasks::DatabaseTasks.structure_dump(current_config, filename)
|
280
293
|
|
@@ -288,9 +301,9 @@ db_namespace = namespace :db do
|
|
288
301
|
db_namespace['structure:dump'].reenable
|
289
302
|
end
|
290
303
|
|
291
|
-
desc "
|
292
|
-
task :load => [:load_config] do
|
293
|
-
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:sql, ENV['
|
304
|
+
desc "Recreates the databases from the structure.sql file"
|
305
|
+
task :load => [:environment, :load_config, :check_protected_environments] do
|
306
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:sql, ENV['SCHEMA'])
|
294
307
|
end
|
295
308
|
|
296
309
|
task :load_if_sql => ['db:create', :environment] do
|
@@ -322,7 +335,7 @@ db_namespace = namespace :db do
|
|
322
335
|
begin
|
323
336
|
should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
|
324
337
|
ActiveRecord::Schema.verbose = false
|
325
|
-
ActiveRecord::Tasks::DatabaseTasks.
|
338
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations['test'], :ruby, ENV['SCHEMA']
|
326
339
|
ensure
|
327
340
|
if should_reconnect
|
328
341
|
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[ActiveRecord::Tasks::DatabaseTasks.env])
|
@@ -332,7 +345,7 @@ db_namespace = namespace :db do
|
|
332
345
|
|
333
346
|
# desc "Recreate the test database from an existent structure.sql file"
|
334
347
|
task :load_structure => %w(db:test:purge) do
|
335
|
-
ActiveRecord::Tasks::DatabaseTasks.
|
348
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations['test'], :sql, ENV['SCHEMA']
|
336
349
|
end
|
337
350
|
|
338
351
|
# desc "Recreate the test database from a fresh schema"
|
@@ -352,11 +365,11 @@ db_namespace = namespace :db do
|
|
352
365
|
task :clone_structure => %w(db:test:deprecated db:structure:dump db:test:load_structure)
|
353
366
|
|
354
367
|
# desc "Empty the test database"
|
355
|
-
task :purge => %w(environment load_config) do
|
368
|
+
task :purge => %w(environment load_config check_protected_environments) do
|
356
369
|
ActiveRecord::Tasks::DatabaseTasks.purge ActiveRecord::Base.configurations['test']
|
357
370
|
end
|
358
371
|
|
359
|
-
# desc '
|
372
|
+
# desc 'Load the test schema'
|
360
373
|
task :prepare => %w(environment load_config) do
|
361
374
|
unless ActiveRecord::Base.configurations.blank?
|
362
375
|
db_namespace['test:load'].invoke
|
@@ -369,7 +382,7 @@ namespace :railties do
|
|
369
382
|
namespace :install do
|
370
383
|
# desc "Copies missing migrations from Railties (e.g. engines). You can specify Railties to use with FROM=railtie1,railtie2"
|
371
384
|
task :migrations => :'db:load_config' do
|
372
|
-
to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map
|
385
|
+
to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map(&:strip)
|
373
386
|
railties = {}
|
374
387
|
Rails.application.migration_railties.each do |railtie|
|
375
388
|
next unless to_load == :all || to_load.include?(railtie.railtie_name)
|
@@ -387,7 +400,7 @@ namespace :railties do
|
|
387
400
|
puts "Copied migration #{migration.basename} from #{name}"
|
388
401
|
end
|
389
402
|
|
390
|
-
ActiveRecord::Migration.copy(ActiveRecord::
|
403
|
+
ActiveRecord::Migration.copy(ActiveRecord::Tasks::DatabaseTasks.migrations_paths.first, railties,
|
391
404
|
:on_skip => on_skip, :on_copy => on_copy)
|
392
405
|
end
|
393
406
|
end
|
@@ -11,7 +11,7 @@ module ActiveRecord
|
|
11
11
|
# Attributes listed as readonly will be used to create a new record but update operations will
|
12
12
|
# ignore these fields.
|
13
13
|
def attr_readonly(*attributes)
|
14
|
-
self._attr_readonly = Set.new(attributes.map
|
14
|
+
self._attr_readonly = Set.new(attributes.map(&:to_s)) + (self._attr_readonly || [])
|
15
15
|
end
|
16
16
|
|
17
17
|
# Returns an array of all the attributes that have been specified as readonly.
|