strong_migrations 1.4.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7444023bd5f0829a289ebc9d222a28f041a4e3789224438f9fd6bffa01fa6668
4
- data.tar.gz: feb5010616cc8ef6cf36088be7a67bb0d74272cde79d0e9a0a442272bfa92d99
3
+ metadata.gz: b830fe1881c2a85f578d28bb4b938c38204627897639cfc28ae44486f81dfb90
4
+ data.tar.gz: '09b4ef459fa407a8143120ec2dc19c98b5b02a885b1537cce26d63bea648eeab'
5
5
  SHA512:
6
- metadata.gz: '0599a3fef628ec724471ef53b7ad7358831e6b638bdd0ca3b7cb79c1b416da6c044793ecca5475f5e602e8a7d1235ced3ff3fda526f31b9c4a56990c8531f9b4'
7
- data.tar.gz: 6aac91ecb348c6a04c25511adf7df5d3e97823f6b9acdfbfd86bac50c4f5856f15fdcc271f00d0fc6f1e5d2cfdbaf3da5e056b1476aaf9b224e7df89b9737e01
6
+ metadata.gz: 7e34db2fb7db9d0b22c9c3c2a8ecca150308cb70b54e1e2b08eec2ccb52460f8aa9818a409aec0d7782678523bda35471fbd693cf4b025bbbd9dffe26a127afb
7
+ data.tar.gz: aad5de96c3886caa4c34f78a85edd6a8ada109f3acc31d8d72bcc6ff8d3ee41787f052cfcf56598103c30dddccd22a61d958e40ae6ac8bcdafeed22b4bc6d3c3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 1.5.0 (2023-07-02)
2
+
3
+ - Added check for `add_column` with stored generated columns
4
+ - Fixed `add_reference` with `foreign_key` and `index: false`
5
+
1
6
  ## 1.4.4 (2023-03-08)
2
7
 
3
8
  - Fixed `add_foreign_key` with `name` and `column` options with `safe_by_default`
data/README.md CHANGED
@@ -62,6 +62,7 @@ Potentially dangerous operations:
62
62
  - [removing a column](#removing-a-column)
63
63
  - [adding a column with a default value](#adding-a-column-with-a-default-value)
64
64
  - [backfilling data](#backfilling-data)
65
+ - [adding a stored generated column](#adding-a-stored-generated-column) [unreleased]
65
66
  - [changing the type of a column](#changing-the-type-of-a-column)
66
67
  - [renaming a column](#renaming-a-column)
67
68
  - [renaming a table](#renaming-a-table)
@@ -191,6 +192,24 @@ class BackfillSomeColumn < ActiveRecord::Migration[7.0]
191
192
  end
192
193
  ```
193
194
 
195
+ ### Adding a stored generated column
196
+
197
+ #### Bad
198
+
199
+ Adding a stored generated column causes the entire table to be rewritten. During this time, reads and writes are blocked in Postgres, and writes are blocked in MySQL and MariaDB.
200
+
201
+ ```ruby
202
+ class AddSomeColumnToUsers < ActiveRecord::Migration[7.0]
203
+ def change
204
+ add_column :users, :some_column, :virtual, type: :string, as: "...", stored: true
205
+ end
206
+ end
207
+ ```
208
+
209
+ #### Good
210
+
211
+ Add a non-generated column and use callbacks or triggers instead (or a virtual generated column with MySQL and MariaDB).
212
+
194
213
  ### Changing the type of a column
195
214
 
196
215
  #### Bad
@@ -71,6 +71,10 @@ Then add the NOT NULL constraint in separate migrations."
71
71
  raise_error :add_column_json,
72
72
  command: command_str("add_column", [table, column, :jsonb, options])
73
73
  end
74
+
75
+ if type.to_s == "virtual" && options[:stored]
76
+ raise_error :add_column_generated_stored, rewrite_blocks: adapter.rewrite_blocks
77
+ end
74
78
  end
75
79
 
76
80
  def check_add_exclusion_constraint(*args)
@@ -147,7 +151,7 @@ Then add the NOT NULL constraint in separate migrations."
147
151
  if bad_index || options[:foreign_key]
148
152
  if index_value.is_a?(Hash)
149
153
  options[:index] = options[:index].merge(algorithm: :concurrently)
150
- else
154
+ elsif index_value
151
155
  options = options.merge(index: {algorithm: :concurrently})
152
156
  end
153
157
 
@@ -50,6 +50,9 @@ class %{migration_name} < ActiveRecord::Migration%{migration_suffix}
50
50
  end
51
51
  end",
52
52
 
53
+ add_column_generated_stored:
54
+ "Adding a stored generated column blocks %{rewrite_blocks} while the entire table is rewritten.",
55
+
53
56
  change_column:
54
57
  "Changing the type of an existing column blocks %{rewrite_blocks}
55
58
  while the entire table is rewritten. A safer approach is to:
@@ -1,3 +1,3 @@
1
1
  module StrongMigrations
2
- VERSION = "1.4.4"
2
+ VERSION = "1.5.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strong_migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.4
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-03-08 00:00:00.000000000 Z
13
+ date: 2023-07-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
77
  requirements: []
78
- rubygems_version: 3.4.6
78
+ rubygems_version: 3.4.10
79
79
  signing_key:
80
80
  specification_version: 4
81
81
  summary: Catch unsafe migrations in development