From 850be8a89049c7a179a47dd42ba5c71017c59057 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 26 Feb 2022 00:11:26 +0100 Subject: [PATCH] correced down query, delete satte_balances table and restore it --- .../0028-clean_transaction_table.ts | 38 +++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/database/migrations/0028-clean_transaction_table.ts b/database/migrations/0028-clean_transaction_table.ts index 82a5948f8..0b9e2cc0d 100644 --- a/database/migrations/0028-clean_transaction_table.ts +++ b/database/migrations/0028-clean_transaction_table.ts @@ -37,11 +37,35 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis // rename column `dec_decay` to `decay` await queryFn('ALTER TABLE `transactions` RENAME COLUMN `dec_decay` to `decay`;') + + // Drop tables + + // drop `state_balances` + await queryFn('DROP TABLE `state_balances`;') } export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { // Not all data is recoverable here, this data is simulated, // We lose all incorrect balances and wrongly rounded amounts. + + await queryFn(` + CREATE TABLE \`state_balances\` ( + \`id\` int(10) unsigned NOT NULL AUTO_INCREMENT, + \`state_user_id\` int(10) unsigned NOT NULL, + \`modified\` datetime NOT NULL, + \`record_date\` datetime DEFAULT NULL, + \`amount\` bigint(20) NOT NULL, + PRIMARY KEY (\`id\`) + ) ENGINE=InnoDB AUTO_INCREMENT=568 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `) + await queryFn(` + INSERT INTO \`state_balances\` + (state_user_id, modified, record_date, amount) + SELECT user_id as state_user_id, balance_date as modified, balance_date as record_date, amount * 10000 as amount FROM + (SELECT user_id as uid, MAX(balance_date) AS date FROM transactions GROUP BY uid) AS t + LEFT JOIN transactions ON t.uid = transactions.user_id AND t.date = transactions.balance_date; + `) + await queryFn('ALTER TABLE `transactions` RENAME COLUMN `decay` to `dec_decay`;') await queryFn('ALTER TABLE `transactions` RENAME COLUMN `balance` to `dec_balance`;') await queryFn('ALTER TABLE `transactions` RENAME COLUMN `amount` to `dec_amount`;') @@ -60,22 +84,22 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom ) await queryFn('ALTER TABLE `transactions` ADD COLUMN `balance` bigint(20) DEFAULT 0 AFTER memo;') await queryFn( - 'ALTER TABLE `transactions` ADD COLUMN `send_sender_final_balance` bigint(20) DEFAULT NULL memo;', + 'ALTER TABLE `transactions` ADD COLUMN `send_sender_final_balance` bigint(20) DEFAULT NULL AFTER memo;', ) await queryFn( 'ALTER TABLE `transactions` ADD COLUMN `amount` bigint(20) DEFAULT NULL AFTER decay_start;', ) await queryFn(` - UPDATE transaction SET + UPDATE transactions SET temp_dec_diff_balance = 0, temp_dec_old_balance = dec_balance, temp_dec_diff_send_sender_final_balance = 0, - temp_dec_send_sender_final_balance = dec_balance - balance = dec_balance * 10000 - send_sender_final_balance = dec_balance * 10000 - amount = dec_amount * 10000 + temp_dec_send_sender_final_balance = dec_balance, + balance = dec_balance * 10000, + send_sender_final_balance = dec_balance * 10000, + amount = dec_amount * 10000; `) - await queryFn('ALTER TABLE `transactions` MODIFY COLUMN `amount` bigint(20) NOT NULL AFTER;') + await queryFn('ALTER TABLE `transactions` MODIFY COLUMN `amount` bigint(20) NOT NULL;') }