mirror of
https://github.com/multipleof4/ntfy.git
synced 2026-10-08 21:05:21 +00:00
Harden migration
This commit is contained in:
@@ -361,7 +361,9 @@ const (
|
||||
PRIMARY KEY (user_id, phone_number),
|
||||
FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE
|
||||
);
|
||||
INSERT INTO user_phone SELECT * FROM user_phone_old;
|
||||
INSERT INTO user_phone (user_id, phone_number)
|
||||
SELECT user_id, phone_number FROM user_phone_old
|
||||
WHERE user_id IN (SELECT id FROM user); -- Drop orphaned rows that the broken foreign key failed to cascade-delete
|
||||
DROP TABLE user_phone_old;
|
||||
`
|
||||
)
|
||||
|
||||
+16
-1
@@ -1820,12 +1820,15 @@ func TestMigrationFrom4(t *testing.T) {
|
||||
`)
|
||||
require.Nil(t, err)
|
||||
|
||||
// Insert a few ACL entries
|
||||
// Insert a few ACL entries, and phone numbers: one for a live user, one orphaned (its user
|
||||
// is gone; the broken pre-v9 foreign key never cascade-deleted it)
|
||||
_, err = db.Exec(`
|
||||
BEGIN;
|
||||
INSERT INTO user_access (user_id, topic, read, write) values ('u_everyone', 'mytopic_', 1, 1);
|
||||
INSERT INTO user_access (user_id, topic, read, write) values ('u_everyone', 'up%', 1, 1);
|
||||
INSERT INTO user_access (user_id, topic, read, write) values ('u_everyone', 'down_%', 1, 1);
|
||||
INSERT INTO user_phone (user_id, phone_number) VALUES ('u_everyone', '+12223334444');
|
||||
INSERT INTO user_phone (user_id, phone_number) VALUES ('u_gone', '+15556667777');
|
||||
COMMIT;
|
||||
`)
|
||||
require.Nil(t, err)
|
||||
@@ -1876,6 +1879,18 @@ func TestMigrationFrom4(t *testing.T) {
|
||||
require.Nil(t, a.Authorize(nil, "up123", PermissionRead))
|
||||
require.Nil(t, a.Authorize(nil, "up", PermissionRead)) // % matches 0 or more characters
|
||||
|
||||
// The 8 -> 9 repair kept the live user's phone number and dropped the orphaned row
|
||||
phoneNumbers := make([]string, 0)
|
||||
rows, err = db.Query(`SELECT phone_number FROM user_phone ORDER BY phone_number`)
|
||||
require.Nil(t, err)
|
||||
for rows.Next() {
|
||||
var phoneNumber string
|
||||
require.Nil(t, rows.Scan(&phoneNumber))
|
||||
phoneNumbers = append(phoneNumbers, phoneNumber)
|
||||
}
|
||||
require.Nil(t, rows.Close())
|
||||
require.Equal(t, []string{"+12223334444"}, phoneNumbers)
|
||||
|
||||
checkMigratedSqliteSchema(t, filename)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user