activerecord 4.2.11.3 → 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 +5 -5
- data/CHANGELOG.md +1281 -1204
- 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 +35 -24
- 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 +49 -41
- data/lib/active_record/associations/collection_proxy.rb +67 -27
- 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 +16 -10
- 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 +19 -140
- 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 +13 -37
- data/lib/active_record/attribute_methods.rb +76 -47
- 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 -81
- 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 -10
- 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 +380 -141
- data/lib/active_record/connection_adapters/abstract/transaction.rb +51 -34
- data/lib/active_record/connection_adapters/abstract_adapter.rb +141 -59
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +401 -370
- 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 +29 -166
- 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 -57
- 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 +149 -192
- 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 +4 -4
- 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 +363 -133
- data/lib/active_record/model_schema.rb +129 -41
- 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 +23 -16
- data/lib/active_record/railties/controller_runtime.rb +1 -1
- data/lib/active_record/railties/databases.rake +69 -46
- 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 +79 -108
- 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 -16
- 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 -14
- 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 +57 -43
- data/lib/active_record/tasks/mysql_database_tasks.rb +6 -14
- 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 -45
- 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 +8 -4
- 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 +59 -34
- data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -498
- 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 -64
- 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 -110
@@ -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
|
|
@@ -63,8 +77,6 @@ db_namespace = namespace :db do
|
|
63
77
|
namespace :migrate do
|
64
78
|
# desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
|
65
79
|
task :redo => [:environment, :load_config] do
|
66
|
-
raise "Empty VERSION provided" if ENV["VERSION"] && ENV["VERSION"].empty?
|
67
|
-
|
68
80
|
if ENV['VERSION']
|
69
81
|
db_namespace['migrate:down'].invoke
|
70
82
|
db_namespace['migrate:up'].invoke
|
@@ -79,18 +91,17 @@ db_namespace = namespace :db do
|
|
79
91
|
|
80
92
|
# desc 'Runs the "up" for a given migration VERSION.'
|
81
93
|
task :up => [:environment, :load_config] do
|
82
|
-
raise "VERSION is required" if ENV["VERSION"] && ENV["VERSION"].empty?
|
83
|
-
|
84
94
|
version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
|
85
|
-
|
95
|
+
raise 'VERSION is required' unless version
|
96
|
+
ActiveRecord::Migrator.run(:up, ActiveRecord::Tasks::DatabaseTasks.migrations_paths, version)
|
86
97
|
db_namespace['_dump'].invoke
|
87
98
|
end
|
88
99
|
|
89
100
|
# desc 'Runs the "down" for a given migration VERSION.'
|
90
101
|
task :down => [:environment, :load_config] do
|
91
|
-
raise "VERSION is required - To go down one migration, use db:rollback" if ENV["VERSION"] && ENV["VERSION"].empty?
|
92
102
|
version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
|
93
|
-
|
103
|
+
raise 'VERSION is required - To go down one migration, run db:rollback' unless version
|
104
|
+
ActiveRecord::Migrator.run(:down, ActiveRecord::Tasks::DatabaseTasks.migrations_paths, version)
|
94
105
|
db_namespace['_dump'].invoke
|
95
106
|
end
|
96
107
|
|
@@ -99,13 +110,28 @@ db_namespace = namespace :db do
|
|
99
110
|
unless ActiveRecord::SchemaMigration.table_exists?
|
100
111
|
abort 'Schema migrations table does not exist yet.'
|
101
112
|
end
|
113
|
+
db_list = ActiveRecord::SchemaMigration.normalized_versions
|
114
|
+
|
115
|
+
file_list =
|
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)
|
122
|
+
status = db_list.delete(version) ? 'up' : 'down'
|
123
|
+
[status, version, (name + scope).humanize]
|
124
|
+
end.compact
|
125
|
+
end
|
102
126
|
|
127
|
+
db_list.map! do |version|
|
128
|
+
['up', version, '********** NO FILE **********']
|
129
|
+
end
|
103
130
|
# output
|
104
131
|
puts "\ndatabase: #{ActiveRecord::Base.connection_config[:database]}\n\n"
|
105
132
|
puts "#{'Status'.center(8)} #{'Migration ID'.ljust(14)} Migration Name"
|
106
133
|
puts "-" * 50
|
107
|
-
|
108
|
-
ActiveRecord::Migrator.migrations_status(paths).each do |status, version, name|
|
134
|
+
(db_list + file_list).sort_by { |_, version, _| version }.each do |status, version, name|
|
109
135
|
puts "#{status.center(8)} #{version.ljust(14)} #{name}"
|
110
136
|
end
|
111
137
|
puts
|
@@ -115,22 +141,19 @@ db_namespace = namespace :db do
|
|
115
141
|
desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
|
116
142
|
task :rollback => [:environment, :load_config] do
|
117
143
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
118
|
-
ActiveRecord::Migrator.rollback(ActiveRecord::
|
144
|
+
ActiveRecord::Migrator.rollback(ActiveRecord::Tasks::DatabaseTasks.migrations_paths, step)
|
119
145
|
db_namespace['_dump'].invoke
|
120
146
|
end
|
121
147
|
|
122
148
|
# desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
123
149
|
task :forward => [:environment, :load_config] do
|
124
150
|
step = ENV['STEP'] ? ENV['STEP'].to_i : 1
|
125
|
-
ActiveRecord::Migrator.forward(ActiveRecord::
|
151
|
+
ActiveRecord::Migrator.forward(ActiveRecord::Tasks::DatabaseTasks.migrations_paths, step)
|
126
152
|
db_namespace['_dump'].invoke
|
127
153
|
end
|
128
154
|
|
129
155
|
# desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
|
130
|
-
task :reset => [:
|
131
|
-
db_namespace["drop"].invoke
|
132
|
-
db_namespace["setup"].invoke
|
133
|
-
end
|
156
|
+
task :reset => [ 'db:drop', 'db:setup' ]
|
134
157
|
|
135
158
|
# desc "Retrieves the charset for the current environment's database"
|
136
159
|
task :charset => [:environment, :load_config] do
|
@@ -152,29 +175,29 @@ db_namespace = namespace :db do
|
|
152
175
|
end
|
153
176
|
|
154
177
|
# desc "Raises an error if there are pending migrations"
|
155
|
-
task :abort_if_pending_migrations => :environment do
|
156
|
-
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
|
157
180
|
|
158
181
|
if pending_migrations.any?
|
159
182
|
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
|
160
183
|
pending_migrations.each do |pending_migration|
|
161
184
|
puts ' %4d %s' % [pending_migration.version, pending_migration.name]
|
162
185
|
end
|
163
|
-
abort %{Run `
|
186
|
+
abort %{Run `rails db:migrate` to update your database then try again.}
|
164
187
|
end
|
165
188
|
end
|
166
189
|
|
167
|
-
desc '
|
190
|
+
desc 'Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)'
|
168
191
|
task :setup => ['db:schema:load_if_ruby', 'db:structure:load_if_sql', :seed]
|
169
192
|
|
170
|
-
desc '
|
193
|
+
desc 'Loads the seed data from db/seeds.rb'
|
171
194
|
task :seed do
|
172
195
|
db_namespace['abort_if_pending_migrations'].invoke
|
173
196
|
ActiveRecord::Tasks::DatabaseTasks.load_seed
|
174
197
|
end
|
175
198
|
|
176
199
|
namespace :fixtures do
|
177
|
-
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."
|
178
201
|
task :load => [:environment, :load_config] do
|
179
202
|
require 'active_record/fixtures'
|
180
203
|
|
@@ -222,7 +245,7 @@ db_namespace = namespace :db do
|
|
222
245
|
end
|
223
246
|
|
224
247
|
namespace :schema do
|
225
|
-
desc '
|
248
|
+
desc 'Creates a db/schema.rb file that is portable against any DB supported by Active Record'
|
226
249
|
task :dump => [:environment, :load_config] do
|
227
250
|
require 'active_record/schema_dumper'
|
228
251
|
filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, 'schema.rb')
|
@@ -232,8 +255,8 @@ db_namespace = namespace :db do
|
|
232
255
|
db_namespace['schema:dump'].reenable
|
233
256
|
end
|
234
257
|
|
235
|
-
desc '
|
236
|
-
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
|
237
260
|
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV['SCHEMA'])
|
238
261
|
end
|
239
262
|
|
@@ -242,29 +265,29 @@ db_namespace = namespace :db do
|
|
242
265
|
end
|
243
266
|
|
244
267
|
namespace :cache do
|
245
|
-
desc '
|
268
|
+
desc 'Creates a db/schema_cache.dump file.'
|
246
269
|
task :dump => [:environment, :load_config] do
|
247
270
|
con = ActiveRecord::Base.connection
|
248
271
|
filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.dump")
|
249
272
|
|
250
273
|
con.schema_cache.clear!
|
251
|
-
con.
|
274
|
+
con.data_sources.each { |table| con.schema_cache.add(table) }
|
252
275
|
open(filename, 'wb') { |f| f.write(Marshal.dump(con.schema_cache)) }
|
253
276
|
end
|
254
277
|
|
255
|
-
desc '
|
278
|
+
desc 'Clears a db/schema_cache.dump file.'
|
256
279
|
task :clear => [:environment, :load_config] do
|
257
280
|
filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.dump")
|
258
|
-
|
281
|
+
rm_f filename, verbose: false
|
259
282
|
end
|
260
283
|
end
|
261
284
|
|
262
285
|
end
|
263
286
|
|
264
287
|
namespace :structure do
|
265
|
-
desc '
|
288
|
+
desc 'Dumps the database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql'
|
266
289
|
task :dump => [:environment, :load_config] do
|
267
|
-
filename = ENV['
|
290
|
+
filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "structure.sql")
|
268
291
|
current_config = ActiveRecord::Tasks::DatabaseTasks.current_config
|
269
292
|
ActiveRecord::Tasks::DatabaseTasks.structure_dump(current_config, filename)
|
270
293
|
|
@@ -278,9 +301,9 @@ db_namespace = namespace :db do
|
|
278
301
|
db_namespace['structure:dump'].reenable
|
279
302
|
end
|
280
303
|
|
281
|
-
desc "
|
282
|
-
task :load => [:load_config] do
|
283
|
-
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'])
|
284
307
|
end
|
285
308
|
|
286
309
|
task :load_if_sql => ['db:create', :environment] do
|
@@ -312,7 +335,7 @@ db_namespace = namespace :db do
|
|
312
335
|
begin
|
313
336
|
should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
|
314
337
|
ActiveRecord::Schema.verbose = false
|
315
|
-
ActiveRecord::Tasks::DatabaseTasks.
|
338
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations['test'], :ruby, ENV['SCHEMA']
|
316
339
|
ensure
|
317
340
|
if should_reconnect
|
318
341
|
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[ActiveRecord::Tasks::DatabaseTasks.env])
|
@@ -322,7 +345,7 @@ db_namespace = namespace :db do
|
|
322
345
|
|
323
346
|
# desc "Recreate the test database from an existent structure.sql file"
|
324
347
|
task :load_structure => %w(db:test:purge) do
|
325
|
-
ActiveRecord::Tasks::DatabaseTasks.
|
348
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations['test'], :sql, ENV['SCHEMA']
|
326
349
|
end
|
327
350
|
|
328
351
|
# desc "Recreate the test database from a fresh schema"
|
@@ -342,11 +365,11 @@ db_namespace = namespace :db do
|
|
342
365
|
task :clone_structure => %w(db:test:deprecated db:structure:dump db:test:load_structure)
|
343
366
|
|
344
367
|
# desc "Empty the test database"
|
345
|
-
task :purge => %w(environment load_config) do
|
368
|
+
task :purge => %w(environment load_config check_protected_environments) do
|
346
369
|
ActiveRecord::Tasks::DatabaseTasks.purge ActiveRecord::Base.configurations['test']
|
347
370
|
end
|
348
371
|
|
349
|
-
# desc '
|
372
|
+
# desc 'Load the test schema'
|
350
373
|
task :prepare => %w(environment load_config) do
|
351
374
|
unless ActiveRecord::Base.configurations.blank?
|
352
375
|
db_namespace['test:load'].invoke
|
@@ -359,7 +382,7 @@ namespace :railties do
|
|
359
382
|
namespace :install do
|
360
383
|
# desc "Copies missing migrations from Railties (e.g. engines). You can specify Railties to use with FROM=railtie1,railtie2"
|
361
384
|
task :migrations => :'db:load_config' do
|
362
|
-
to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map
|
385
|
+
to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map(&:strip)
|
363
386
|
railties = {}
|
364
387
|
Rails.application.migration_railties.each do |railtie|
|
365
388
|
next unless to_load == :all || to_load.include?(railtie.railtie_name)
|
@@ -377,7 +400,7 @@ namespace :railties do
|
|
377
400
|
puts "Copied migration #{migration.basename} from #{name}"
|
378
401
|
end
|
379
402
|
|
380
|
-
ActiveRecord::Migration.copy(ActiveRecord::
|
403
|
+
ActiveRecord::Migration.copy(ActiveRecord::Tasks::DatabaseTasks.migrations_paths.first, railties,
|
381
404
|
:on_skip => on_skip, :on_copy => on_copy)
|
382
405
|
end
|
383
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.
|