This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 0df5247512e Revise #24536 (#24599)
0df5247512e is described below
commit 0df5247512e08c64ab33326ef5e7f2980f57ce7d
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Mar 14 21:15:16 2023 +0800
Revise #24536 (#24599)
---
.../proxy/backend/hbase/bean/HBaseOperation.java | 3 +
.../proxy/backend/hbase/context/HBaseContext.java | 2 +-
.../hbase/context/HBaseRegionWarmUpContext.java | 1 -
.../converter/HBaseDatabaseDeleteConverter.java | 79 ----------
.../converter/HBaseDatabaseSelectConverter.java | 162 ---------------------
.../converter/HBaseDatabaseUpdateConverter.java | 97 ------------
...Converter.java => HBaseOperationConverter.java} | 2 +-
...ry.java => HBaseOperationConverterFactory.java} | 40 +++--
...erterAdapter.java => HBaseRowKeyExtractor.java} | 30 +++-
.../HBaseDeleteOperation.java} | 15 +-
.../HBaseInsertOperation.java} | 13 +-
.../HBaseRegionReloadOperation.java} | 21 +--
.../HBaseSelectOperation.java} | 15 +-
.../HBaseUpdateOperation.java} | 15 +-
.../type/HBaseDeleteOperationConverter.java | 69 +++++++++
.../HBaseInsertOperationConverter.java} | 31 ++--
.../HBaseRegionReloadOperationConverter.java} | 33 +----
.../type/HBaseSelectOperationConverter.java | 134 +++++++++++++++++
.../type/HBaseUpdateOperationConverter.java | 85 +++++++++++
.../HBaseDatabaseBackendUpdateHandler.java | 13 +-
.../backend/hbase/result/HBaseQueryCallback.java | 1 -
.../query/HBaseDatabaseDescribeResultSet.java | 3 +-
.../result/query/HBaseDatabaseGetResultSet.java | 14 +-
.../result/query/HBaseDatabaseQueryResultSet.java | 2 +-
.../result/update/HBaseDatabaseDeleteUpdater.java | 17 +--
.../result/update/HBaseDatabaseInsertUpdater.java | 21 +--
.../result/update/HBaseDatabaseUpdateUpdater.java | 21 +--
.../hbase/result/update/HBaseDatabaseUpdater.java | 5 +-
.../result/update/HBaseRegionReloadUpdater.java | 21 +--
...eneousUtil.java => HBaseHeterogeneousUtil.java} | 25 ++--
...ava => HBaseOperationConverterFactoryTest.java} | 32 ++--
...pterTest.java => HBaseRowKeyExtractorTest.java} | 25 ++--
.../HBaseDeleteOperationConverterTest.java} | 25 ++--
.../HBaseUpdateOperationConverterTest.java} | 31 ++--
.../hbase/result/HBaseSupportedSQLStatement.java | 2 +-
.../AbstractHBaseDatabaseQueryResultSetTest.java | 42 ++----
.../query/HBaseDatabaseDescribeResultSetTest.java | 28 ++--
.../query/HBaseDatabaseListResultSetTest.java | 15 +-
.../HBaseDatabaseBackendUpdateHandlerTest.java | 8 +-
...ilTest.java => HBaseHeterogeneousUtilTest.java} | 9 +-
40 files changed, 565 insertions(+), 642 deletions(-)
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/bean/HBaseOperation.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/bean/HBaseOperation.java
index c56d98b81c1..11809d7b25c 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/bean/HBaseOperation.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/bean/HBaseOperation.java
@@ -21,6 +21,9 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.hadoop.hbase.client.Operation;
+/**
+ * HBase operation.
+ */
@RequiredArgsConstructor
@Getter
public final class HBaseOperation {
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseContext.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseContext.java
index db7be27505c..065ad11a7fe 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseContext.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseContext.java
@@ -71,7 +71,7 @@ public final class HBaseContext implements AutoCloseable {
/**
* Get instance of HBase context.
*
- * @return instance of HBase context
+ * @return got instance
*/
public static HBaseContext getInstance() {
return INSTANCE;
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseRegionWarmUpContext.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseRegionWarmUpContext.java
index 8e4deba5a5e..e36b3608c90 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseRegionWarmUpContext.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/context/HBaseRegionWarmUpContext.java
@@ -152,5 +152,4 @@ public final class HBaseRegionWarmUpContext {
tableCount.set(0);
executeCount.set(0);
}
-
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverter.java
deleted file mode 100644
index b95d3bc697b..00000000000
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.shardingsphere.proxy.backend.hbase.converter;
-
-import com.google.common.base.Preconditions;
-import lombok.RequiredArgsConstructor;
-import org.apache.hadoop.hbase.client.Delete;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementContext;
-import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * HBase database delete converter.
- */
-@RequiredArgsConstructor
-public final class HBaseDatabaseDeleteConverter extends
HBaseDatabaseRowKeysConverterAdapter implements HBaseDatabaseConverter {
-
- private final SQLStatementContext<?> sqlStatementContext;
-
- /**
- * Convert SQL statement to HBase operation.
- *
- * @return HBase operation
- */
- @Override
- public HBaseOperation convert() {
- DeleteStatementContext context = (DeleteStatementContext)
sqlStatementContext;
- if (context.getWhereSegments().stream().findFirst().isPresent() &&
context.getWhereSegments().stream().findFirst().get().getExpr() instanceof
InExpression) {
- return createDeleteOperationByUseIn(context);
- } else {
- return createDeleteOperationByOneRowKey(context);
- }
- }
-
- private HBaseOperation createDeleteOperationByOneRowKey(final
DeleteStatementContext context) {
- String tableName =
context.getTablesContext().getTableNames().iterator().next();
-
Preconditions.checkArgument(context.getWhereSegments().stream().findFirst().isPresent(),
"where segment is absent");
- String rowKey =
getRowKeyFromWhereSegment(context.getWhereSegments().stream().findFirst().get().getExpr());
- return new HBaseOperation(tableName, getDeleteByRowKey(rowKey));
- }
-
- private HBaseOperation createDeleteOperationByUseIn(final
DeleteStatementContext context) {
- String tableName =
context.getTablesContext().getTableNames().iterator().next();
- List<String> rowKeys = getRowKeysFromWhereSegmentByIn((InExpression)
context.getWhereSegments().stream().findFirst().get().getExpr());
- List<Delete> deletes =
rowKeys.stream().map(this::getDeleteByRowKey).collect(Collectors.toList());
- return new HBaseOperation(tableName, new
HBaseDeleteOperationAdapter(tableName, deletes));
- }
-
- private Delete getDeleteByRowKey(final String rowKey) {
- return new Delete(Bytes.toBytes(rowKey));
- }
-
- private String getRowKeyFromWhereSegment(final ExpressionSegment
expressionSegment) {
- BinaryOperationExpression expression = (BinaryOperationExpression)
expressionSegment;
- return String.valueOf(((LiteralExpressionSegment)
expression.getRight()).getLiterals());
- }
-}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseSelectConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseSelectConverter.java
deleted file mode 100644
index da2f2bc41e8..00000000000
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseSelectConverter.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.shardingsphere.proxy.backend.hbase.converter;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.hadoop.hbase.client.Get;
-import org.apache.hadoop.hbase.client.Query;
-import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import org.apache.shardingsphere.proxy.backend.hbase.util.HeterogeneousUtil;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.PaginationValueSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.NumberLiteralLimitValueSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
-import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-/**
- * HBase database select converter.
- */
-@RequiredArgsConstructor
-@Slf4j
-public final class HBaseDatabaseSelectConverter extends
HBaseDatabaseRowKeysConverterAdapter implements HBaseDatabaseConverter {
-
- private final SQLStatementContext<?> sqlStatementContext;
-
- /**
- * Convert SQL statement to HBase operation.
- *
- * @return HBase operation
- */
- @Override
- public HBaseOperation convert() {
- SelectStatementContext context = (SelectStatementContext)
sqlStatementContext;
- if (isUseGetRequest(context)) {
- return createGetRequest(context);
- } else {
- return createScanRequest(context);
- }
- }
-
- private boolean isUseGetRequest(final SelectStatementContext context) {
- return context.getWhereSegments().stream().findFirst().isPresent()
- &&
(context.getWhereSegments().stream().findFirst().get().getExpr() instanceof
BinaryOperationExpression
- ||
context.getWhereSegments().stream().findFirst().get().getExpr() instanceof
InExpression);
- }
-
- private List<String> getRowKeyFromWhereSegment(final ExpressionSegment
expressionSegment) {
- if (expressionSegment instanceof InExpression) {
- InExpression expression = (InExpression) expressionSegment;
- return getRowKeysFromWhereSegmentByIn(expression);
- } else {
- BinaryOperationExpression expression = (BinaryOperationExpression)
expressionSegment;
- return new
ArrayList<>(Collections.singleton(String.valueOf(((LiteralExpressionSegment)
expression.getRight()).getLiterals())));
- }
- }
-
- private HBaseOperation createGetRequest(final SelectStatementContext
context) {
- ExpressionSegment expression =
context.getWhereSegments().stream().findFirst().get().getExpr();
- List<Get> gets =
getRowKeyFromWhereSegment(expression).stream().map(this::getGetByRowKey).collect(Collectors.toList());
- if (!HeterogeneousUtil.isUseShorthandProjection(context)) {
- for (Get each : gets) {
- decorateWithColumns(each, context);
- }
- }
- if (expression instanceof InExpression) {
- return new
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(),
- new
HBaseSelectOperationAdapter(context.getTablesContext().getTableNames().iterator().next(),
gets));
- }
- return new
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(),
gets.get(0));
- }
-
- private Get getGetByRowKey(final String rowKey) {
- return new Get(Bytes.toBytes(rowKey));
- }
-
- private void decorateWithColumns(final Query query, final
SelectStatementContext statementContext) {
- Collection<ColumnSegment> columns =
statementContext.getColumnSegments();
-
- if (query instanceof Get) {
- columns.forEach(each -> ((Get)
query).addColumn(Bytes.toBytes("i"), Bytes.toBytes(String.valueOf(each))));
- } else {
- columns.forEach(each -> ((Scan)
query).addColumn(Bytes.toBytes("i"), Bytes.toBytes(String.valueOf(each))));
- }
- }
-
- private void decoratedWithLimit(final Scan scan, final
SelectStatementContext statementContext) {
- MySQLSelectStatement selectStatement = (MySQLSelectStatement)
statementContext.getSqlStatement();
- if (selectStatement.getLimit().isPresent()) {
- Optional<PaginationValueSegment> paginationValueSegment =
selectStatement.getLimit().get().getRowCount();
- paginationValueSegment.ifPresent(valueSegment ->
scan.setLimit((int) ((NumberLiteralLimitValueSegment)
valueSegment).getValue()));
- }
- }
-
- private HBaseOperation createScanRequest(final SelectStatementContext
context) {
- Scan scan = new Scan();
- Optional<WhereSegment> whereSegment =
context.getWhereSegments().stream().findFirst();
- if (whereSegment.isPresent() && whereSegment.get().getExpr()
instanceof BetweenExpression) {
- decorateScanOperationWithBetweenExpression(scan,
whereSegment.get().getExpr(), false);
- }
- if (!HeterogeneousUtil.isUseShorthandProjection(context)) {
- decorateWithColumns(scan, context);
- }
- decoratedWithLimit(scan, context);
- return new
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(),
scan);
- }
-
- private void decorateScanOperationWithBetweenExpression(final Scan scan,
final ExpressionSegment expressionSegment, final boolean reversed) {
- BetweenExpression betweenExpression = (BetweenExpression)
expressionSegment;
- LiteralExpressionSegment betweenExpr = (LiteralExpressionSegment)
betweenExpression.getBetweenExpr();
- LiteralExpressionSegment andExpr = (LiteralExpressionSegment)
betweenExpression.getAndExpr();
- String startRowKey = betweenExpr.getLiterals().toString();
- String stopRowKey = andExpr.getLiterals().toString();
- if (null != startRowKey && null != stopRowKey) {
- if (reversed) {
- scan.withStopRow(calBytes(startRowKey, 0), true);
- // refer:
<https://github.com/apache/hbase/blob/master/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupSystemTable.java#L1853>
- scan.withStartRow(calBytes(stopRowKey + "~", 0), true);
- } else {
- scan.withStartRow(calBytes(startRowKey, 0), true);
- scan.withStopRow(calBytes(stopRowKey + "~", 0), true);
- }
- }
- }
-
- private byte[] calBytes(final String row, final int step) {
- byte[] rowByte = Bytes.toBytes(row);
- byte[] result = Arrays.copyOf(rowByte, rowByte.length);
- result[result.length - 1] = (byte) (result[result.length - 1] + step);
- return result;
- }
-}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverter.java
deleted file mode 100644
index 15009668e6a..00000000000
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverter.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.shardingsphere.proxy.backend.hbase.converter;
-
-import com.google.common.base.Preconditions;
-import lombok.RequiredArgsConstructor;
-import org.apache.hadoop.hbase.client.Put;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
-import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * HBase database update converter.
- */
-@RequiredArgsConstructor
-public final class HBaseDatabaseUpdateConverter extends
HBaseDatabaseRowKeysConverterAdapter implements HBaseDatabaseConverter {
-
- private final SQLStatementContext<?> sqlStatementContext;
-
- /**
- * Convert SQL statement to HBase operation.
- *
- * @return HBase operation
- */
- @Override
- public HBaseOperation convert() {
- UpdateStatementContext context = (UpdateStatementContext)
sqlStatementContext;
-
Preconditions.checkArgument(context.getWhereSegments().stream().findFirst().isPresent(),
"Where segment is not present");
- if (context.getWhereSegments().stream().findFirst().get().getExpr()
instanceof InExpression) {
- return createHBasePutsOperation(context);
- }
- return new
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(),
createHBaseRequest(context));
- }
-
- private HBaseOperation createHBasePutsOperation(final
UpdateStatementContext context) {
- List<String> rowKeys = getRowKeysFromWhereSegmentByIn((InExpression)
context.getWhereSegments().stream().findFirst().get().getExpr());
- List<Put> puts =
rowKeys.stream().map(this::getPutByRowKey).collect(Collectors.toList());
- for (Put put : puts) {
- addPutColumn(context, put);
- }
- return new
HBaseOperation(context.getTablesContext().getTableNames().iterator().next(),
- new
HBaseUpdateOperationAdapter(context.getTablesContext().getTableNames().iterator().next(),
puts));
- }
-
- private Put getPutByRowKey(final String rowKey) {
- return new Put(Bytes.toBytes(rowKey));
- }
-
- private Put createHBaseRequest(final UpdateStatementContext context) {
- String rowKey =
getRowKeyFromWhereSegment(context.getWhereSegments().stream().findFirst().get().getExpr());
- Put result = getPutByRowKey(rowKey);
- addPutColumn(context, result);
- return result;
- }
-
- private void addPutColumn(final UpdateStatementContext context, final Put
put) {
- for (AssignmentSegment segment : getAssignmentSegments(context)) {
- String column =
segment.getColumns().iterator().next().getIdentifier().getValue();
- LiteralExpressionSegment literalExpressionSegment =
(LiteralExpressionSegment) segment.getValue();
- String value =
String.valueOf(literalExpressionSegment.getLiterals());
- put.addColumn(Bytes.toBytes("i"), Bytes.toBytes(column),
Bytes.toBytes(value));
- }
- }
-
- private Collection<AssignmentSegment> getAssignmentSegments(final
UpdateStatementContext context) {
- return context.getSqlStatement().getSetAssignment().getAssignments();
- }
-
- private String getRowKeyFromWhereSegment(final ExpressionSegment
expressionSegment) {
- BinaryOperationExpression expression = (BinaryOperationExpression)
expressionSegment;
- return String.valueOf(((LiteralExpressionSegment)
expression.getRight()).getLiterals());
- }
-}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverter.java
similarity index 96%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverter.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverter.java
index 8d86e260cbb..c2a42a4ba62 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverter.java
@@ -22,7 +22,7 @@ import
org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
/**
* Convert SQL statement to HBase operation.
*/
-public interface HBaseDatabaseConverter {
+public interface HBaseOperationConverter {
/**
* Convert SQL statement to HBase operation.
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactory.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactory.java
similarity index 52%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactory.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactory.java
index 4094b02fd56..c9bbbf947fc 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactory.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactory.java
@@ -25,33 +25,41 @@ import
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementConte
import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseDeleteOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseInsertOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseSelectOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseUpdateOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseRegionReloadOperationConverter;
import
org.apache.shardingsphere.proxy.backend.hbase.exception.HBaseOperationException;
/**
- * HBase database converter factory.
+ * HBase operation converter factory.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class HBaseDatabaseConverterFactory {
+public final class HBaseOperationConverterFactory {
/**
- * Create new instance of HBase database converter.
+ * Create new instance of HBase operation converter.
*
- * @param sqlStatementContext sql statement context
+ * @param sqlStatementContext SQL statement context
* @return instance of converter
*/
- public static HBaseDatabaseConverter newInstance(final
SQLStatementContext<?> sqlStatementContext) {
+ public static HBaseOperationConverter newInstance(final
SQLStatementContext<?> sqlStatementContext) {
if (sqlStatementContext instanceof SelectStatementContext) {
- return new HBaseDatabaseSelectConverter(sqlStatementContext);
- } else if (sqlStatementContext instanceof InsertStatementContext) {
- return new HBaseDatabaseInsertConverter(sqlStatementContext);
- } else if (sqlStatementContext instanceof DeleteStatementContext) {
- return new HBaseDatabaseDeleteConverter(sqlStatementContext);
- } else if (sqlStatementContext instanceof UpdateStatementContext) {
- return new HBaseDatabaseUpdateConverter(sqlStatementContext);
- } else if (sqlStatementContext instanceof FlushStatementContext) {
- return new HBaseRegionReloadConverter(sqlStatementContext);
- } else {
- throw new HBaseOperationException("Can't found converter");
+ return new HBaseSelectOperationConverter(sqlStatementContext);
}
+ if (sqlStatementContext instanceof InsertStatementContext) {
+ return new HBaseInsertOperationConverter(sqlStatementContext);
+ }
+ if (sqlStatementContext instanceof DeleteStatementContext) {
+ return new HBaseDeleteOperationConverter(sqlStatementContext);
+ }
+ if (sqlStatementContext instanceof UpdateStatementContext) {
+ return new HBaseUpdateOperationConverter(sqlStatementContext);
+ }
+ if (sqlStatementContext instanceof FlushStatementContext) {
+ return new
HBaseRegionReloadOperationConverter(sqlStatementContext);
+ }
+ throw new HBaseOperationException("Can not find HBase converter.");
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractor.java
similarity index 59%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapter.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractor.java
index 1dda4dde1b8..15c6598a868 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractor.java
@@ -17,23 +17,39 @@
package org.apache.shardingsphere.proxy.backend.hbase.converter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
+
import java.util.List;
import java.util.stream.Collectors;
/**
- * HBase database row keys converter adapter.
+ * HBase row key extractor.
*/
-public class HBaseDatabaseRowKeysConverterAdapter {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class HBaseRowKeyExtractor {
- protected List<String> getRowKeysFromWhereSegmentByIn(final InExpression
expression) {
- return ((ListExpression)
expression.getRight()).getItems().stream().map(this::getValueByExpressionSegment).collect(Collectors.toList());
+ /**
+ * Get row keys from binary operation expression.
+ *
+ * @param expr binary operation expression
+ * @return row keys
+ */
+ public static String getRowKey(final BinaryOperationExpression expr) {
+ return String.valueOf(((LiteralExpressionSegment)
expr.getRight()).getLiterals());
}
- protected String getValueByExpressionSegment(final ExpressionSegment item)
{
- return String.valueOf(((LiteralExpressionSegment) item).getLiterals());
+ /**
+ * Get row keys from in expression.
+ *
+ * @param expr in expression
+ * @return row keys
+ */
+ public static List<String> getRowKeys(final InExpression expr) {
+ return ((ListExpression) expr.getRight()).getItems().stream().map(each
-> String.valueOf(((LiteralExpressionSegment)
each).getLiterals())).collect(Collectors.toList());
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDeleteOperationAdapter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseDeleteOperation.java
similarity index 80%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDeleteOperationAdapter.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseDeleteOperation.java
index d532cbbe0fb..477a4066429 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDeleteOperationAdapter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseDeleteOperation.java
@@ -15,34 +15,33 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Operation;
+
+import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.TreeMap;
/**
- * HBase database delete converter.
+ * HBase delete operation.
*/
@RequiredArgsConstructor
@Getter
-public final class HBaseDeleteOperationAdapter extends Operation {
-
- private final String tableName;
+public final class HBaseDeleteOperation extends Operation {
private final List<Delete> deletes;
@Override
public Map<String, Object> getFingerprint() {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
@Override
public Map<String, Object> toMap(final int i) {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseInsertOperation.java
similarity index 82%
copy from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
copy to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseInsertOperation.java
index 1c4231f591a..f5a8d67409c 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseInsertOperation.java
@@ -15,32 +15,33 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.hadoop.hbase.client.Operation;
import org.apache.hadoop.hbase.client.Put;
+
+import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.TreeMap;
/**
- * HBase database insert operation adapter.
+ * HBase insert operation.
*/
@RequiredArgsConstructor
@Getter
-public final class HBaseInsertOperationAdapter extends Operation {
+public final class HBaseInsertOperation extends Operation {
private final List<Put> puts;
@Override
public Map<String, Object> getFingerprint() {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
@Override
public Map<String, Object> toMap(final int i) {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseRegionReloadOperation.java
similarity index 69%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseRegionReloadOperation.java
index 1c4231f591a..d9d5c6cbcd4 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseInsertOperationAdapter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseRegionReloadOperation.java
@@ -15,32 +15,25 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
import org.apache.hadoop.hbase.client.Operation;
-import org.apache.hadoop.hbase.client.Put;
-import java.util.List;
+
+import java.util.Collections;
import java.util.Map;
-import java.util.TreeMap;
/**
- * HBase database insert operation adapter.
+ * HBase region reload operation.
*/
-@RequiredArgsConstructor
-@Getter
-public final class HBaseInsertOperationAdapter extends Operation {
-
- private final List<Put> puts;
+public final class HBaseRegionReloadOperation extends Operation {
@Override
public Map<String, Object> getFingerprint() {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
@Override
public Map<String, Object> toMap(final int i) {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseSelectOperationAdapter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseSelectOperation.java
similarity index 80%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseSelectOperationAdapter.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseSelectOperation.java
index 367c75f48f3..5d0448047ed 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseSelectOperationAdapter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseSelectOperation.java
@@ -15,34 +15,33 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Operation;
+
+import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.TreeMap;
/**
- * HBase database select operation adapter.
+ * HBase select operation.
*/
@RequiredArgsConstructor
@Getter
-public final class HBaseSelectOperationAdapter extends Operation {
-
- private final String tableName;
+public final class HBaseSelectOperation extends Operation {
private final List<Get> gets;
@Override
public Map<String, Object> getFingerprint() {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
@Override
public Map<String, Object> toMap(final int i) {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseUpdateOperationAdapter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseUpdateOperation.java
similarity index 80%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseUpdateOperationAdapter.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseUpdateOperation.java
index c9fbf888cb9..99b45fc2731 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseUpdateOperationAdapter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/operation/HBaseUpdateOperation.java
@@ -15,34 +15,33 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.operation;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.hadoop.hbase.client.Operation;
import org.apache.hadoop.hbase.client.Put;
+
+import java.util.Collections;
import java.util.List;
import java.util.Map;
-import java.util.TreeMap;
/**
- * HBase database update operation adapter.
+ * HBase update operation.
*/
@RequiredArgsConstructor
@Getter
-public final class HBaseUpdateOperationAdapter extends Operation {
-
- private final String tableName;
+public final class HBaseUpdateOperation extends Operation {
private final List<Put> puts;
@Override
public Map<String, Object> getFingerprint() {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
@Override
public Map<String, Object> toMap(final int i) {
- return new TreeMap<>();
+ return Collections.emptyMap();
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverter.java
new file mode 100644
index 00000000000..f3ec58b69f8
--- /dev/null
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverter.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.shardingsphere.proxy.backend.hbase.converter.type;
+
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementContext;
+import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseRowKeyExtractor;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseDeleteOperation;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * HBase delete operation converter.
+ */
+@RequiredArgsConstructor
+public final class HBaseDeleteOperationConverter implements
HBaseOperationConverter {
+
+ private final SQLStatementContext<?> sqlStatementContext;
+
+ @Override
+ public HBaseOperation convert() {
+ DeleteStatementContext deleteStatementContext =
(DeleteStatementContext) sqlStatementContext;
+ Optional<WhereSegment> whereSegment =
deleteStatementContext.getWhereSegments().stream().findFirst();
+ Preconditions.checkArgument(whereSegment.isPresent(), "Where segment
is absent.");
+ return whereSegment.get().getExpr() instanceof InExpression
+ ? createDeleteMultipleRowKeysOperation(deleteStatementContext,
whereSegment.get())
+ : createDeleteSingleRowKeyOperation(deleteStatementContext,
whereSegment.get());
+ }
+
+ private HBaseOperation createDeleteMultipleRowKeysOperation(final
DeleteStatementContext deleteStatementContext, final WhereSegment whereSegment)
{
+ String tableName =
deleteStatementContext.getTablesContext().getTableNames().iterator().next();
+ List<String> rowKeys = HBaseRowKeyExtractor.getRowKeys((InExpression)
whereSegment.getExpr());
+ List<Delete> deletes = rowKeys.stream().map(each -> new
Delete(Bytes.toBytes(each))).collect(Collectors.toList());
+ return new HBaseOperation(tableName, new
HBaseDeleteOperation(deletes));
+ }
+
+ private HBaseOperation createDeleteSingleRowKeyOperation(final
DeleteStatementContext deleteStatementContext, final WhereSegment whereSegment)
{
+ String tableName =
deleteStatementContext.getTablesContext().getTableNames().iterator().next();
+ String rowKey =
HBaseRowKeyExtractor.getRowKey((BinaryOperationExpression)
whereSegment.getExpr());
+ Delete delete = new Delete(Bytes.toBytes(rowKey));
+ return new HBaseOperation(tableName, delete);
+ }
+}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseInsertConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseInsertOperationConverter.java
similarity index 70%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseInsertConverter.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseInsertOperationConverter.java
index 725878a8d1f..bb63dcaabbb 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseInsertConverter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseInsertOperationConverter.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
import lombok.RequiredArgsConstructor;
import org.apache.hadoop.hbase.client.Put;
@@ -25,32 +25,33 @@ import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
import org.apache.shardingsphere.proxy.backend.hbase.context.HBaseContext;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseInsertOperation;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
import java.util.List;
import java.util.stream.Collectors;
/**
- * HBase database insert converter.
+ * HBase insert operation converter.
*/
@RequiredArgsConstructor
-public final class HBaseDatabaseInsertConverter implements
HBaseDatabaseConverter {
+public final class HBaseInsertOperationConverter implements
HBaseOperationConverter {
private final SQLStatementContext<?> sqlStatementContext;
- /**
- * Convert SQL statement to HBase operation.
- *
- * @return HBase operation
- */
@Override
public HBaseOperation convert() {
- InsertStatementContext context = (InsertStatementContext)
sqlStatementContext;
- String tableName =
context.getTablesContext().getTableNames().iterator().next();
- return new HBaseOperation(tableName, new
HBaseInsertOperationAdapter(createHBaseRequest(context)));
+ InsertStatementContext insertStatementContext =
(InsertStatementContext) sqlStatementContext;
+ String tableName =
insertStatementContext.getTablesContext().getTableNames().iterator().next();
+ return new HBaseOperation(tableName, new
HBaseInsertOperation(createHBaseRequest(insertStatementContext)));
}
- private Put generateHBaseRequest(final InsertStatementContext context,
final InsertValueContext insertValueContext) {
- List<String> columns = context.getInsertColumnNames();
+ private List<Put> createHBaseRequest(final InsertStatementContext
insertStatementContext) {
+ return
insertStatementContext.getInsertValueContexts().stream().map(each ->
generateHBaseRequest(insertStatementContext,
each)).collect(Collectors.toList());
+ }
+
+ private Put generateHBaseRequest(final InsertStatementContext
insertStatementContext, final InsertValueContext insertValueContext) {
+ List<String> columns = insertStatementContext.getInsertColumnNames();
List<Object> values =
insertValueContext.getValueExpressions().stream().map(each ->
((LiteralExpressionSegment) each).getLiterals()).collect(Collectors.toList());
Put result = new Put(Bytes.toBytes(String.valueOf(values.get(0))));
for (int i = 1; i < columns.size(); i++) {
@@ -58,8 +59,4 @@ public final class HBaseDatabaseInsertConverter implements
HBaseDatabaseConverte
}
return result;
}
-
- private List<Put> createHBaseRequest(final InsertStatementContext context)
{
- return context.getInsertValueContexts().stream().map(each ->
generateHBaseRequest(context, each)).collect(Collectors.toList());
- }
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRegionReloadConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseRegionReloadOperationConverter.java
similarity index 59%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRegionReloadConverter.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseRegionReloadOperationConverter.java
index 26b3347c458..cc60c2dcd18 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRegionReloadConverter.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseRegionReloadOperationConverter.java
@@ -15,46 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
import lombok.RequiredArgsConstructor;
-import org.apache.hadoop.hbase.client.Operation;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dal.FlushStatementContext;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseRegionReloadOperation;
+
import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
import java.util.stream.Collectors;
/**
- * HBase database region reload converter.
+ * HBase region reload operation converter.
*/
@RequiredArgsConstructor
-public final class HBaseRegionReloadConverter implements
HBaseDatabaseConverter {
+public final class HBaseRegionReloadOperationConverter implements
HBaseOperationConverter {
private final SQLStatementContext<?> sqlStatementContext;
- private Operation getOperation() {
- return new Operation() {
-
- @Override
- public Map<String, Object> getFingerprint() {
- return new TreeMap<>();
- }
-
- @Override
- public Map<String, Object> toMap(final int i) {
- return new TreeMap<>();
- }
- };
- }
-
@Override
public HBaseOperation convert() {
- List<String> tables = ((FlushStatementContext)
sqlStatementContext).getAllTables()
- .stream().map(simpleTableSegment ->
simpleTableSegment.getTableName().getIdentifier().getValue()).collect(Collectors.toList());
-
- return new HBaseOperation(String.join(",", tables), getOperation());
+ List<String> tables = ((FlushStatementContext)
sqlStatementContext).getAllTables().stream().map(each ->
each.getTableName().getIdentifier().getValue()).collect(Collectors.toList());
+ return new HBaseOperation(String.join(",", tables), new
HBaseRegionReloadOperation());
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseSelectOperationConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseSelectOperationConverter.java
new file mode 100644
index 00000000000..55ae33450bc
--- /dev/null
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseSelectOperationConverter.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.shardingsphere.proxy.backend.hbase.converter.type;
+
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.Query;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
+import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseRowKeyExtractor;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseSelectOperation;
+import
org.apache.shardingsphere.proxy.backend.hbase.util.HBaseHeterogeneousUtil;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.NumberLiteralLimitValueSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * HBase select operation converter.
+ */
+@RequiredArgsConstructor
+@Slf4j
+public final class HBaseSelectOperationConverter implements
HBaseOperationConverter {
+
+ private final SQLStatementContext<?> sqlStatementContext;
+
+ @Override
+ public HBaseOperation convert() {
+ SelectStatementContext selectStatementContext =
(SelectStatementContext) sqlStatementContext;
+ Optional<WhereSegment> whereSegment =
selectStatementContext.getWhereSegments().stream().findFirst();
+ Preconditions.checkArgument(whereSegment.isPresent(), "Where segment
is absent.");
+ return whereSegment.get().getExpr() instanceof
BinaryOperationExpression || whereSegment.get().getExpr() instanceof
InExpression
+ ? createGetOperation(selectStatementContext,
whereSegment.get())
+ : createScanOperation(selectStatementContext,
whereSegment.get());
+ }
+
+ private HBaseOperation createGetOperation(final SelectStatementContext
selectStatementContext, final WhereSegment whereSegment) {
+ ExpressionSegment expr = whereSegment.getExpr();
+ List<Get> gets = getRowKeys(expr).stream().map(each -> new
Get(Bytes.toBytes(each))).collect(Collectors.toList());
+ if
(!HBaseHeterogeneousUtil.isUseShorthandProjection(selectStatementContext)) {
+ for (Get each : gets) {
+ appendColumns(each, selectStatementContext);
+ }
+ }
+ String tableName =
selectStatementContext.getTablesContext().getTableNames().iterator().next();
+ return expr instanceof InExpression ? new HBaseOperation(tableName,
new HBaseSelectOperation(gets)) : new HBaseOperation(tableName, gets.get(0));
+ }
+
+ private List<String> getRowKeys(final ExpressionSegment expr) {
+ return expr instanceof InExpression ?
HBaseRowKeyExtractor.getRowKeys((InExpression) expr) :
Collections.singletonList(HBaseRowKeyExtractor.getRowKey((BinaryOperationExpression)
expr));
+ }
+
+ private HBaseOperation createScanOperation(final SelectStatementContext
selectStatementContext, final WhereSegment whereSegment) {
+ Scan scan = new Scan();
+ if (whereSegment.getExpr() instanceof BetweenExpression) {
+ appendBetween(scan, whereSegment.getExpr(), false);
+ }
+ if
(!HBaseHeterogeneousUtil.isUseShorthandProjection(selectStatementContext)) {
+ appendColumns(scan, selectStatementContext);
+ }
+ appendLimit(scan, selectStatementContext);
+ return new
HBaseOperation(selectStatementContext.getTablesContext().getTableNames().iterator().next(),
scan);
+ }
+
+ private void appendColumns(final Query query, final SelectStatementContext
selectStatementContext) {
+ if (query instanceof Get) {
+ selectStatementContext.getColumnSegments().forEach(each -> ((Get)
query).addColumn(Bytes.toBytes("i"), Bytes.toBytes(String.valueOf(each))));
+ } else {
+ selectStatementContext.getColumnSegments().forEach(each -> ((Scan)
query).addColumn(Bytes.toBytes("i"), Bytes.toBytes(String.valueOf(each))));
+ }
+ }
+
+ private void appendBetween(final Scan scan, final ExpressionSegment
expressionSegment, final boolean reversed) {
+ BetweenExpression betweenExpr = (BetweenExpression) expressionSegment;
+ String startRowKey = ((LiteralExpressionSegment)
betweenExpr.getBetweenExpr()).getLiterals().toString();
+ String stopRowKey = ((LiteralExpressionSegment)
betweenExpr.getAndExpr()).getLiterals().toString();
+ if (null != startRowKey && null != stopRowKey) {
+ if (reversed) {
+ scan.withStopRow(calBytes(startRowKey, 0), true);
+ // refer:
<https://github.com/apache/hbase/blob/master/hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/BackupSystemTable.java#L1853>
+ scan.withStartRow(calBytes(stopRowKey + "~", 0), true);
+ } else {
+ scan.withStartRow(calBytes(startRowKey, 0), true);
+ scan.withStopRow(calBytes(stopRowKey + "~", 0), true);
+ }
+ }
+ }
+
+ private byte[] calBytes(final String row, final int step) {
+ byte[] rowByte = Bytes.toBytes(row);
+ byte[] result = Arrays.copyOf(rowByte, rowByte.length);
+ result[result.length - 1] = (byte) (result[result.length - 1] + step);
+ return result;
+ }
+
+ private void appendLimit(final Scan scan, final SelectStatementContext
selectStatementContext) {
+ // TODO consider about other dialect
+ MySQLSelectStatement selectStatement = (MySQLSelectStatement)
selectStatementContext.getSqlStatement();
+ if (selectStatement.getLimit().isPresent()) {
+ selectStatement.getLimit().get().getRowCount().ifPresent(optional
-> scan.setLimit((int) ((NumberLiteralLimitValueSegment) optional).getValue()));
+ }
+ }
+}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java
new file mode 100644
index 00000000000..b404141e731
--- /dev/null
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverter.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.shardingsphere.proxy.backend.hbase.converter.type;
+
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
+import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseRowKeyExtractor;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseUpdateOperation;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * HBase update operation converter.
+ */
+@RequiredArgsConstructor
+public final class HBaseUpdateOperationConverter implements
HBaseOperationConverter {
+
+ private final SQLStatementContext<?> sqlStatementContext;
+
+ @Override
+ public HBaseOperation convert() {
+ UpdateStatementContext updateStatementContext =
(UpdateStatementContext) sqlStatementContext;
+ Optional<WhereSegment> whereSegment =
updateStatementContext.getWhereSegments().stream().findFirst();
+ Preconditions.checkArgument(whereSegment.isPresent(), "Where segment
is absent.");
+ return whereSegment.get().getExpr() instanceof InExpression
+ ? createUpdateMultipleRowKeysOperation(updateStatementContext,
whereSegment.get())
+ : createUpdateSingleRowKeyOperation(updateStatementContext,
whereSegment.get());
+ }
+
+ private HBaseOperation createUpdateMultipleRowKeysOperation(final
UpdateStatementContext updateStatementContext, final WhereSegment whereSegment)
{
+ String tableName =
updateStatementContext.getTablesContext().getTableNames().iterator().next();
+ List<Put> puts = HBaseRowKeyExtractor.getRowKeys((InExpression)
whereSegment.getExpr()).stream().map(each -> new
Put(Bytes.toBytes(each))).collect(Collectors.toList());
+ for (Put each : puts) {
+ addPutColumn(updateStatementContext, each);
+ }
+ return new HBaseOperation(tableName, new HBaseUpdateOperation(puts));
+ }
+
+ private HBaseOperation createUpdateSingleRowKeyOperation(final
UpdateStatementContext updateStatementContext, final WhereSegment whereSegment)
{
+ String tableName =
updateStatementContext.getTablesContext().getTableNames().iterator().next();
+ return new HBaseOperation(tableName,
createOperationRequest(updateStatementContext, whereSegment));
+ }
+
+ private Put createOperationRequest(final UpdateStatementContext
updateStatementContext, final WhereSegment whereSegment) {
+ Put result = new
Put(Bytes.toBytes(HBaseRowKeyExtractor.getRowKey((BinaryOperationExpression)
whereSegment.getExpr())));
+ addPutColumn(updateStatementContext, result);
+ return result;
+ }
+
+ private void addPutColumn(final UpdateStatementContext
updateStatementContext, final Put put) {
+ for (AssignmentSegment each :
updateStatementContext.getSqlStatement().getSetAssignment().getAssignments()) {
+ String columnName =
each.getColumns().iterator().next().getIdentifier().getValue();
+ String value = String.valueOf(((LiteralExpressionSegment)
each.getValue()).getLiterals());
+ put.addColumn(Bytes.toBytes("i"), Bytes.toBytes(columnName),
Bytes.toBytes(value));
+ }
+ }
+}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/impl/HBaseDatabaseBackendUpdateHandler.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/handler/HBaseDatabaseBackendUpdateHandler.java
similarity index 85%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/impl/HBaseDatabaseBackendUpdateHandler.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/handler/HBaseDatabaseBackendUpdateHandler.java
index 4bc59263455..97696795182 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/impl/HBaseDatabaseBackendUpdateHandler.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/handler/HBaseDatabaseBackendUpdateHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.impl;
+package org.apache.shardingsphere.proxy.backend.hbase.handler;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@@ -23,12 +23,12 @@ import
org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
import
org.apache.shardingsphere.proxy.backend.handler.data.DatabaseBackendHandler;
-import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDatabaseConverter;
-import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDatabaseConverterFactory;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverterFactory;
import
org.apache.shardingsphere.proxy.backend.hbase.result.update.HBaseDatabaseUpdater;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+
import java.util.Collection;
/**
@@ -50,9 +50,8 @@ public final class HBaseDatabaseBackendUpdateHandler
implements DatabaseBackendH
@Override
public UpdateResponseHeader execute() {
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
- HBaseOperation hbaseOperation = converter.convert();
- Collection<UpdateResult> updateResults =
updater.executeUpdate(hbaseOperation);
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+ Collection<UpdateResult> updateResults =
updater.executeUpdate(converter.convert());
return new UpdateResponseHeader(sqlStatement, updateResults);
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseQueryCallback.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseQueryCallback.java
index 774ec60617d..c4a300e9d1d 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseQueryCallback.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseQueryCallback.java
@@ -33,7 +33,6 @@ public interface HBaseQueryCallback<T> {
* @param table table
* @return execute result
* @throws IOException IO exception
- *
*/
T executeInHBase(Table table) throws IOException;
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSet.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSet.java
index f3dde4300d0..5899009ae22 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSet.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSet.java
@@ -61,8 +61,7 @@ public final class HBaseDatabaseDescribeResultSet implements
HBaseDatabaseQueryR
*/
@Override
public Collection<String> getColumnNames() {
- return Arrays.asList("Name", "TableAttributes",
"FlushPolicyClassName", "MaxFileSize", "MemStoreFlushSize",
- "Priority", "RegionReplication", "RegionSplitPolicyClassName",
"CustomizedValues");
+ return Arrays.asList("Name", "TableAttributes",
"FlushPolicyClassName", "MaxFileSize", "MemStoreFlushSize", "Priority",
"RegionReplication", "RegionSplitPolicyClassName", "CustomizedValues");
}
/**
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseGetResultSet.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseGetResultSet.java
index c1007fff26b..f161b047366 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseGetResultSet.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseGetResultSet.java
@@ -28,10 +28,10 @@ import org.apache.hadoop.hbase.util.Bytes;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.proxy.backend.hbase.context.HBaseContext;
-import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDatabaseConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDatabaseConverterFactory;
-import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseSelectOperationAdapter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverterFactory;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseSelectOperation;
import org.apache.shardingsphere.proxy.backend.hbase.executor.HBaseExecutor;
import org.apache.shardingsphere.proxy.backend.hbase.props.HBasePropertyKey;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
@@ -79,13 +79,13 @@ public final class HBaseDatabaseGetResultSet implements
HBaseDatabaseQueryResult
@Override
public void init(final SQLStatementContext<?> sqlStatementContext) {
statementContext = (SelectStatementContext) sqlStatementContext;
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
HBaseOperation hbaseOperation = converter.convert();
initResultNum(sqlStatementContext);
final long startMill = System.currentTimeMillis();
if (hbaseOperation.getOperation() instanceof Get) {
executeGetRequest(hbaseOperation);
- } else if (hbaseOperation.getOperation() instanceof
HBaseSelectOperationAdapter) {
+ } else if (hbaseOperation.getOperation() instanceof
HBaseSelectOperation) {
executeGetsRequest(hbaseOperation);
} else {
executeScanRequest(hbaseOperation);
@@ -130,7 +130,7 @@ public final class HBaseDatabaseGetResultSet implements
HBaseDatabaseQueryResult
}
private void executeGetsRequest(final HBaseOperation hbaseOperation) {
- List<Result> results =
Arrays.asList(HBaseExecutor.executeQuery(hbaseOperation.getTableName(), table
-> table.get(((HBaseSelectOperationAdapter)
hbaseOperation.getOperation()).getGets())));
+ List<Result> results =
Arrays.asList(HBaseExecutor.executeQuery(hbaseOperation.getTableName(), table
-> table.get(((HBaseSelectOperation)
hbaseOperation.getOperation()).getGets())));
results = results.stream().filter(result -> result.rawCells().length >
0).collect(Collectors.toList());
orderResults(results);
iterator = results.iterator();
@@ -157,7 +157,7 @@ public final class HBaseDatabaseGetResultSet implements
HBaseDatabaseQueryResult
private void executeScanRequest(final HBaseOperation hbaseOperation) {
Scan scan = (Scan) hbaseOperation.getOperation();
- scan.setLimit(new Long(maxLimitResultSize).intValue());
+ scan.setLimit(Long.valueOf(maxLimitResultSize).intValue());
ResultScanner resultScanner =
HBaseExecutor.executeQuery(hbaseOperation.getTableName(), table ->
table.getScanner(scan));
iterator = resultScanner.iterator();
setColumns(iterator);
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseQueryResultSet.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseQueryResultSet.java
index cc5c9b58551..d5e94ad61c7 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseQueryResultSet.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseQueryResultSet.java
@@ -22,7 +22,7 @@ import
org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
import java.util.Collection;
/**
- * Result set for HBase databases.
+ * Query result set for HBase databases.
*/
public interface HBaseDatabaseQueryResultSet extends TypedSPI {
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseDeleteUpdater.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseDeleteUpdater.java
index 5b550161407..04628529237 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseDeleteUpdater.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseDeleteUpdater.java
@@ -19,7 +19,7 @@ package
org.apache.shardingsphere.proxy.backend.hbase.result.update;
import org.apache.hadoop.hbase.client.Delete;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
-import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseDeleteOperationAdapter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseDeleteOperation;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
import org.apache.shardingsphere.proxy.backend.hbase.executor.HBaseExecutor;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLDeleteStatement;
@@ -32,15 +32,14 @@ import java.util.Collections;
public final class HBaseDatabaseDeleteUpdater implements HBaseDatabaseUpdater {
@Override
- public Collection<UpdateResult> executeUpdate(final HBaseOperation
hbaseOperation) {
- if (hbaseOperation.getOperation() instanceof
HBaseDeleteOperationAdapter) {
- int deleteAffectedSize = ((HBaseDeleteOperationAdapter)
hbaseOperation.getOperation()).getDeletes().size();
- HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table
-> table.delete(((HBaseDeleteOperationAdapter)
hbaseOperation.getOperation()).getDeletes()));
- return Collections.singletonList(new
UpdateResult(deleteAffectedSize, 0));
- } else {
- HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table
-> table.delete((Delete) hbaseOperation.getOperation()));
- return Collections.singletonList(new UpdateResult(1, 0));
+ public Collection<UpdateResult> executeUpdate(final HBaseOperation
operation) {
+ if (operation.getOperation() instanceof HBaseDeleteOperation) {
+ int deleteAffectedSize = ((HBaseDeleteOperation)
operation.getOperation()).getDeletes().size();
+ HBaseExecutor.executeUpdate(operation.getTableName(), table ->
table.delete(((HBaseDeleteOperation) operation.getOperation()).getDeletes()));
+ return Collections.singleton(new UpdateResult(deleteAffectedSize,
0));
}
+ HBaseExecutor.executeUpdate(operation.getTableName(), table ->
table.delete((Delete) operation.getOperation()));
+ return Collections.singleton(new UpdateResult(1, 0));
}
@Override
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseInsertUpdater.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseInsertUpdater.java
index 0024b71317b..75202611177 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseInsertUpdater.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseInsertUpdater.java
@@ -19,10 +19,11 @@ package
org.apache.shardingsphere.proxy.backend.hbase.result.update;
import org.apache.hadoop.hbase.client.Put;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
-import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseInsertOperationAdapter;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseInsertOperation;
import org.apache.shardingsphere.proxy.backend.hbase.executor.HBaseExecutor;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
+
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -33,20 +34,14 @@ import java.util.List;
public final class HBaseDatabaseInsertUpdater implements HBaseDatabaseUpdater {
@Override
- public String getType() {
- return MySQLInsertStatement.class.getCanonicalName();
+ public Collection<UpdateResult> executeUpdate(final HBaseOperation
operation) {
+ List<Put> puts = ((HBaseInsertOperation)
operation.getOperation()).getPuts();
+ HBaseExecutor.executeUpdate(operation.getTableName(), table ->
table.put(puts));
+ return Collections.singleton(new UpdateResult(puts.size(), 0));
}
- /**
- * Execute HBase operation.
- *
- * @param hbaseOperation HBase operation
- * @return affected rows
- */
@Override
- public Collection<UpdateResult> executeUpdate(final HBaseOperation
hbaseOperation) {
- List<Put> puts = ((HBaseInsertOperationAdapter)
hbaseOperation.getOperation()).getPuts();
- HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table ->
table.put(puts));
- return Collections.singletonList(new UpdateResult(puts.size(), 0));
+ public String getType() {
+ return MySQLInsertStatement.class.getCanonicalName();
}
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdateUpdater.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdateUpdater.java
index 6d16b8470fc..9a66dca522c 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdateUpdater.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdateUpdater.java
@@ -20,7 +20,7 @@ package
org.apache.shardingsphere.proxy.backend.hbase.result.update;
import org.apache.hadoop.hbase.client.Put;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
-import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseUpdateOperationAdapter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseUpdateOperation;
import org.apache.shardingsphere.proxy.backend.hbase.executor.HBaseExecutor;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLUpdateStatement;
import java.util.Collection;
@@ -31,21 +31,14 @@ import java.util.Collections;
*/
public final class HBaseDatabaseUpdateUpdater implements HBaseDatabaseUpdater {
- /**
- * Execute HBase operation.
- *
- * @param hbaseOperation HBase operation
- * @return affected rows
- */
@Override
- public Collection<UpdateResult> executeUpdate(final HBaseOperation
hbaseOperation) {
- if (hbaseOperation.getOperation() instanceof
HBaseUpdateOperationAdapter) {
- HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table
-> table.put(((HBaseUpdateOperationAdapter)
hbaseOperation.getOperation()).getPuts()));
- return Collections.singletonList(new
UpdateResult(((HBaseUpdateOperationAdapter)
hbaseOperation.getOperation()).getPuts().size(), 0));
- } else {
- HBaseExecutor.executeUpdate(hbaseOperation.getTableName(), table
-> table.put((Put) hbaseOperation.getOperation()));
- return Collections.singletonList(new UpdateResult(1, 0));
+ public Collection<UpdateResult> executeUpdate(final HBaseOperation
operation) {
+ if (operation.getOperation() instanceof HBaseUpdateOperation) {
+ HBaseExecutor.executeUpdate(operation.getTableName(), table ->
table.put(((HBaseUpdateOperation) operation.getOperation()).getPuts()));
+ return Collections.singleton(new
UpdateResult(((HBaseUpdateOperation)
operation.getOperation()).getPuts().size(), 0));
}
+ HBaseExecutor.executeUpdate(operation.getTableName(), table ->
table.put((Put) operation.getOperation()));
+ return Collections.singleton(new UpdateResult(1, 0));
}
@Override
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdater.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdater.java
index d025d9ec149..368ca39fc9a 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdater.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseUpdater.java
@@ -24,15 +24,14 @@ import java.util.Collection;
/**
* HBase backend updater.
- *
*/
public interface HBaseDatabaseUpdater extends TypedSPI {
/**
* Execute HBase operation.
*
- * @param hbaseOperation HBase operation
+ * @param operation HBase operation
* @return affected rows
*/
- Collection<UpdateResult> executeUpdate(HBaseOperation hbaseOperation);
+ Collection<UpdateResult> executeUpdate(HBaseOperation operation);
}
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseRegionReloadUpdater.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseRegionReloadUpdater.java
index fb85040178f..652c21be37a 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseRegionReloadUpdater.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseRegionReloadUpdater.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.proxy.backend.hbase.result.update;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
+import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.proxy.backend.hbase.context.HBaseContext;
import
org.apache.shardingsphere.proxy.backend.hbase.context.HBaseRegionWarmUpContext;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
@@ -34,28 +35,20 @@ import java.util.concurrent.atomic.AtomicInteger;
*/
public final class HBaseRegionReloadUpdater implements HBaseDatabaseUpdater {
- /**
- * Execute HBase operation.
- *
- * @param hbaseOperation HBase operation
- * @return affected rows
- */
@Override
- public Collection<UpdateResult> executeUpdate(final HBaseOperation
hbaseOperation) {
- List<String> tables =
Arrays.asList(hbaseOperation.getTableName().split(","));
+ public Collection<UpdateResult> executeUpdate(final HBaseOperation
operation) {
+ List<String> tables =
Arrays.asList(operation.getTableName().split(","));
AtomicInteger updateCount = new AtomicInteger();
tables.stream().filter(this::isNotNullTableName).forEach(this::checkTableExists);
- tables.stream().filter(this::isNotNullTableName).forEach(tableName -> {
+ tables.stream().filter(this::isNotNullTableName).forEach(each -> {
updateCount.getAndIncrement();
- HBaseRegionWarmUpContext.getInstance().loadRegionInfo(tableName,
HBaseContext.getInstance().getConnection(tableName));
+ HBaseRegionWarmUpContext.getInstance().loadRegionInfo(each,
HBaseContext.getInstance().getConnection(each));
});
- return Collections.singletonList(new UpdateResult(updateCount.get(),
0));
+ return Collections.singleton(new UpdateResult(updateCount.get(), 0));
}
private void checkTableExists(final String tableName) {
- if (!HBaseContext.getInstance().isTableExists(tableName)) {
- throw new HBaseOperationException(String.format("Table `%s` is not
exists", tableName));
- }
+
ShardingSpherePreconditions.checkState(HBaseContext.getInstance().isTableExists(tableName),
() -> new HBaseOperationException(String.format("Table `%s` is not exists",
tableName)));
}
private boolean isNotNullTableName(final String tableName) {
diff --git
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtil.java
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtil.java
similarity index 85%
rename from
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtil.java
rename to
proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtil.java
index 6090028ca4e..0b3b2ba5af5 100644
---
a/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtil.java
+++
b/proxy/backend/type/hbase/src/main/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtil.java
@@ -27,15 +27,16 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
- * heterogeneous util.
+ * HBase heterogeneous util.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class HeterogeneousUtil {
+public final class HBaseHeterogeneousUtil {
/**
- * Is Crc ProjectionSegment.
- * @param projectionSegment projectionSegment
- * @return result
+ * Whether crc projection segment.
+ *
+ * @param projectionSegment projection segment
+ * @return Is crc projection segment or not
*/
public static boolean isCrcProjectionSegment(final ProjectionSegment
projectionSegment) {
@@ -47,10 +48,11 @@ public class HeterogeneousUtil {
}
/**
- * convert prepared statement to literal statement.
- * @param source sql statement
- * @param target parameter marker
- * @param replacements parameters
+ * Convert prepared statement to literal statement.
+ *
+ * @param source source
+ * @param target target
+ * @param replacements replacements
* @return literal statement
*/
public static String replaceSQLStatementWithParameters(final String
source, final CharSequence target, final Object... replacements) {
@@ -72,8 +74,9 @@ public class HeterogeneousUtil {
}
/**
- * Return true if use * in SELECT Statement.
- * @param statementContext Select Statement Context
+ * Return true if use * in SELECT statement.
+ *
+ * @param statementContext select statement context
* @return is use shorthand projection
*/
public static boolean isUseShorthandProjection(final
SelectStatementContext statementContext) {
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactoryTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactoryTest.java
similarity index 58%
rename from
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactoryTest.java
rename to
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactoryTest.java
index 7beec90a6f6..8a744963ac6 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseConverterFactoryTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseOperationConverterFactoryTest.java
@@ -23,45 +23,51 @@ import
org.apache.shardingsphere.infra.binder.statement.dml.DeleteStatementConte
import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
-import org.junit.Test;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseDeleteOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseInsertOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseRegionReloadOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseSelectOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.type.HBaseUpdateOperationConverter;
+import org.junit.jupiter.api.Test;
+
import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
-public final class HBaseDatabaseConverterFactoryTest {
+public final class HBaseOperationConverterFactoryTest {
@Test
public void assertExecuteSelectStatement() {
SQLStatementContext<?> sqlStatementContext =
mock(SelectStatementContext.class);
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
- assertThat(converter, instanceOf(HBaseDatabaseSelectConverter.class));
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+ assertThat(converter, instanceOf(HBaseSelectOperationConverter.class));
}
@Test
public void assertExecuteInsertStatement() {
SQLStatementContext<?> sqlStatementContext =
mock(InsertStatementContext.class);
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
- assertThat(converter, instanceOf(HBaseDatabaseInsertConverter.class));
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+ assertThat(converter, instanceOf(HBaseInsertOperationConverter.class));
}
@Test
public void assertExecuteUpdateStatement() {
SQLStatementContext<?> sqlStatementContext =
mock(UpdateStatementContext.class);
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
- assertThat(converter, instanceOf(HBaseDatabaseUpdateConverter.class));
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+ assertThat(converter, instanceOf(HBaseUpdateOperationConverter.class));
}
@Test
public void assertExecuteDeleteStatement() {
SQLStatementContext<?> sqlStatementContext =
mock(DeleteStatementContext.class);
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
- assertThat(converter, instanceOf(HBaseDatabaseDeleteConverter.class));
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+ assertThat(converter, instanceOf(HBaseDeleteOperationConverter.class));
}
@Test
public void assertExecuteFlushStatement() {
SQLStatementContext<?> sqlStatementContext =
mock(FlushStatementContext.class);
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
- assertThat(converter, instanceOf(HBaseRegionReloadConverter.class));
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+ assertThat(converter,
instanceOf(HBaseRegionReloadOperationConverter.class));
}
}
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapterTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractorTest.java
similarity index 71%
rename from
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapterTest.java
rename to
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractorTest.java
index 9edaf05e6af..cf825691a5d 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseRowKeysConverterAdapterTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseRowKeyExtractorTest.java
@@ -21,26 +21,25 @@ import
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLSta
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-public class HBaseDatabaseRowKeysConverterAdapterTest {
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public final class HBaseRowKeyExtractorTest {
@Test
- public void assertGetRowKeysFromInExpression() {
+ public void assertGetRowKeys() {
SelectStatement sqlStatement = (SelectStatement)
HBaseSupportedSQLStatement.parseSQLStatement("select /*+ hbase */ * from
t_order where rowKey in ('1', '2') ");
Optional<WhereSegment> whereSegment = sqlStatement.getWhere();
- HBaseDatabaseRowKeysConverterAdapter adapter = new
HBaseDatabaseRowKeysConverterAdapter();
- if (whereSegment.isPresent()) {
- List<String> rowKeys =
adapter.getRowKeysFromWhereSegmentByIn((InExpression)
whereSegment.get().getExpr());
- List<String> actual = Arrays.asList("1", "2");
- assertEquals(rowKeys, actual);
- } else {
- fail();
- }
+ assertTrue(whereSegment.isPresent());
+ List<String> actual = Arrays.asList("1", "2");
+ List<String> expected = HBaseRowKeyExtractor.getRowKeys((InExpression)
whereSegment.get().getExpr());
+ assertThat(actual, is(expected));
}
}
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverterTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverterTest.java
similarity index 68%
rename from
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverterTest.java
rename to
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverterTest.java
index ffcea8e69b5..a1926569d72 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseDeleteConverterTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseDeleteOperationConverterTest.java
@@ -15,29 +15,32 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverterFactory;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseDeleteOperation;
import
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.junit.Test;
-import static org.hamcrest.CoreMatchers.equalTo;
+import org.junit.jupiter.api.Test;
+
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
-public final class HBaseDatabaseDeleteConverterTest {
+public final class HBaseDeleteOperationConverterTest {
@Test
public void assertConvert() {
SQLStatement sqlStatement =
HBaseSupportedSQLStatement.parseSQLStatement(HBaseSupportedSQLStatement.getDeleteStatement());
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
HBaseOperation hbaseOperation = converter.convert();
- assertThat(hbaseOperation.getTableName(),
equalTo(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
+ assertThat(hbaseOperation.getTableName(),
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
assertThat(hbaseOperation.getOperation(), instanceOf(Delete.class));
}
@@ -46,10 +49,10 @@ public final class HBaseDatabaseDeleteConverterTest {
String sql = " delete /*+ hbase */ from t_test_order where rowKey in
('2', '1')";
SQLStatement sqlStatement =
HBaseSupportedSQLStatement.parseSQLStatement(sql);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
HBaseOperation hBaseOperation = converter.convert();
- assertThat(hBaseOperation.getTableName(),
equalTo(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
- assertThat(hBaseOperation.getOperation(),
instanceOf(HBaseDeleteOperationAdapter.class));
- assertThat(((HBaseDeleteOperationAdapter)
hBaseOperation.getOperation()).getDeletes().size(), is(2));
+ assertThat(hBaseOperation.getTableName(),
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
+ assertThat(hBaseOperation.getOperation(),
instanceOf(HBaseDeleteOperation.class));
+ assertThat(((HBaseDeleteOperation)
hBaseOperation.getOperation()).getDeletes().size(), is(2));
}
}
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverterTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverterTest.java
similarity index 61%
rename from
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverterTest.java
rename to
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverterTest.java
index ea0abe15c01..22a8ace9458 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/HBaseDatabaseUpdateConverterTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/converter/type/HBaseUpdateOperationConverterTest.java
@@ -15,30 +15,33 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.proxy.backend.hbase.converter;
+package org.apache.shardingsphere.proxy.backend.hbase.converter.type;
import org.apache.hadoop.hbase.client.Put;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.proxy.backend.hbase.bean.HBaseOperation;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverter;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.HBaseOperationConverterFactory;
+import
org.apache.shardingsphere.proxy.backend.hbase.converter.operation.HBaseUpdateOperation;
import
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.junit.Test;
-import static org.hamcrest.CoreMatchers.equalTo;
+import org.junit.jupiter.api.Test;
+
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
-public final class HBaseDatabaseUpdateConverterTest {
+public final class HBaseUpdateOperationConverterTest {
@Test
public void assertConvert() {
SQLStatement sqlStatement =
HBaseSupportedSQLStatement.parseSQLStatement(HBaseSupportedSQLStatement.getUpdateStatement());
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
- HBaseOperation hbaseOperation = converter.convert();
- assertThat(hbaseOperation.getTableName(),
equalTo(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
- assertThat(hbaseOperation.getOperation(), instanceOf(Put.class));
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+ HBaseOperation operation = converter.convert();
+ assertThat(operation.getTableName(),
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
+ assertThat(operation.getOperation(), instanceOf(Put.class));
}
@Test
@@ -46,10 +49,10 @@ public final class HBaseDatabaseUpdateConverterTest {
String sql = " update /*+ hbase */ t_test_order set age = 10 where
rowKey in (1, '2')";
SQLStatement sqlStatement =
HBaseSupportedSQLStatement.parseSQLStatement(sql);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(null, sqlStatement, "");
- HBaseDatabaseConverter converter =
HBaseDatabaseConverterFactory.newInstance(sqlStatementContext);
- HBaseOperation hBaseOperation = converter.convert();
- assertThat(hBaseOperation.getTableName(),
equalTo(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
- assertThat(hBaseOperation.getOperation(),
instanceOf(HBaseUpdateOperationAdapter.class));
- assertThat(((HBaseUpdateOperationAdapter)
hBaseOperation.getOperation()).getPuts().size(), is(2));
+ HBaseOperationConverter converter =
HBaseOperationConverterFactory.newInstance(sqlStatementContext);
+ HBaseOperation operation = converter.convert();
+ assertThat(operation.getTableName(),
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
+ assertThat(operation.getOperation(),
instanceOf(HBaseUpdateOperation.class));
+ assertThat(((HBaseUpdateOperation)
operation.getOperation()).getPuts().size(), is(2));
}
}
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseSupportedSQLStatement.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseSupportedSQLStatement.java
index ea7c818b01a..77c14efaa76 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseSupportedSQLStatement.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/HBaseSupportedSQLStatement.java
@@ -26,7 +26,7 @@ import java.util.Properties;
/**
* SQL Statement which supported in HBase.
*/
-public class HBaseSupportedSQLStatement {
+public final class HBaseSupportedSQLStatement {
public static final String HBASE_DATABASE_TABLE_NAME = "t_test_order";
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/AbstractHBaseDatabaseQueryResultSetTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/AbstractHBaseDatabaseQueryResultSetTest.java
index f4a0f28a9cc..f2f3c883238 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/AbstractHBaseDatabaseQueryResultSetTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/AbstractHBaseDatabaseQueryResultSetTest.java
@@ -22,26 +22,25 @@ import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
-import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.Table;
-import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
import org.apache.shardingsphere.proxy.backend.hbase.context.HBaseContext;
import org.apache.shardingsphere.proxy.backend.hbase.props.HBaseProperties;
import org.apache.shardingsphere.proxy.backend.hbase.props.HBasePropertyKey;
import
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
import org.apache.shardingsphere.test.util.PropertiesBuilder;
import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
-import org.junit.After;
-import org.junit.Before;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
+
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.Properties;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
@@ -52,38 +51,23 @@ import static org.mockito.Mockito.when;
@Getter
public abstract class AbstractHBaseDatabaseQueryResultSetTest {
- private final Table table = mock(Table.class, RETURNS_DEEP_STUBS);
-
- private final Admin admin = mock(HBaseAdmin.class, RETURNS_DEEP_STUBS);
-
- private final Connection connection = mock(Connection.class,
RETURNS_DEEP_STUBS);
+ @Mock
+ private Admin admin;
- private final TablesContext tablesContext = mock(TablesContext.class,
RETURNS_DEEP_STUBS);
-
- private Collection<String> tableNames;
-
- @Before
+ @BeforeEach
public void setUp() throws IOException {
- Properties props = createProperties();
- HBaseProperties hBaseProperties = new HBaseProperties(props);
- HBaseContext.getInstance().setProps(hBaseProperties);
- tableNames = new ArrayList<>();
- tableNames.add("t_test_table");
- when(tablesContext.getTableNames()).thenReturn(tableNames);
+ Properties props = PropertiesBuilder.build(new
Property(HBasePropertyKey.WARM_UP_THREAD_NUM.getKey(), String.valueOf(1)));
+ HBaseContext.getInstance().setProps(new HBaseProperties(props));
HTableDescriptor[] tableDescriptors = createHTableDescriptors();
when(admin.tableExists(any())).thenReturn(true);
when(admin.getTableDescriptor(any())).thenReturn(tableDescriptors[0]);
when(admin.listTables()).thenReturn(tableDescriptors);
+ Connection connection = mock(Connection.class, RETURNS_DEEP_STUBS);
when(connection.getAdmin()).thenReturn(admin);
- when(connection.getTable(any())).thenReturn(table);
+ when(connection.getTable(any())).thenReturn(mock(Table.class));
HBaseContext.getInstance().init(Collections.singletonMap("cluster_lj",
connection));
}
- private Properties createProperties() {
- return PropertiesBuilder.build(
- new Property(HBasePropertyKey.WARM_UP_THREAD_NUM.getKey(),
String.valueOf(1)));
- }
-
private HTableDescriptor[] createHTableDescriptors() {
HTableDescriptor descriptor = mock(HTableDescriptor.class);
when(descriptor.getNameAsString()).thenReturn(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME);
@@ -99,7 +83,7 @@ public abstract class AbstractHBaseDatabaseQueryResultSetTest
{
return new HTableDescriptor[]{descriptor};
}
- @After
+ @AfterEach
public void tearDown() {
HBaseContext.getInstance().close();
}
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSetTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSetTest.java
index e0b12091a6b..aedfa4390e6 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSetTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseDescribeResultSetTest.java
@@ -21,29 +21,29 @@ import
org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
import
org.apache.shardingsphere.infra.binder.statement.dal.ShowCreateTableStatementContext;
import
org.apache.shardingsphere.proxy.backend.hbase.exception.HBaseOperationException;
import
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-public class HBaseDatabaseDescribeResultSetTest extends
AbstractHBaseDatabaseQueryResultSetTest {
-
- private final TablesContext tablesContext = mock(TablesContext.class,
RETURNS_DEEP_STUBS);
+public final class HBaseDatabaseDescribeResultSetTest extends
AbstractHBaseDatabaseQueryResultSetTest {
@Test
public void assertGetRowData() {
HBaseDatabaseQueryResultSet resultSet = new
HBaseDatabaseDescribeResultSet();
ShowCreateTableStatementContext context =
mock(ShowCreateTableStatementContext.class);
- when(context.getTablesContext()).thenReturn(tablesContext);
+ when(context.getTablesContext()).thenReturn(mock(TablesContext.class,
RETURNS_DEEP_STUBS));
when(context.getTablesContext().getTableNames().iterator().next()).thenReturn(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME);
resultSet.init(context);
-
List<Object> actual = new ArrayList<>(resultSet.getRowData());
assertThat(actual.size(), is(9));
assertThat(actual.get(0),
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
@@ -52,23 +52,21 @@ public class HBaseDatabaseDescribeResultSetTest extends
AbstractHBaseDatabaseQue
assertThat(actual.get(8), is(""));
}
- @Test(expected = IllegalArgumentException.class)
+ @Test
public void assertGetRowDataWithTableIsNotExists() throws IOException {
when(getAdmin().tableExists(any())).thenReturn(false);
ShowCreateTableStatementContext context =
mock(ShowCreateTableStatementContext.class);
- when(context.getTablesContext()).thenReturn(tablesContext);
+ when(context.getTablesContext()).thenReturn(mock(TablesContext.class,
RETURNS_DEEP_STUBS));
when(context.getTablesContext().getTableNames().iterator().next()).thenReturn(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME);
- HBaseDatabaseQueryResultSet resultSet = new
HBaseDatabaseDescribeResultSet();
- resultSet.init(context);
+ assertThrows(IllegalArgumentException.class, () -> new
HBaseDatabaseDescribeResultSet().init(context));
}
- @Test(expected = HBaseOperationException.class)
+ @Test
public void assertGetRowDataWithBackendError() throws IOException {
when(getAdmin().getTableDescriptor(any())).thenThrow(IOException.class);
ShowCreateTableStatementContext context =
mock(ShowCreateTableStatementContext.class);
- when(context.getTablesContext()).thenReturn(tablesContext);
+ when(context.getTablesContext()).thenReturn(mock(TablesContext.class,
RETURNS_DEEP_STUBS));
when(context.getTablesContext().getTableNames().iterator().next()).thenReturn(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME);
- HBaseDatabaseQueryResultSet resultSet = new
HBaseDatabaseDescribeResultSet();
- resultSet.init(context);
+ assertThrows(HBaseOperationException.class, () -> new
HBaseDatabaseDescribeResultSet().init(context));
}
}
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseListResultSetTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseListResultSetTest.java
index ea2006d1320..f3a0e1df9d6 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseListResultSetTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/query/HBaseDatabaseListResultSetTest.java
@@ -22,12 +22,15 @@ import
org.apache.shardingsphere.proxy.backend.hbase.exception.HBaseOperationExc
import
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
import java.util.ArrayList;
import java.util.List;
+
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -40,7 +43,6 @@ public final class HBaseDatabaseListResultSetTest extends
AbstractHBaseDatabaseQ
ShowTablesStatementContext context =
mock(ShowTablesStatementContext.class);
when(context.getSqlStatement()).thenReturn((MySQLShowTablesStatement)
sqlStatement);
resultSet.init(context);
-
assertTrue(resultSet.next());
List<Object> actual = new ArrayList<>(resultSet.getRowData());
assertThat(actual.size(), is(2));
@@ -70,7 +72,6 @@ public final class HBaseDatabaseListResultSetTest extends
AbstractHBaseDatabaseQ
ShowTablesStatementContext context =
mock(ShowTablesStatementContext.class);
when(context.getSqlStatement()).thenReturn((MySQLShowTablesStatement)
sqlStatement);
resultSet.init(context);
-
sqlStatement = HBaseSupportedSQLStatement.parseSQLStatement("show /*+
hbase */ tables like 't_test%' ");
when(context.getSqlStatement()).thenReturn((MySQLShowTablesStatement)
sqlStatement);
resultSet.init(context);
@@ -80,12 +81,12 @@ public final class HBaseDatabaseListResultSetTest extends
AbstractHBaseDatabaseQ
assertThat(actual.get(1),
is(HBaseSupportedSQLStatement.HBASE_DATABASE_TABLE_NAME));
}
- @Test(expected = HBaseOperationException.class)
+ @Test
public void assertGetRowDataError() {
SQLStatement sqlStatement =
HBaseSupportedSQLStatement.parseSQLStatement("show /*+ hbase */ tables from
cluster_do_not_exists");
HBaseDatabaseQueryResultSet resultSet = new
HBaseDatabaseListResultSet();
ShowTablesStatementContext context =
mock(ShowTablesStatementContext.class);
when(context.getSqlStatement()).thenReturn((MySQLShowTablesStatement)
sqlStatement);
- resultSet.init(context);
+ assertThrows(HBaseOperationException.class, () ->
resultSet.init(context));
}
}
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseBackendUpdateHandlerTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseBackendUpdateHandlerTest.java
index 3d1032565de..5b229e196b4 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseBackendUpdateHandlerTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/result/update/HBaseDatabaseBackendUpdateHandlerTest.java
@@ -18,15 +18,17 @@
package org.apache.shardingsphere.proxy.backend.hbase.result.update;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
-import
org.apache.shardingsphere.proxy.backend.hbase.impl.HBaseDatabaseBackendUpdateHandler;
+import
org.apache.shardingsphere.proxy.backend.hbase.handler.HBaseDatabaseBackendUpdateHandler;
import
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLStatement;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
import java.util.Collections;
+
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
diff --git
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtilTest.java
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtilTest.java
similarity index 87%
rename from
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtilTest.java
rename to
proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtilTest.java
index 290bcfdbf4d..b2c3c32878d 100644
---
a/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HeterogeneousUtilTest.java
+++
b/proxy/backend/type/hbase/src/test/java/org/apache/shardingsphere/proxy/backend/hbase/util/HBaseHeterogeneousUtilTest.java
@@ -21,18 +21,19 @@ import
org.apache.shardingsphere.proxy.backend.hbase.result.HBaseSupportedSQLSta
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
-import static org.junit.Assert.assertTrue;
-public class HeterogeneousUtilTest {
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public final class HBaseHeterogeneousUtilTest {
@Test
public void assertCrc32ProjectionSegment() {
String sql = "SELECT /*+ HBase */ rowKey, crc32(concat_ws('#',rowKey))
from t_order where rowKey in (1, 2, 3)";
SQLStatement sqlStatement =
HBaseSupportedSQLStatement.parseSQLStatement(sql);
List<ProjectionSegment> projectionSegments = new
ArrayList<>(((SelectStatement) sqlStatement).getProjections().getProjections());
-
assertTrue(HeterogeneousUtil.isCrcProjectionSegment(projectionSegments.get(1)));
+
assertTrue(HBaseHeterogeneousUtil.isCrcProjectionSegment(projectionSegments.get(1)));
}
}