Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: support Dameng database #3672

Merged
merged 34 commits into from
Sep 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
5760740
update:添加对达梦数据库的支持
iquanzhan Apr 24, 2021
da56ca7
Merge branch 'develop' into develop
xingfudeshi Apr 30, 2021
8f216ff
Merge branch 'develop' into develop
funky-eyes May 11, 2021
4a158a2
update: support dm database. fix global transaction function. add som…
iquanzhan May 11, 2021
eb3eca8
update: fix file line
iquanzhan May 11, 2021
419bdc9
update: Optimize import format
iquanzhan May 11, 2021
33f941a
update: Optimize import format
iquanzhan May 11, 2021
c49429e
update: fix comments
iquanzhan May 13, 2021
38c1a31
Merge branch 'develop' into develop
caohdgege May 22, 2021
8aa02ea
Merge branch 'develop' into develop
iquanzhan May 30, 2021
41d1de1
merge develop
funky-eyes Aug 15, 2023
5fdc335
rollback
funky-eyes Aug 15, 2023
e26f50d
opt
funky-eyes Aug 15, 2023
a610ba1
opt
funky-eyes Aug 15, 2023
7551e34
bugfix
funky-eyes Aug 15, 2023
b1deebe
get metadata by schema, not username.
wangliang181230 Aug 15, 2023
74e5461
add initDmResourceId()
wangliang181230 Aug 15, 2023
5c8ed36
bugfix
funky-eyes Aug 17, 2023
c1ba6c2
server support DaMeng database.
wangliang181230 Aug 21, 2023
67ef59b
modify dm.sql
wangliang181230 Aug 21, 2023
8a3ef66
Merge branch 'develop' into develop
funky-eyes Aug 24, 2023
08b3a4e
PageUtil support Dameng
wangliang181230 Aug 28, 2023
d6dd858
Merge remote-tracking branch 'upstream/develop' into develop
wangliang181230 Aug 29, 2023
d424efc
Merge branch 'develop' into develop
funky-eyes Sep 6, 2023
ce21036
Merge branch 'develop' into develop
wangliang181230 Sep 13, 2023
0d37a11
add some test.
wangliang181230 Sep 13, 2023
622774f
druid NPE, fix it
wangliang181230 Sep 13, 2023
c9fb120
fix style
wangliang181230 Sep 13, 2023
07da926
optimize
wangliang181230 Sep 13, 2023
2261bea
fix style
wangliang181230 Sep 13, 2023
8449470
fix
wangliang181230 Sep 13, 2023
70d6d43
optimize
wangliang181230 Sep 13, 2023
15c85fe
小调整。
wangliang181230 Sep 15, 2023
c76f162
修复单元测试的问题。
wangliang181230 Sep 15, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions all/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -586,6 +586,11 @@
<artifactId>postgresql</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
Expand Down
2 changes: 2 additions & 0 deletions common/src/main/java/io/seata/common/util/PageUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -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");
Expand Down
2 changes: 2 additions & 0 deletions common/src/test/java/io/seata/common/util/PageUtilTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public void testPageSql() {
assertEquals(PageUtil.pageSql(sourceSql, "h2", 1, 5), mysqlTargetSql);
assertEquals(PageUtil.pageSql(sourceSql, "postgresql", 1, 5), mysqlTargetSql);
assertEquals(PageUtil.pageSql(sourceSql, "oceanbase", 1, 5), mysqlTargetSql);
assertEquals(PageUtil.pageSql(sourceSql, "dm", 1, 5), mysqlTargetSql);
assertEquals(PageUtil.pageSql(sourceSql, "oracle", 1, 5), oracleTargetSql);

assertThrows(NotSupportYetException.class, () -> PageUtil.pageSql(sourceSql, "xxx", 1, 5));
Expand All @@ -57,6 +58,7 @@ void testCountSql() {
assertEquals(PageUtil.countSql(sourceSql, "h2"), targetSql);
assertEquals(PageUtil.countSql(sourceSql, "postgresql"), targetSql);
assertEquals(PageUtil.countSql(sourceSql, "oceanbase"), targetSql);
assertEquals(PageUtil.countSql(sourceSql, "dm"), targetSql);
assertEquals(PageUtil.countSql(sourceSql, "oracle"), targetSql);

assertThrows(NotSupportYetException.class, () -> PageUtil.countSql(sourceSql, "xxx"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class DistributedLockSqlFactory {
/**
* get the lock store sql
*
* @param dbType the dbType, support mysql/oracle/h2/postgre/oceanbase, it's useless now, but maybe useful later
* @param dbType the dbType, support mysql/oracle/h2/postgre/oceanbase/dm, it's useless now, but maybe useful later
* @return lock store sql
*/
public static DistributedLockSql getDistributedLogStoreSql(String dbType) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright 1999-2019 Seata.io Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.seata.core.store.db.sql.lock;

import io.seata.common.loader.LoadLevel;

/**
* the database lock store DaMeng sql
*
* @author wang.liang
* @since 1.8.0
*/
@LoadLevel(name = "dm")
public class DmLockStoreSql extends MysqlLockStoreSql {
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public class LockStoreSqlFactory {
/**
* get the lock store sql
*
* @param dbType the dbType, support mysql/oracle/h2/postgre/oceanbase
* @param dbType the dbType, support mysql/oracle/h2/postgre/oceanbase/dm
* @return lock store sql
*/
public static LockStoreSql getLogStoreSql(String dbType) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright 1999-2019 Seata.io Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.seata.core.store.db.sql.log;

import io.seata.common.loader.LoadLevel;

/**
* Database log store DaMeng sql
*
* @author wang.liang
* @since 1.8.0
*/
@LoadLevel(name = "dm")
public class DmLogStoreSqls extends MysqlLogStoreSqls {
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ io.seata.core.store.db.sql.lock.MariadbLockStoreSql
io.seata.core.store.db.sql.lock.OracleLockStoreSql
io.seata.core.store.db.sql.lock.OceanbaseLockStoreSql
io.seata.core.store.db.sql.lock.PostgresqlLockStoreSql
io.seata.core.store.db.sql.lock.H2LockStoreSql
io.seata.core.store.db.sql.lock.H2LockStoreSql
io.seata.core.store.db.sql.lock.DmLockStoreSql
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ io.seata.core.store.db.sql.log.MariadbLogStoreSqls
io.seata.core.store.db.sql.log.OracleLogStoreSqls
io.seata.core.store.db.sql.log.PostgresqlLogStoreSqls
io.seata.core.store.db.sql.log.OceanbaseLogStoreSqls
io.seata.core.store.db.sql.log.H2LogStoreSqls
io.seata.core.store.db.sql.log.H2LogStoreSqls
io.seata.core.store.db.sql.log.DmLogStoreSqls
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,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";
Expand Down Expand Up @@ -331,4 +333,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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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);
}
}
6 changes: 6 additions & 0 deletions dependencies/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@
<postgresql.version>42.3.3</postgresql.version>
<h2.version>1.4.181</h2.version>
<mariadb.version>2.7.2</mariadb.version>
<dm.version>8.1.2.192</dm.version>
<!-- db connection pool -->
<druid.version>1.2.7</druid.version>
<commons-dbcp2.version>2.9.0</commons-dbcp2.version>
Expand Down Expand Up @@ -215,6 +216,11 @@
<artifactId>mariadb-java-client</artifactId>
<version>${mariadb.version}</version>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>${dm.version}</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-rpc-all</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ private void initResourceId() {
initOracleResourceId();
} else if (JdbcConstants.MYSQL.equals(dbType)) {
initMysqlResourceId();
} else if (JdbcConstants.DM.equals(dbType)) {
initDMResourceId();
} else {
initDefaultResourceId();
}
Expand Down Expand Up @@ -244,6 +246,36 @@ private void initPGResourceId() {
}
}

private void initDMResourceId() {
LOGGER.warn("support for the dameng database is currently an experimental feature ");
if (jdbcUrl.contains("?")) {
StringBuilder jdbcUrlBuilder = new StringBuilder();
jdbcUrlBuilder.append(jdbcUrl, 0, jdbcUrl.indexOf('?'));

StringBuilder paramsBuilder = new StringBuilder();
String paramUrl = jdbcUrl.substring(jdbcUrl.indexOf('?') + 1);
String[] urlParams = paramUrl.split("&");
for (String urlParam : urlParams) {
if (urlParam.contains("schema")) {
// remove the '"'
if (urlParam.contains("\"")) {
urlParam = urlParam.replaceAll("\"", "");
}
paramsBuilder.append(urlParam);
break;
}
}

if (paramsBuilder.length() > 0) {
jdbcUrlBuilder.append("?");
jdbcUrlBuilder.append(paramsBuilder);
}
resourceId = jdbcUrlBuilder.toString();
} else {
resourceId = jdbcUrl;
}
}

@Override
public BranchType getBranchType() {
return BranchType.AT;
Expand Down
Loading
Loading