From 65aeee7b98d0e9969afec8dbb4e2d7751f2459ba Mon Sep 17 00:00:00 2001 From: trydofor Date: Sun, 7 Jul 2024 19:31:06 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20flywave=20procedure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/2-faceless/2a-flywave.md | 37 +++++++++++++++++++++++++++++++++ src/zh/2-faceless/2a-flywave.md | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/src/2-faceless/2a-flywave.md b/src/2-faceless/2a-flywave.md index 123e46f7d..a80efcf83 100644 --- a/src/2-faceless/2a-flywave.md +++ b/src/2-faceless/2a-flywave.md @@ -249,6 +249,7 @@ The revision numbers currently in use are, * 2021_1220_01 - flywave:branch/somefix/02-v242-201/2021-12-20v01-journal-trg-insert.sql * 2021_1026_02 - tiny-task:branch/somefix/03-task-tune/2021-10-26v02-task-tune.sql * 2021_1026_03 - warlock:branch/somefix/04-conf-size/2021-10-26v02-conf-size.sql +* 2021_1026_05 - faceless:branch/somefix/05-journal-elapse/2021-10-26v05-journal-elapse.sql * 2022_0601_01 - testing-faceless:master/2022-0601v01-test.sql * 2022_0601_02 - testing-faceless:master/2022-0601v02-test.sql * 2022_0222_01 - winx-common:master/00-init/2022-0222v01-demo-init.sql @@ -332,3 +333,39 @@ and is run first by default (before its upgrade). The test cases in `kotlin` are mainly for demo purposed. They should be run individually to ensure success. If they are run together, springboot will not reinitialize `context` all the time in order to reuse resources efficiently. This will cause some `ApplicationListener` not to fire and some TestCase to fail. + +## 2A.8.manual update + +During the dev or without using flywave, if you want to handle the schema revision, + +```sql +-- drop +DROP PROCEDURE IF EXISTS FLYWAVE; + +-- create +DELIMITER $$ +CREATE PROCEDURE FLYWAVE(IN filename VARCHAR(50)) +BEGIN + DECLARE revi VARCHAR(20); + SET revi = REGEXP_REPLACE(REGEXP_SUBSTR(filename, '[-_0-9]{8,}[uv][0-9]{2,}', 1, 1, 'i'), '[^0-9]', ''); + IF REGEXP_LIKE(filename, '[-_0-9]{8,}[v][0-9]{2,}','i') = 1 THEN + INSERT INTO `sys_schema_version` (`revision`, `apply_dt`, `comments`, `commit_id`, `upto_sql`, `undo_sql`) + VALUES (revi, NOW(3), filename, 0, '', '') + ON DUPLICATE KEY UPDATE `apply_dt` = NOW(3); + ELSE + UPDATE `sys_schema_version` + SET `apply_dt` = '1000-01-01', + `modify_dt`= NOW(3) + WHERE `revision` = revi; + END IF; +END$$ +DELIMITER ; +``` + +Create the `FLYWAVE` stored procedure with the using sql-file naming as its parameter, +Place them as a comment at the end of sql-script, manually select and execute it. + +```sql +-- CALL FLYWAVE('2019-05-12u02-version-add-column.sql'); +-- CALL FLYWAVE('2019-05-12v02-version-add-column.sql'); +``` diff --git a/src/zh/2-faceless/2a-flywave.md b/src/zh/2-faceless/2a-flywave.md index d1624b3ce..54f502d3d 100644 --- a/src/zh/2-faceless/2a-flywave.md +++ b/src/zh/2-faceless/2a-flywave.md @@ -223,6 +223,7 @@ wings的内置Revision和真实日期无关,主要集中在2019至2021,仅 * 2021_1220_01 - flywave:branch/somefix/02-v242-201/2021-12-20v01-journal-trg-insert.sql * 2021_1026_02 - tiny-task:branch/somefix/03-task-tune/2021-10-26v02-task-tune.sql * 2021_1026_03 - warlock:branch/somefix/04-conf-size/2021-10-26v02-conf-size.sql +* 2021_1026_05 - faceless:branch/somefix/05-journal-elapse/2021-10-26v05-journal-elapse.sql * 2022_0601_01 - testing-faceless:master/2022-0601v01-test.sql * 2022_0601_02 - testing-faceless:master/2022-0601v02-test.sql * 2022_0222_01 - winx-common:master/00-init/2022-0222v01-demo-init.sql @@ -304,3 +305,39 @@ wings的内置Revision和真实日期无关,主要集中在2019至2021,仅 `kotlin`中的测试用例,主要是场景演示。需要单个执行,确保成功。 统一执行时,springboot为了有效使用资源,不会全部重新初始化`context`, 这样会使有些`ApplicationListener`得不到触发,可能导致部分TestCase失败。 + +## 2A.8.手动更新 + +在开发阶段或不使用flywave时,也希望记录schema的变更,可以采用以下方式, + +```sql +-- drop +DROP PROCEDURE IF EXISTS FLYWAVE; + +-- create +DELIMITER $$ +CREATE PROCEDURE FLYWAVE(IN filename VARCHAR(50)) +BEGIN + DECLARE revi VARCHAR(20); + SET revi = REGEXP_REPLACE(REGEXP_SUBSTR(filename, '[-_0-9]{8,}[uv][0-9]{2,}', 1, 1, 'i'), '[^0-9]', ''); + IF REGEXP_LIKE(filename, '[-_0-9]{8,}[v][0-9]{2,}','i') = 1 THEN + INSERT INTO `sys_schema_version` (`revision`, `apply_dt`, `comments`, `commit_id`, `upto_sql`, `undo_sql`) + VALUES (revi, NOW(3), filename, 0, '', '') + ON DUPLICATE KEY UPDATE `apply_dt` = NOW(3); + ELSE + UPDATE `sys_schema_version` + SET `apply_dt` = '1000-01-01', + `modify_dt`= NOW(3) + WHERE `revision` = revi; + END IF; +END$$ +DELIMITER ; +`` + +创建 `FLYWAVE` 存储过程,其参数为脚本名,以注释的形式置于升级或降级脚本末尾,手动选中执行。 + + +```sql +-- CALL FLYWAVE('2019-05-12u02-version-add-column.sql'); +-- CALL FLYWAVE('2019-05-12v02-version-add-column.sql'); +```