Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f7dbe3c

Browse files
lvhuichaoQIQI03
authored andcommitted
1. extract SqlBasedQueryExecutionContext and SqlBasedDatasourceConnectionConfig for sql data sources
2. enable disable preparedStatement for all sql data soureces
1 parent b98b146 commit f7dbe3c

File tree

26 files changed

+332
-632
lines changed

26 files changed

+332
-632
lines changed

deploy/docker/entrypoint.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ add_user() {
2727
echo "Starting with UID : $USER_ID"
2828
groupadd -g $GROUP_ID $GROUP_NAME || true
2929
useradd -u $USER_ID -g $GROUP_ID $USER_NAME || true
30-
chown -R $USER_ID:$GROUP_ID /openblocks /openblocks-stacks /etc/nginx /var /etc/redis /etc/supervisor
31-
chown $USER_ID:$GROUP_ID /run
30+
chown -R $USER_ID:$GROUP_ID /openblocks /openblocks-stacks /etc/nginx /var /etc/redis /run /etc/supervisor
3231
}
3332

3433
init_mongodb

server/openblocks-plugins/clickHousePlugin/src/main/java/com/openblocks/plugin/clickhouse/ClickHouseConnector.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,9 @@ public ClickHouseDatasourceConfig resolveConfig(Map<String, Object> configMap) {
6969
@Override
7070
public Set<String> validateConfig(ClickHouseDatasourceConfig connectionConfig) {
7171

72-
ClickHouseDatasourceConfig datasourceConfig = ClickHouseDatasourceConfig.from(connectionConfig);
73-
7472
Set<String> invalids = new HashSet<>();
7573

76-
String host = datasourceConfig.getHost();
74+
String host = connectionConfig.getHost();
7775
if (StringUtils.isBlank(host)) {
7876
invalids.add("HOST_EMPTY");
7977
}
@@ -86,7 +84,7 @@ public Set<String> validateConfig(ClickHouseDatasourceConfig connectionConfig) {
8684
invalids.add("INVALID_HOST");
8785
}
8886

89-
if (StringUtils.isBlank(datasourceConfig.getDatabase())) {
87+
if (StringUtils.isBlank(connectionConfig.getDatabase())) {
9088
invalids.add("DATABASE_NAME_EMPTY");
9189
}
9290

server/openblocks-plugins/clickHousePlugin/src/main/java/com/openblocks/plugin/clickhouse/ClickHouseQueryExecutor.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838

3939
import com.openblocks.plugin.clickhouse.model.ClickHouseDatasourceConfig;
4040
import com.openblocks.plugin.clickhouse.model.ClickHouseQueryConfig;
41-
import com.openblocks.plugin.clickhouse.model.ClickHouseQueryExecutionContext;
4241
import com.openblocks.plugin.clickhouse.utils.ClickHouseStructureParser;
4342
import com.openblocks.sdk.config.dynamic.ConfigCenter;
4443
import com.openblocks.sdk.exception.InvalidHikariDatasourceException;
@@ -49,6 +48,7 @@
4948
import com.openblocks.sdk.models.QueryExecutionResult;
5049
import com.openblocks.sdk.plugin.common.QueryExecutor;
5150
import com.openblocks.sdk.plugin.common.SqlQueryUtils;
51+
import com.openblocks.sdk.plugin.common.sql.SqlBasedQueryExecutionContext;
5252
import com.openblocks.sdk.query.QueryVisitorContext;
5353
import com.zaxxer.hikari.HikariDataSource;
5454

@@ -57,7 +57,7 @@
5757

5858
@Slf4j
5959
@Extension
60-
public class ClickHouseQueryExecutor implements QueryExecutor<ClickHouseDatasourceConfig, HikariDataSource, ClickHouseQueryExecutionContext> {
60+
public class ClickHouseQueryExecutor implements QueryExecutor<ClickHouseDatasourceConfig, HikariDataSource, SqlBasedQueryExecutionContext> {
6161

6262
private final Supplier<Duration> getStructureTimeout;
6363

@@ -67,7 +67,7 @@ public ClickHouseQueryExecutor(ConfigCenter configCenter) {
6767
}
6868

6969
@Override
70-
public ClickHouseQueryExecutionContext buildQueryExecutionContext(ClickHouseDatasourceConfig datasourceConfig,
70+
public SqlBasedQueryExecutionContext buildQueryExecutionContext(ClickHouseDatasourceConfig datasourceConfig,
7171
Map<String, Object> queryConfigMap,
7272
Map<String, Object> requestParams, QueryVisitorContext queryVisitorContext) {
7373

@@ -82,24 +82,22 @@ public ClickHouseQueryExecutionContext buildQueryExecutionContext(ClickHouseData
8282
throw new PluginException(QUERY_ARGUMENT_ERROR, "CLICKHOUSE_PS_ERROR");
8383
}
8484

85-
return ClickHouseQueryExecutionContext.builder()
85+
return SqlBasedQueryExecutionContext.builder()
8686
.query(query)
87-
.timeoutInMillis(queryConfig.getTimeout())
8887
.requestParams(requestParams)
89-
.disablePreparedStatement(queryConfig.isDisablePreparedStatement())
88+
.disablePreparedStatement(datasourceConfig.isEnableTurnOffPreparedStatement() &&
89+
queryConfig.isDisablePreparedStatement())
9090
.build();
9191
}
9292

9393
@Override
94-
public Mono<QueryExecutionResult> executeQuery(HikariDataSource hikariDataSource, ClickHouseQueryExecutionContext queryExecutionContext) {
94+
public Mono<QueryExecutionResult> executeQuery(HikariDataSource hikariDataSource, SqlBasedQueryExecutionContext queryExecutionContext) {
9595

9696
String query = queryExecutionContext.getQuery();
9797
Map<String, Object> requestParams = queryExecutionContext.getRequestParams();
98-
int queryTimeoutMs = queryExecutionContext.getTimeoutInMillis();
9998
boolean preparedStatement = !queryExecutionContext.isDisablePreparedStatement();
10099

101100
return Mono.fromSupplier(() -> executeQuery0(hikariDataSource, query, requestParams, preparedStatement))
102-
.timeout(Duration.ofMillis(queryTimeoutMs))
103101
.onErrorMap(e -> {
104102
if (e instanceof PluginException) {
105103
return e;
@@ -118,7 +116,6 @@ public Mono<DatasourceStructure> getStructure(HikariDataSource hikariDataSource)
118116
Map<String, Table> tablesByName = new LinkedHashMap<>();
119117
try (Statement statement = connection.createStatement()) {
120118
ClickHouseStructureParser.parseTableAndColumns(tablesByName, statement);
121-
// ClickHouseStructureParser.parseTableKeys(tablesByName, statement);
122119
} catch (SQLException throwable) {
123120
throw new PluginException(DATASOURCE_GET_STRUCTURE_ERROR, "DATASOURCE_GET_STRUCTURE_ERROR",
124121
throwable.getMessage());
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,39 @@
11
package com.openblocks.plugin.clickhouse.model;
22

3-
import static com.openblocks.sdk.exception.BizError.INVALID_DATASOURCE_CONFIG_TYPE;
43
import static com.openblocks.sdk.exception.PluginCommonError.DATASOURCE_ARGUMENT_ERROR;
5-
import static com.openblocks.sdk.util.ExceptionUtils.ofException;
64
import static com.openblocks.sdk.util.ExceptionUtils.ofPluginException;
75
import static com.openblocks.sdk.util.JsonUtils.fromJson;
86
import static com.openblocks.sdk.util.JsonUtils.toJson;
9-
import static org.apache.commons.lang3.ObjectUtils.firstNonNull;
107

118
import java.util.Map;
12-
import java.util.function.Function;
139

14-
import org.apache.commons.lang3.StringUtils;
15-
16-
import com.fasterxml.jackson.annotation.JsonCreator;
17-
import com.fasterxml.jackson.annotation.JsonView;
18-
import com.openblocks.sdk.config.SerializeConfig.JsonViews;
1910
import com.openblocks.sdk.models.DatasourceConnectionConfig;
11+
import com.openblocks.sdk.plugin.common.sql.SqlBasedDatasourceConnectionConfig;
2012

2113
import lombok.Builder;
22-
import lombok.Getter;
2314
import lombok.extern.slf4j.Slf4j;
2415

2516
@Slf4j
26-
@Getter
27-
@Builder
28-
public class ClickHouseDatasourceConfig implements DatasourceConnectionConfig {
29-
30-
private static final long DEFAULT_PORT = 3306L;
31-
32-
private final String database;
33-
private final String username;
17+
public class ClickHouseDatasourceConfig extends SqlBasedDatasourceConnectionConfig {
3418

35-
@JsonView(JsonViews.Internal.class)
36-
private String password;
19+
private static final long DEFAULT_PORT = 8123L;
3720

38-
private final String host;
39-
private final Long port;
40-
private final boolean usingSsl;
41-
42-
private final boolean isReadonly;
21+
@Builder
22+
protected ClickHouseDatasourceConfig(String database, String username, String password, String host, Long port, boolean usingSsl,
23+
String serverTimezone, boolean isReadonly, boolean enableTurnOffPreparedStatement) {
24+
super(database, username, password, host, port, usingSsl, serverTimezone, isReadonly, enableTurnOffPreparedStatement);
25+
}
4326

44-
private final boolean enableTurnOffPreparedStatement;
27+
@Override
28+
protected long defaultPort() {
29+
return DEFAULT_PORT;
30+
}
4531

46-
@JsonCreator
47-
private ClickHouseDatasourceConfig(String database, String username, String password, String host, Long port,
48-
boolean usingSsl, boolean isReadonly,
49-
boolean enableTurnOffPreparedStatement) {
50-
this.database = database;
51-
this.username = username;
52-
this.password = password;
53-
this.usingSsl = usingSsl;
54-
this.host = host;
55-
this.port = port;
56-
this.isReadonly = isReadonly;
57-
this.enableTurnOffPreparedStatement = enableTurnOffPreparedStatement;
32+
@Override
33+
protected DatasourceConnectionConfig createMergedConnectionConfig(String database, String username, String password, String host, long port,
34+
boolean usingSsl, String serverTimezone, boolean readonly, boolean enableTurnOffPreparedStatement) {
35+
return new ClickHouseDatasourceConfig(database, username, password, host, port, usingSsl, serverTimezone, readonly,
36+
enableTurnOffPreparedStatement);
5837
}
5938

6039
public static ClickHouseDatasourceConfig buildFrom(Map<String, Object> requestMap) {
@@ -65,72 +44,5 @@ public static ClickHouseDatasourceConfig buildFrom(Map<String, Object> requestMa
6544
return result;
6645
}
6746

68-
public static ClickHouseDatasourceConfig from(DatasourceConnectionConfig datasourceConfig) {
69-
if (datasourceConfig instanceof ClickHouseDatasourceConfig config) {
70-
return config;
71-
}
72-
throw ofPluginException(DATASOURCE_ARGUMENT_ERROR, "INVALID_CLICKHOUSE_CONFIG");
73-
}
74-
75-
public String getDatabase() {
76-
return StringUtils.trimToEmpty(database);
77-
}
78-
79-
public long getPort() {
80-
return port == null ? DEFAULT_PORT : port;
81-
}
82-
83-
public String getHost() {
84-
return StringUtils.trimToEmpty(host);
85-
}
86-
87-
public String getUsername() {
88-
return StringUtils.trimToEmpty(username);
89-
}
90-
91-
public boolean isReadonly() {
92-
return isReadonly;
93-
}
9447

95-
@Override
96-
public DatasourceConnectionConfig mergeWithUpdatedConfig(DatasourceConnectionConfig updatedConfig) {
97-
if (!(updatedConfig instanceof ClickHouseDatasourceConfig updatedMysqlConfig)) {
98-
throw ofException(INVALID_DATASOURCE_CONFIG_TYPE, "INVALID_DATASOURCE_CONFIG_TYPE", updatedConfig.getClass().getSimpleName());
99-
}
100-
101-
return new ClickHouseDatasourceConfig(updatedMysqlConfig.getDatabase(),
102-
updatedMysqlConfig.getUsername(),
103-
firstNonNull(updatedMysqlConfig.getPassword(), getPassword()),
104-
updatedMysqlConfig.getHost(),
105-
updatedMysqlConfig.getPort(),
106-
updatedMysqlConfig.isUsingSsl(),
107-
updatedMysqlConfig.isReadonly(),
108-
updatedMysqlConfig.isEnableTurnOffPreparedStatement());
109-
}
110-
111-
public boolean isEnableTurnOffPreparedStatement() {
112-
return enableTurnOffPreparedStatement;
113-
}
114-
115-
@Override
116-
public DatasourceConnectionConfig doEncrypt(Function<String, String> encryptFunc) {
117-
try {
118-
password = encryptFunc.apply(password);
119-
return this;
120-
} catch (Exception e) {
121-
log.error("fail to encrypt password: {}", password, e);
122-
return this;
123-
}
124-
}
125-
126-
@Override
127-
public DatasourceConnectionConfig doDecrypt(Function<String, String> decryptFunc) {
128-
try {
129-
password = decryptFunc.apply(password);
130-
return this;
131-
} catch (Exception e) {
132-
log.error("fail to encrypt password: {}", password, e);
133-
return this;
134-
}
135-
}
13648
}

server/openblocks-plugins/clickHousePlugin/src/main/java/com/openblocks/plugin/clickhouse/model/ClickHouseQueryConfig.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
@Getter
1717
public class ClickHouseQueryConfig {
1818

19-
private static final int DEFAULT_TIMEOUT = 8000;
20-
2119
private final String sql;
2220
private final boolean disablePreparedStatement;
2321
private final int timeout;
@@ -46,7 +44,4 @@ public String getSql() {
4644
return sql.trim();
4745
}
4846

49-
public int getTimeout() {
50-
return timeout == 0 ? DEFAULT_TIMEOUT : timeout;
51-
}
5247
}

server/openblocks-plugins/clickHousePlugin/src/main/java/com/openblocks/plugin/clickhouse/model/ClickHouseQueryExecutionContext.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

server/openblocks-plugins/mssqlPlugin/src/main/java/com/openblocks/plugin/mssql/MssqlQueryExecutor.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,8 @@
3333
import org.apache.commons.lang3.StringUtils;
3434
import org.pf4j.Extension;
3535

36-
import com.google.common.collect.ImmutableMap;
3736
import com.openblocks.plugin.mssql.model.MssqlDatasourceConfig;
3837
import com.openblocks.plugin.mssql.model.MssqlQueryConfig;
39-
import com.openblocks.plugin.mssql.model.MssqlQueryExecutionContext;
4038
import com.openblocks.plugin.mssql.util.MssqlResultParser;
4139
import com.openblocks.sdk.config.dynamic.ConfigCenter;
4240
import com.openblocks.sdk.exception.InvalidHikariDatasourceException;
@@ -47,6 +45,7 @@
4745
import com.openblocks.sdk.models.QueryExecutionResult;
4846
import com.openblocks.sdk.plugin.common.QueryExecutor;
4947
import com.openblocks.sdk.plugin.common.sql.ResultSetParser;
48+
import com.openblocks.sdk.plugin.common.sql.SqlBasedQueryExecutionContext;
5049
import com.openblocks.sdk.query.QueryVisitorContext;
5150
import com.zaxxer.hikari.HikariDataSource;
5251

@@ -55,7 +54,7 @@
5554

5655
@Slf4j
5756
@Extension
58-
public class MssqlQueryExecutor implements QueryExecutor<MssqlDatasourceConfig, HikariDataSource, MssqlQueryExecutionContext> {
57+
public class MssqlQueryExecutor implements QueryExecutor<MssqlDatasourceConfig, HikariDataSource, SqlBasedQueryExecutionContext> {
5958

6059
private final Supplier<Duration> getStructureTimeout;
6160

@@ -65,7 +64,7 @@ public MssqlQueryExecutor(ConfigCenter configCenter) {
6564
}
6665

6766
@Override
68-
public MssqlQueryExecutionContext buildQueryExecutionContext(MssqlDatasourceConfig datasourceConfig,
67+
public SqlBasedQueryExecutionContext buildQueryExecutionContext(MssqlDatasourceConfig datasourceConfig,
6968
Map<String, Object> queryConfig,
7069
Map<String, Object> requestParams, QueryVisitorContext queryVisitorContext) {
7170
MssqlQueryConfig mssqlQueryConfig = MssqlQueryConfig.from(queryConfig);
@@ -75,15 +74,16 @@ public MssqlQueryExecutionContext buildQueryExecutionContext(MssqlDatasourceConf
7574
throw new PluginException(QUERY_ARGUMENT_ERROR, "SQL_EMPTY");
7675
}
7776

78-
return MssqlQueryExecutionContext.builder()
77+
return SqlBasedQueryExecutionContext.builder()
7978
.query(query)
8079
.requestParams(requestParams)
81-
.disablePreparedStatement(mssqlQueryConfig.isDisablePreparedStatement())
80+
.disablePreparedStatement(datasourceConfig.isEnableTurnOffPreparedStatement() &&
81+
mssqlQueryConfig.isDisablePreparedStatement())
8282
.build();
8383
}
8484

8585
@Override
86-
public Mono<QueryExecutionResult> executeQuery(HikariDataSource hikariDataSource, MssqlQueryExecutionContext context) {
86+
public Mono<QueryExecutionResult> executeQuery(HikariDataSource hikariDataSource, SqlBasedQueryExecutionContext context) {
8787

8888
String query = context.getQuery();
8989
Map<String, Object> requestParams = context.getRequestParams();
@@ -178,7 +178,7 @@ private QueryExecutionResult parseExecuteResult(boolean preparedStatement, State
178178

179179
Object affectedRows = preparedStatement ? Math.max(preparedQuery.getUpdateCount(), 0) // might return -1 here
180180
: Math.max(statement.getUpdateCount(), 0);
181-
return QueryExecutionResult.success(ImmutableMap.of("affectedRows", affectedRows));
181+
return QueryExecutionResult.success(Map.of("affectedRows", affectedRows));
182182
}
183183

184184
private List<Map<String, Object>> parseDataRows(ResultSet resultSet, ResultSetMetaData metaData, int colCount) throws SQLException {

0 commit comments

Comments
 (0)