Skip to content

Commit 849df38

Browse files
committed
Refactor JDBC adapter related code (#2914)
1 parent 2d781e1 commit 849df38

File tree

12 files changed

+44
-174
lines changed

12 files changed

+44
-174
lines changed

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcSchemaLoaderImportIntegrationTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ public class JdbcSchemaLoaderImportIntegrationTest extends SchemaLoaderImportInt
2727

2828
@Override
2929
protected Properties getProperties(String testName) {
30-
Properties properties = new Properties();
31-
properties.putAll(JdbcEnv.getProperties(testName));
30+
Properties properties = JdbcEnv.getProperties(testName);
3231
JdbcConfig config = new JdbcConfig(new DatabaseConfig(properties));
3332
rdbEngine = RdbEngineFactory.create(config);
3433
testUtils = new JdbcAdminImportTestUtils(properties);

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineDb2.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import com.scalar.db.io.TimeColumn;
1515
import com.scalar.db.io.TimestampColumn;
1616
import com.scalar.db.io.TimestampTZColumn;
17-
import com.scalar.db.storage.jdbc.query.MergeIntoQuery;
17+
import com.scalar.db.storage.jdbc.query.MergeQuery;
1818
import com.scalar.db.storage.jdbc.query.SelectQuery;
1919
import com.scalar.db.storage.jdbc.query.SelectWithLimitQuery;
2020
import com.scalar.db.storage.jdbc.query.UpsertQuery;
@@ -263,13 +263,13 @@ public String dropIndexSql(String schema, String table, String indexName) {
263263
}
264264

265265
@Override
266-
public SelectQuery buildSelectQuery(SelectQuery.Builder builder, int limit) {
266+
public SelectQuery buildSelectWithLimitQuery(SelectQuery.Builder builder, int limit) {
267267
return new SelectWithLimitQuery(builder, limit);
268268
}
269269

270270
@Override
271271
public UpsertQuery buildUpsertQuery(UpsertQuery.Builder builder) {
272-
return MergeIntoQuery.createForDb2(builder);
272+
return new MergeQuery(builder, "SYSIBM.DUAL");
273273
}
274274

275275
@Override

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineMysql.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public String enclose(String name) {
146146
}
147147

148148
@Override
149-
public SelectQuery buildSelectQuery(SelectQuery.Builder builder, int limit) {
149+
public SelectQuery buildSelectWithLimitQuery(SelectQuery.Builder builder, int limit) {
150150
return new SelectWithLimitQuery(builder, limit);
151151
}
152152

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineOracle.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.scalar.db.common.CoreError;
99
import com.scalar.db.exception.storage.ExecutionException;
1010
import com.scalar.db.io.DataType;
11-
import com.scalar.db.storage.jdbc.query.MergeIntoQuery;
11+
import com.scalar.db.storage.jdbc.query.MergeQuery;
1212
import com.scalar.db.storage.jdbc.query.SelectQuery;
1313
import com.scalar.db.storage.jdbc.query.SelectWithFetchFirstNRowsOnly;
1414
import com.scalar.db.storage.jdbc.query.UpsertQuery;
@@ -173,13 +173,13 @@ public String enclose(String name) {
173173
}
174174

175175
@Override
176-
public SelectQuery buildSelectQuery(SelectQuery.Builder builder, int limit) {
176+
public SelectQuery buildSelectWithLimitQuery(SelectQuery.Builder builder, int limit) {
177177
return new SelectWithFetchFirstNRowsOnly(builder, limit);
178178
}
179179

180180
@Override
181181
public UpsertQuery buildUpsertQuery(UpsertQuery.Builder builder) {
182-
return MergeIntoQuery.createForOracle(builder);
182+
return new MergeQuery(builder, "DUAL");
183183
}
184184

185185
@Override

core/src/main/java/com/scalar/db/storage/jdbc/RdbEnginePostgresql.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public String enclose(String name) {
179179
}
180180

181181
@Override
182-
public SelectQuery buildSelectQuery(SelectQuery.Builder builder, int limit) {
182+
public SelectQuery buildSelectWithLimitQuery(SelectQuery.Builder builder, int limit) {
183183
return new SelectWithLimitQuery(builder, limit);
184184
}
185185

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineSqlServer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,13 @@ public String enclose(String name) {
157157
}
158158

159159
@Override
160-
public SelectQuery buildSelectQuery(SelectQuery.Builder builder, int limit) {
160+
public SelectQuery buildSelectWithLimitQuery(SelectQuery.Builder builder, int limit) {
161161
return new SelectWithTop(builder, limit);
162162
}
163163

164164
@Override
165165
public UpsertQuery buildUpsertQuery(UpsertQuery.Builder builder) {
166-
return new MergeQuery(builder);
166+
return new MergeQuery(builder, null, true);
167167
}
168168

169169
@Override

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineSqlite.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ public String encloseFullTableName(String schema, String table) {
281281
}
282282

283283
@Override
284-
public SelectQuery buildSelectQuery(SelectQuery.Builder builder, int limit) {
284+
public SelectQuery buildSelectWithLimitQuery(SelectQuery.Builder builder, int limit) {
285285
return new SelectWithLimitQuery(builder, limit);
286286
}
287287

core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ default String encloseFullTableName(String schema, String table) {
129129
return enclose(schema) + "." + enclose(table);
130130
}
131131

132-
SelectQuery buildSelectQuery(SelectQuery.Builder builder, int limit);
132+
SelectQuery buildSelectWithLimitQuery(SelectQuery.Builder builder, int limit);
133133

134134
UpsertQuery buildUpsertQuery(UpsertQuery.Builder builder);
135135

core/src/main/java/com/scalar/db/storage/jdbc/query/MergeIntoQuery.java

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

core/src/main/java/com/scalar/db/storage/jdbc/query/MergeQuery.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.Map;
1313
import java.util.Optional;
1414
import java.util.stream.Collectors;
15+
import javax.annotation.Nullable;
1516
import javax.annotation.concurrent.ThreadSafe;
1617

1718
@ThreadSafe
@@ -24,16 +25,25 @@ public class MergeQuery implements UpsertQuery {
2425
private final Key partitionKey;
2526
private final Optional<Key> clusteringKey;
2627
private final Map<String, Column<?>> columns;
28+
@Nullable private final String dualTableName;
29+
private final boolean semicolonAdded;
2730

2831
@SuppressFBWarnings("EI_EXPOSE_REP2")
29-
public MergeQuery(Builder builder) {
32+
public MergeQuery(Builder builder, @Nullable String dualTableName) {
33+
this(builder, dualTableName, false);
34+
}
35+
36+
@SuppressFBWarnings("EI_EXPOSE_REP2")
37+
public MergeQuery(Builder builder, @Nullable String dualTableName, boolean semicolonAdded) {
3038
rdbEngine = builder.rdbEngine;
3139
schema = builder.schema;
3240
table = builder.table;
3341
tableMetadata = builder.tableMetadata;
3442
partitionKey = builder.partitionKey;
3543
clusteringKey = builder.clusteringKey;
3644
columns = builder.columns;
45+
this.dualTableName = dualTableName;
46+
this.semicolonAdded = semicolonAdded;
3747
}
3848

3949
@Override
@@ -47,20 +57,23 @@ public String sql() {
4757
columns.keySet().stream().map(rdbEngine::enclose).collect(Collectors.toList());
4858

4959
StringBuilder sql = new StringBuilder();
50-
sql.append("MERGE ")
60+
sql.append("MERGE INTO ")
5161
.append(rdbEngine.encloseFullTableName(schema, table))
5262
.append(" t1 USING (SELECT ")
53-
.append(makeUsingSelectSqlString(enclosedKeyNames))
54-
.append(") t2 ON (")
55-
.append(makePrimaryKeyConditionsSqlString(enclosedKeyNames))
56-
.append(")");
63+
.append(makeUsingSelectSqlString(enclosedKeyNames));
64+
if (dualTableName != null) {
65+
sql.append(" FROM ").append(dualTableName);
66+
}
67+
sql.append(") t2 ON (").append(makePrimaryKeyConditionsSqlString(enclosedKeyNames)).append(")");
5768
if (!columns.isEmpty()) {
5869
sql.append(" WHEN MATCHED THEN UPDATE SET ")
5970
.append(makeUpdateSetSqlString(enclosedValueNames));
6071
}
6172
sql.append(" WHEN NOT MATCHED THEN INSERT ")
62-
.append(makeInsertSqlString(enclosedKeyNames, enclosedValueNames))
63-
.append(";");
73+
.append(makeInsertSqlString(enclosedKeyNames, enclosedValueNames));
74+
if (semicolonAdded) {
75+
sql.append(";");
76+
}
6477
return sql.toString();
6578
}
6679

0 commit comments

Comments
 (0)