strong_migrations 1.4.2 → 1.4.3

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: 30cac1a5432c1dcf806208ab10dbab1fe08f757c650dd5f2af965a02638e17de
4
- data.tar.gz: 6571d42391b5c4453cf4f529c555ddd2c91ec83625bc2b584fee3c64dfdefe96
3
+ metadata.gz: 8cfd384b72ffa6aa5ca1b7ed100ecfd9a7eb5f76f5ae1297454f123504629079
4
+ data.tar.gz: fc18dd031a7b25879ef769c4a96ef006778685d6203d2ae76ca2433c608a240f
5
5
  SHA512:
6
- metadata.gz: 69f972c7960262a4d21824ec4b0ff200b212705f3c246ecdbe5ad0ed14f3518d392b5577c7c3d7c064b024b9061352bd457580aa379d83a3c4676bb352326796
7
- data.tar.gz: 56fe3d96e3e2e7a467bc4a2c477ca8dea7ce09418e4720119266f7442bb041bd9f5ec024b9d9f1a3213907ec3a975b530575f062d668f41b52aa66bdfbd5c8e3
6
+ metadata.gz: bdc1870c87c77070f1ecc76347139e44295a236548f65619ad842e943977319e74517462cdddd62527b353a0a85f039968f26235463c99d5f50fedc75d062d1f
7
+ data.tar.gz: baec22cb082ffae658824bc9669dabd5141b8cc6a6502388c37e8e6ab85124eb10655731cb2ab3f520fc3864a580190e4c6a17ff422c1adc267d44f367ce9ab0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 1.4.3 (2023-02-19)
2
+
3
+ - Fixed check for `change_column` to account for charset with MySQL and MariaDB
4
+
1
5
  ## 1.4.2 (2023-01-29)
2
6
 
3
7
  - Added `alphabetize_schema` option
data/README.md CHANGED
@@ -224,7 +224,7 @@ And some in MySQL and MariaDB:
224
224
 
225
225
  Type | Safe Changes
226
226
  --- | ---
227
- `string` | Increasing `:limit` from under 255 up to 255, increasing `:limit` from over 255 to the max
227
+ `string` | Increasing `:limit` from under 63 up to 63, increasing `:limit` from over 63 to the max (the threshold may be different if using an encoding other than `utf8mb4`)
228
228
 
229
229
  #### Good
230
230
 
@@ -52,14 +52,31 @@ module StrongMigrations
52
52
 
53
53
  case type.to_s
54
54
  when "string"
55
- # https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html
56
- # https://mariadb.com/kb/en/innodb-online-ddl-operations-with-the-instant-alter-algorithm/#changing-the-data-type-of-a-column
57
- # increased limit, but doesn't change number of length bytes
58
- # 1-255 = 1 byte, 256-65532 = 2 bytes, 65533+ = too big for varchar
59
55
  limit = options[:limit] || 255
60
- safe = ["varchar"].include?(existing_type) &&
61
- limit >= existing_column.limit &&
62
- (limit <= 255 || existing_column.limit > 255)
56
+ if ["varchar"].include?(existing_type) && limit >= existing_column.limit
57
+ # https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html
58
+ # https://mariadb.com/kb/en/innodb-online-ddl-operations-with-the-instant-alter-algorithm/#changing-the-data-type-of-a-column
59
+ # increased limit, but doesn't change number of length bytes
60
+ # 1-255 = 1 byte, 256-65532 = 2 bytes, 65533+ = too big for varchar
61
+
62
+ # account for charset
63
+ # https://dev.mysql.com/doc/refman/8.0/en/charset-mysql.html
64
+ # https://mariadb.com/kb/en/supported-character-sets-and-collations/
65
+ sql = <<~SQL
66
+ SELECT cs.MAXLEN
67
+ FROM INFORMATION_SCHEMA.CHARACTER_SETS cs
68
+ INNER JOIN INFORMATION_SCHEMA.COLLATIONS c ON c.CHARACTER_SET_NAME = cs.CHARACTER_SET_NAME
69
+ INNER JOIN INFORMATION_SCHEMA.TABLES t ON t.TABLE_COLLATION = c.COLLATION_NAME
70
+ WHERE t.TABLE_SCHEMA = database() AND t.TABLE_NAME = #{connection.quote(table)}
71
+ SQL
72
+ row = connection.select_all(sql).first
73
+ if row
74
+ threshold = 255 / row["MAXLEN"]
75
+ safe = limit <= threshold || existing_column.limit > threshold
76
+ else
77
+ warn "[strong_migrations] Could not determine charset"
78
+ end
79
+ end
63
80
  end
64
81
 
65
82
  safe
@@ -1,3 +1,3 @@
1
1
  module StrongMigrations
2
- VERSION = "1.4.2"
2
+ VERSION = "1.4.3"
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.2
4
+ version: 1.4.3
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-01-30 00:00:00.000000000 Z
13
+ date: 2023-02-19 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.1
78
+ rubygems_version: 3.4.6
79
79
  signing_key:
80
80
  specification_version: 4
81
81
  summary: Catch unsafe migrations in development