Skip to content

Commit 2e28a4c

Browse files
authored
Sap hanadb support,SAP HANA数据库适配支持 (#1958)
1 parent 07f6be5 commit 2e28a4c

File tree

7 files changed

+41
-1
lines changed

7 files changed

+41
-1
lines changed

common/src/main/java/com/tencent/supersonic/common/calcite/Configuration.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ public static SqlParser.Config getParserConfig(EngineType engineType) {
8080
.setQuoting(Quoting.SINGLE_QUOTE).setQuotedCasing(Casing.TO_UPPER)
8181
.setUnquotedCasing(Casing.TO_UPPER).setConformance(sqlDialect.getConformance())
8282
.setLex(Lex.BIG_QUERY);
83+
if (EngineType.HANADB.equals(engineType)) {
84+
parserConfig = parserConfig.setQuoting(Quoting.DOUBLE_QUOTE);
85+
}
8386
parserConfig = parserConfig.setQuotedCasing(Casing.UNCHANGED);
8487
parserConfig = parserConfig.setUnquotedCasing(Casing.UNCHANGED);
8588
return parserConfig.build();

common/src/main/java/com/tencent/supersonic/common/calcite/SqlDialectFactory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ public class SqlDialectFactory {
2121
.withDatabaseProduct(DatabaseProduct.BIG_QUERY).withLiteralQuoteString("'")
2222
.withLiteralEscapedQuoteString("''").withUnquotedCasing(Casing.UNCHANGED)
2323
.withQuotedCasing(Casing.UNCHANGED).withCaseSensitive(false);
24+
public static final Context HANADB_CONTEXT = SqlDialect.EMPTY_CONTEXT
25+
.withDatabaseProduct(DatabaseProduct.BIG_QUERY).withLiteralQuoteString("'")
26+
.withIdentifierQuoteString("\"").withLiteralEscapedQuoteString("''").withUnquotedCasing(Casing.UNCHANGED)
27+
.withQuotedCasing(Casing.UNCHANGED).withCaseSensitive(true);
2428
private static Map<EngineType, SemanticSqlDialect> sqlDialectMap;
2529

2630
static {
@@ -29,6 +33,7 @@ public class SqlDialectFactory {
2933
sqlDialectMap.put(EngineType.MYSQL, new SemanticSqlDialect(DEFAULT_CONTEXT));
3034
sqlDialectMap.put(EngineType.H2, new SemanticSqlDialect(DEFAULT_CONTEXT));
3135
sqlDialectMap.put(EngineType.POSTGRESQL, new SemanticSqlDialect(POSTGRESQL_CONTEXT));
36+
sqlDialectMap.put(EngineType.HANADB, new SemanticSqlDialect(HANADB_CONTEXT));
3237
}
3338

3439
public static SemanticSqlDialect getSqlDialect(EngineType engineType) {

common/src/main/java/com/tencent/supersonic/common/pojo/enums/EngineType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ public enum EngineType {
99
H2(5, "h2"),
1010
POSTGRESQL(6, "postgresql"),
1111
OTHER(7, "other"),
12-
DUCKDB(8, "duckdb");
12+
DUCKDB(8, "duckdb"),
13+
HANADB(9, "hanadb");
1314

1415
private Integer code;
1516

headless/core/src/main/java/com/tencent/supersonic/headless/core/adaptor/db/DbAdaptorFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class DbAdaptorFactory {
1717
dbAdaptorMap.put(EngineType.POSTGRESQL.getName(), new PostgresqlAdaptor());
1818
dbAdaptorMap.put(EngineType.OTHER.getName(), new DefaultDbAdaptor());
1919
dbAdaptorMap.put(EngineType.DUCKDB.getName(), new DuckdbAdaptor());
20+
dbAdaptorMap.put(EngineType.HANADB.getName(), new HanadbAdaptor());
2021
}
2122

2223
public static DbAdaptor getEngineAdaptor(String engineType) {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.tencent.supersonic.headless.core.adaptor.db;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
5+
@Slf4j
6+
public class HanadbAdaptor extends DefaultDbAdaptor {
7+
8+
@Override
9+
public String rewriteSql(String sql) {
10+
return sql.replaceAll("`", "\"");
11+
}
12+
13+
}

headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/DbParameterFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class DbParameterFactory {
1515
parametersBuilder.put(EngineType.CLICKHOUSE.getName(), new ClickHouseParametersBuilder());
1616
parametersBuilder.put(EngineType.MYSQL.getName(), new MysqlParametersBuilder());
1717
parametersBuilder.put(EngineType.POSTGRESQL.getName(), new PostgresqlParametersBuilder());
18+
parametersBuilder.put(EngineType.HANADB.getName(), new HanadbParametersBuilder());
1819
parametersBuilder.put(EngineType.OTHER.getName(), new OtherParametersBuilder());
1920
}
2021

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.tencent.supersonic.headless.server.pojo;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.stereotype.Service;
5+
6+
import java.util.List;
7+
8+
@Service
9+
@Slf4j
10+
public class HanadbParametersBuilder extends DefaultParametersBuilder {
11+
12+
@Override
13+
public List<DatabaseParameter> build() {
14+
return super.build();
15+
}
16+
}

0 commit comments

Comments
 (0)