online_migrations 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -0
- data/lib/generators/online_migrations/install_generator.rb +5 -5
- data/lib/generators/online_migrations/templates/initializer.rb.tt +4 -4
- data/lib/online_migrations/command_checker.rb +13 -5
- data/lib/online_migrations/index_definition.rb +1 -4
- data/lib/online_migrations/schema_cache.rb +4 -2
- data/lib/online_migrations/schema_statements.rb +30 -3
- data/lib/online_migrations/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f0ae9026f83b836b520090730426b5cf93fe18e193f21ea28cd11b96ebb78a8
|
4
|
+
data.tar.gz: 939595b3b732d6351fbab4403f0271e47a2c42b770a9732e30cdc0f52479ce7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d09f3b4a3592cada77cf27e152669d6c94e5bd15e3c2930aa18c6ca6de6cd3c0e588314e95cd7cb058e43fea22343c8529ed7c2a11ec60d247ce6479bce58374
|
7
|
+
data.tar.gz: 42185f369b8adb87c10c2e0cfb29891784d3b55bd0c41cc3b92804fb0d8f71d9b70f4349b26a5752ff1f6b9d8ebbdbc061667157d6b1023190907104f71e93b1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,34 @@
|
|
1
1
|
## master (unreleased)
|
2
2
|
|
3
|
+
## 0.5.2 (2022-10-04)
|
4
|
+
|
5
|
+
- Fix sequence resetting in tests that use fixtures
|
6
|
+
|
7
|
+
- Fix `update_column_in_batches` for SQL subquery values
|
8
|
+
|
9
|
+
It generated inefficient queries before, e.g.:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
update_column_in_batches(:users, :comments_count, Arel.sql(<<~SQL))
|
13
|
+
(select count(*) from comments where comments.user_id = users.id)
|
14
|
+
SQL
|
15
|
+
```
|
16
|
+
|
17
|
+
Generated SQL queries before:
|
18
|
+
```sql
|
19
|
+
update users
|
20
|
+
set comments_count = (..count subquery..)
|
21
|
+
where comments_count is null or comments_count != (..count subquery..)
|
22
|
+
```
|
23
|
+
|
24
|
+
Generated SQL queries now:
|
25
|
+
```sql
|
26
|
+
update users set comments_count = (..count subquery..)
|
27
|
+
```
|
28
|
+
|
29
|
+
- Fix check for `add_column` with `default: nil` for PostgreSQL < 11
|
30
|
+
- Replacing a unique index when other unique index with the prefix of columns exists is safe
|
31
|
+
|
3
32
|
## 0.5.1 (2022-07-19)
|
4
33
|
|
5
34
|
- Raise for possible index corruption in all environments (previously, the check was made only
|
@@ -10,21 +10,21 @@ module OnlineMigrations
|
|
10
10
|
|
11
11
|
source_root File.expand_path("templates", __dir__)
|
12
12
|
|
13
|
-
def create_migration_file
|
14
|
-
migration_template("migration.rb", File.join(migrations_dir, "install_online_migrations.rb"))
|
15
|
-
end
|
16
|
-
|
17
13
|
def copy_initializer_file
|
18
14
|
template("initializer.rb", "config/initializers/online_migrations.rb")
|
19
15
|
end
|
20
16
|
|
17
|
+
def create_migration_file
|
18
|
+
migration_template("migration.rb", File.join(migrations_dir, "install_online_migrations.rb"))
|
19
|
+
end
|
20
|
+
|
21
21
|
private
|
22
22
|
def migration_parent
|
23
23
|
Utils.migration_parent_string
|
24
24
|
end
|
25
25
|
|
26
26
|
def start_after
|
27
|
-
self.class.
|
27
|
+
self.class.current_migration_number(migrations_dir)
|
28
28
|
end
|
29
29
|
|
30
30
|
def migrations_dir
|
@@ -59,11 +59,11 @@ OnlineMigrations.configure do |config|
|
|
59
59
|
|
60
60
|
# Add custom checks. Use the `stop!` method to stop migrations.
|
61
61
|
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
# end
|
62
|
+
# config.add_check do |method, args|
|
63
|
+
# if method == :add_column && args[0].to_s == "users"
|
64
|
+
# stop!("No more columns on the users table")
|
66
65
|
# end
|
66
|
+
# end
|
67
67
|
|
68
68
|
# ==> Background migrations configuration
|
69
69
|
# The number of rows to process in a single background migration run.
|
@@ -174,8 +174,8 @@ module OnlineMigrations
|
|
174
174
|
def add_column(table_name, column_name, type, **options)
|
175
175
|
default = options[:default]
|
176
176
|
volatile_default = false
|
177
|
-
if !new_or_small_table?(table_name) &&
|
178
|
-
(postgresql_version < Gem::Version.new("11") || (volatile_default = Utils.volatile_default?(connection, type, default)))
|
177
|
+
if !new_or_small_table?(table_name) && options.key?(:default) &&
|
178
|
+
(postgresql_version < Gem::Version.new("11") || (!default.nil? && (volatile_default = Utils.volatile_default?(connection, type, default))))
|
179
179
|
|
180
180
|
raise_error :add_column_with_default,
|
181
181
|
code: command_str(:add_column_with_default, table_name, column_name, type, options),
|
@@ -478,9 +478,17 @@ module OnlineMigrations
|
|
478
478
|
command: command_str(:remove_index, table_name, **options.merge(algorithm: :concurrently))
|
479
479
|
end
|
480
480
|
|
481
|
-
|
482
|
-
|
483
|
-
|
481
|
+
index_def = connection.indexes(table_name).find do |index|
|
482
|
+
index.name == options[:name].to_s ||
|
483
|
+
Array(index.columns).map(&:to_s) == Array(options[:column]).map(&:to_s)
|
484
|
+
end
|
485
|
+
|
486
|
+
if index_def
|
487
|
+
existing_options = [:name, :columns, :unique, :where, :type, :using, :opclasses].map do |option|
|
488
|
+
[option, index_def.public_send(option)] if index_def.respond_to?(option)
|
489
|
+
end.compact.to_h
|
490
|
+
|
491
|
+
@removed_indexes << IndexDefinition.new(table: table_name, **existing_options)
|
484
492
|
end
|
485
493
|
end
|
486
494
|
|
@@ -30,10 +30,7 @@ module OnlineMigrations
|
|
30
30
|
return false if where != other.where
|
31
31
|
return false if other.respond_to?(:opclasses) && opclasses != other.opclasses
|
32
32
|
|
33
|
-
|
34
|
-
when [true, true]
|
35
|
-
columns == other.columns
|
36
|
-
when [true, false]
|
33
|
+
if unique && !other.unique
|
37
34
|
false
|
38
35
|
else
|
39
36
|
prefix?(self, other)
|
@@ -69,8 +69,9 @@ module OnlineMigrations
|
|
69
69
|
def renamed_tables
|
70
70
|
@renamed_tables ||= begin
|
71
71
|
table_renames = OnlineMigrations.config.table_renames
|
72
|
+
views = connection.views
|
72
73
|
table_renames.select do |old_name, _|
|
73
|
-
|
74
|
+
views.include?(old_name)
|
74
75
|
end
|
75
76
|
end
|
76
77
|
end
|
@@ -78,8 +79,9 @@ module OnlineMigrations
|
|
78
79
|
def renamed_columns
|
79
80
|
@renamed_columns ||= begin
|
80
81
|
column_renames = OnlineMigrations.config.column_renames
|
82
|
+
views = connection.views
|
81
83
|
column_renames.select do |table_name, _|
|
82
|
-
|
84
|
+
views.include?(table_name)
|
83
85
|
end
|
84
86
|
end
|
85
87
|
end
|
@@ -85,9 +85,13 @@ module OnlineMigrations
|
|
85
85
|
|
86
86
|
conditions = columns_and_values.map do |(column_name, value)|
|
87
87
|
value = Arel.sql(value.call.to_s) if value.is_a?(Proc)
|
88
|
-
|
89
|
-
|
90
|
-
|
88
|
+
|
89
|
+
# Ignore subqueries in conditions
|
90
|
+
unless value.is_a?(Arel::Nodes::SqlLiteral) && value.to_s =~ /select\s+/i
|
91
|
+
arel_column = model.arel_table[column_name]
|
92
|
+
arel_column.not_eq(value).or(arel_column.eq(nil))
|
93
|
+
end
|
94
|
+
end.compact
|
91
95
|
|
92
96
|
batch_relation = model.where(conditions.inject(:and))
|
93
97
|
batch_relation = yield batch_relation if block_given?
|
@@ -820,6 +824,29 @@ module OnlineMigrations
|
|
820
824
|
end
|
821
825
|
end
|
822
826
|
|
827
|
+
# @private
|
828
|
+
def pk_and_sequence_for(table)
|
829
|
+
views = self.views
|
830
|
+
|
831
|
+
table_renames = OnlineMigrations.config.table_renames
|
832
|
+
renamed_tables = table_renames.select do |old_name, _|
|
833
|
+
views.include?(old_name)
|
834
|
+
end
|
835
|
+
|
836
|
+
column_renames = OnlineMigrations.config.column_renames
|
837
|
+
renamed_columns = column_renames.select do |table_name, _|
|
838
|
+
views.include?(table_name)
|
839
|
+
end
|
840
|
+
|
841
|
+
if renamed_tables.key?(table)
|
842
|
+
super(renamed_tables[table])
|
843
|
+
elsif renamed_columns.key?(table)
|
844
|
+
super("#{table}_column_rename")
|
845
|
+
else
|
846
|
+
super
|
847
|
+
end
|
848
|
+
end
|
849
|
+
|
823
850
|
# Disables statement timeout while executing &block
|
824
851
|
#
|
825
852
|
# Long-running migrations may take more than the timeout allowed by the database.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: online_migrations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fatkodima
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|