From 08b3a4ec6e0fa8423d072d2f086381e850915967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Mon, 28 Aug 2023 10:25:58 +0800 Subject: [PATCH] PageUtil support Dameng --- .../java/io/seata/common/util/PageUtil.java | 2 + .../db/sql/lock/LockStoreSqlFactoryTest.java | 48 +++++++++++++++++++ .../db/sql/log/LogStoreSqlsFactoryTest.java | 36 ++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/common/src/main/java/io/seata/common/util/PageUtil.java b/common/src/main/java/io/seata/common/util/PageUtil.java index 831e2ee15b8..2583f91070f 100644 --- a/common/src/main/java/io/seata/common/util/PageUtil.java +++ b/common/src/main/java/io/seata/common/util/PageUtil.java @@ -105,6 +105,7 @@ public static String pageSql(String sourceSql, String dbType, int pageNum, int p case "h2": case "postgresql": case "oceanbase": + case "dm": return LIMIT_TEMPLATE.replace(SOURCE_SQL_PLACE_HOLD, sourceSql) .replace(LIMIT_PLACE_HOLD, String.valueOf(pageSize)) .replace(OFFSET_PLACE_HOLD, String.valueOf((pageNum - 1) * pageSize)); @@ -130,6 +131,7 @@ public static String countSql(String sourceSql, String dbType) { case "h2": case "oceanbase": case "oracle": + case "dm": return sourceSql.replaceAll("(?i)(?<=select)(.*)(?=from)", " count(1) "); case "postgresql": int lastIndexOfOrderBy = sourceSql.toLowerCase().lastIndexOf("order by"); diff --git a/core/src/test/java/io/seata/core/store/db/sql/lock/LockStoreSqlFactoryTest.java b/core/src/test/java/io/seata/core/store/db/sql/lock/LockStoreSqlFactoryTest.java index 60f885c43a1..0a6c37555a6 100644 --- a/core/src/test/java/io/seata/core/store/db/sql/lock/LockStoreSqlFactoryTest.java +++ b/core/src/test/java/io/seata/core/store/db/sql/lock/LockStoreSqlFactoryTest.java @@ -36,6 +36,8 @@ public class LockStoreSqlFactoryTest { private static LockStoreSql OCEANBASE_LOCK_STORE = LockStoreSqlFactory.getLogStoreSql("oceanbase"); + private static LockStoreSql DM_LOCK_STORE = LockStoreSqlFactory.getLogStoreSql("dm"); + private static String GLOBAL_TABLE = "global_table"; private static String BRANCH_TABLE = "branch_table"; @@ -282,4 +284,50 @@ public void oceanbaseLockTest() { sql = OCEANBASE_LOCK_STORE.getCheckLockableSql(BRANCH_TABLE, 3); Assertions.assertEquals(EXPECT_CHECK_BRANCH_LOCKABLE_SQL,sql); } + + @Test + public void dmLockTest() { + String sql; + // Get insert lock sql string. + sql = DM_LOCK_STORE.getInsertLockSQL(GLOBAL_TABLE); + Assertions.assertNotNull(sql); + sql = DM_LOCK_STORE.getInsertLockSQL(BRANCH_TABLE); + Assertions.assertNotNull(sql); + + // Get delete lock sql string. + sql = DM_LOCK_STORE.getDeleteLockSql(GLOBAL_TABLE); + Assertions.assertNotNull(sql); + sql = DM_LOCK_STORE.getDeleteLockSql(BRANCH_TABLE); + Assertions.assertNotNull(sql); + + // Get batch delete lock sql string. + sql = DM_LOCK_STORE.getBatchDeleteLockSql(GLOBAL_TABLE, 3); + Assertions.assertEquals(EXPECT_BATCH_GLOBAL_DELETE_LOCK_SQL,sql); + sql = DM_LOCK_STORE.getBatchDeleteLockSql(BRANCH_TABLE, 3); + Assertions.assertEquals(EXPECT_BATCH_BRANCH_DELETE_LOCK_SQL,sql); + + // Get batch delete lock sql string. + sql = DM_LOCK_STORE.getBatchDeleteLockSqlByBranchId(GLOBAL_TABLE); + Assertions.assertNotNull(sql); + sql = DM_LOCK_STORE.getBatchDeleteLockSqlByBranchId(BRANCH_TABLE); + Assertions.assertNotNull(sql); + + // Get batch delete lock sql string. + sql = DM_LOCK_STORE.getBatchDeleteLockSqlByXid(GLOBAL_TABLE); + Assertions.assertEquals(EXPECT_BATCH_GLOBAL_DELETE_LOCK_BY_BRANCHS_SQL,sql); + sql = DM_LOCK_STORE.getBatchDeleteLockSqlByXid(BRANCH_TABLE); + Assertions.assertEquals(EXPECT_BATCH_BRANCH_DELETE_LOCK_BY_BRANCHS_SQL,sql); + + // Get query lock sql string. + sql = DM_LOCK_STORE.getQueryLockSql(GLOBAL_TABLE); + Assertions.assertNotNull(sql); + sql = DM_LOCK_STORE.getQueryLockSql(BRANCH_TABLE); + Assertions.assertNotNull(sql); + + // Get check lock sql string. + sql = DM_LOCK_STORE.getCheckLockableSql(GLOBAL_TABLE, 3); + Assertions.assertEquals(EXPECT_CHECK_GLOBAL_LOCKABLE_SQL,sql); + sql = DM_LOCK_STORE.getCheckLockableSql(BRANCH_TABLE, 3); + Assertions.assertEquals(EXPECT_CHECK_BRANCH_LOCKABLE_SQL,sql); + } } diff --git a/core/src/test/java/io/seata/core/store/db/sql/log/LogStoreSqlsFactoryTest.java b/core/src/test/java/io/seata/core/store/db/sql/log/LogStoreSqlsFactoryTest.java index 83e3942eb29..b895f2e59dd 100644 --- a/core/src/test/java/io/seata/core/store/db/sql/log/LogStoreSqlsFactoryTest.java +++ b/core/src/test/java/io/seata/core/store/db/sql/log/LogStoreSqlsFactoryTest.java @@ -33,6 +33,8 @@ public class LogStoreSqlsFactoryTest { private static LogStoreSqls oceanbase = LogStoreSqlsFactory.getLogStoreSqls("oceanbase"); + private static LogStoreSqls dmLog = LogStoreSqlsFactory.getLogStoreSqls("dm"); + private static String globalTable = "global_table"; private static String branchTable = "branch_table"; @@ -211,4 +213,38 @@ public void oceanbaseLogTest() { sql = oceanbase.getQueryBranchMax(branchTable); Assertions.assertNotNull(sql); } + + @Test + public void dmLogTest() { + String sql = dmLog.getInsertGlobalTransactionSQL(globalTable); + Assertions.assertNotNull(sql); + sql = dmLog.getUpdateGlobalTransactionStatusSQL(globalTable); + Assertions.assertNotNull(sql); + sql = dmLog.getDeleteGlobalTransactionSQL(globalTable); + Assertions.assertNotNull(sql); + sql = dmLog.getQueryGlobalTransactionSQL(globalTable); + Assertions.assertNotNull(sql); + sql = dmLog.getQueryGlobalTransactionSQLByTransactionId(globalTable); + Assertions.assertNotNull(sql); + sql = dmLog.getQueryGlobalTransactionSQLByStatus(globalTable, "1"); + Assertions.assertNotNull(sql); + sql = dmLog.getQueryGlobalTransactionForRecoverySQL(globalTable); + Assertions.assertNotNull(sql); + sql = dmLog.getInsertBranchTransactionSQL(branchTable); + Assertions.assertNotNull(sql); + sql = dmLog.getUpdateBranchTransactionStatusSQL(branchTable); + Assertions.assertNotNull(sql); + sql = dmLog.getDeleteBranchTransactionByBranchIdSQL(branchTable); + Assertions.assertNotNull(sql); + sql = dmLog.getDeleteBranchTransactionByXId(branchTable); + Assertions.assertNotNull(sql); + sql = dmLog.getQueryBranchTransaction(branchTable); + Assertions.assertNotNull(sql); + sql = dmLog.getQueryBranchTransaction(branchTable, "1"); + Assertions.assertNotNull(sql); + sql = dmLog.getQueryGlobalMax(globalTable); + Assertions.assertNotNull(sql); + sql = dmLog.getQueryBranchMax(branchTable); + Assertions.assertNotNull(sql); + } }