You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/04/09 12:43:48 UTC
[shardingsphere] branch master updated: Refactor QueryHeaderBuilder to impl StatelessTypedSPI (#16701)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 0aa073b7921 Refactor QueryHeaderBuilder to impl StatelessTypedSPI (#16701)
0aa073b7921 is described below
commit 0aa073b7921a2c761bc9fa9b6bcb9bfe03bf210f
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Apr 9 20:43:42 2022 +0800
Refactor QueryHeaderBuilder to impl StatelessTypedSPI (#16701)
---
.../communication/DatabaseCommunicationEngine.java | 15 ++-
.../jdbc/JDBCDatabaseCommunicationEngine.java | 7 +-
.../response/header/query/QueryHeaderBuilder.java | 51 ++-------
...rBuilder.java => QueryHeaderBuilderEngine.java} | 23 ++--
.../header/query/QueryHeaderBuilderFactory.java | 24 ++---
.../header/query/impl/MySQLQueryHeaderBuilder.java | 22 ++--
.../query/impl/OpenGaussQueryHeaderBuilder.java | 13 ++-
.../query/impl/PostgreSQLQueryHeaderBuilder.java | 17 ++-
.../admin/DatabaseAdminQueryBackendHandler.java | 7 +-
...ackend.response.header.query.QueryHeaderBuilder | 2 +-
.../jdbc/JDBCDatabaseCommunicationEngineTest.java | 14 ++-
.../query/QueryHeaderBuilderFactoryTest.java | 4 +-
.../query/impl/MySQLQueryHeaderBuilderTest.java | 118 ++++-----------------
.../impl/OpenGaussQueryHeaderBuilderTest.java | 10 +-
.../impl/PostgreSQLQueryHeaderBuilderTest.java | 8 +-
15 files changed, 100 insertions(+), 235 deletions(-)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index b1531f0a426..aeb37d6744f 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -28,7 +28,6 @@ import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementConte
import org.apache.shardingsphere.infra.context.kernel.KernelProcessor;
import org.apache.shardingsphere.infra.context.refresher.MetaDataRefreshEngine;
import org.apache.shardingsphere.infra.database.DefaultSchema;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.executor.sql.execute.result.update.UpdateResult;
@@ -44,8 +43,7 @@ import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
import org.apache.shardingsphere.proxy.backend.response.data.impl.BinaryQueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.data.impl.TextQueryResponseCell;
-import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder;
-import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilderFactory;
+import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilderEngine;
import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -120,10 +118,9 @@ public abstract class DatabaseCommunicationEngine<T> {
int columnCount = getColumnCount(executionContext, queryResultSample);
List<QueryHeader> result = new ArrayList<>(columnCount);
LazyInitializer<DataNodeContainedRule> dataNodeContainedRule = getDataNodeContainedRuleLazyInitializer(metaData);
- DatabaseType databaseType = metaData.getResource().getDatabaseType();
- QueryHeaderBuilder queryHeaderBuilder = QueryHeaderBuilderFactory.getQueryHeaderBuilder(databaseType);
+ QueryHeaderBuilderEngine queryHeaderBuilderEngine = new QueryHeaderBuilderEngine(metaData.getResource().getDatabaseType());
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
- result.add(createQueryHeader(queryHeaderBuilder, executionContext, queryResultSample, metaData, columnIndex, dataNodeContainedRule));
+ result.add(createQueryHeader(queryHeaderBuilderEngine, executionContext, queryResultSample, metaData, columnIndex, dataNodeContainedRule));
}
return result;
}
@@ -138,11 +135,11 @@ public abstract class DatabaseCommunicationEngine<T> {
};
}
- protected QueryHeader createQueryHeader(final QueryHeaderBuilder queryHeaderBuilder, final ExecutionContext executionContext, final QueryResult queryResultSample,
+ protected QueryHeader createQueryHeader(final QueryHeaderBuilderEngine queryHeaderBuilderEngine, final ExecutionContext executionContext, final QueryResult queryResultSample,
final ShardingSphereMetaData metaData, final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
- return hasSelectExpandProjections(executionContext.getSqlStatementContext()) ? queryHeaderBuilder.build(
+ return hasSelectExpandProjections(executionContext.getSqlStatementContext()) ? queryHeaderBuilderEngine.build(
((SelectStatementContext) executionContext.getSqlStatementContext()).getProjectionsContext(), queryResultSample.getMetaData(), metaData, columnIndex, dataNodeContainedRule)
- : queryHeaderBuilder.build(queryResultSample.getMetaData(), metaData, columnIndex, dataNodeContainedRule);
+ : queryHeaderBuilderEngine.build(queryResultSample.getMetaData(), metaData, columnIndex, dataNodeContainedRule);
}
protected int getColumnCount(final ExecutionContext executionContext, final QueryResult queryResultSample) throws SQLException {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index 113fda36334..f51d0f7d375 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -49,8 +49,7 @@ import org.apache.shardingsphere.proxy.backend.communication.jdbc.statement.JDBC
import org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder;
-import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilderFactory;
+import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilderEngine;
import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.sharding.merge.dql.iterator.IteratorStreamMergedResult;
@@ -167,9 +166,9 @@ public final class JDBCDatabaseCommunicationEngine extends DatabaseCommunication
setQueryHeaders(new ArrayList<>(columnCount));
ShardingSphereMetaData metaData = metaDataContexts.getMetaData(backendConnection.getConnectionSession().getSchemaName());
LazyInitializer<DataNodeContainedRule> dataNodeContainedRule = getDataNodeContainedRuleLazyInitializer(metaData);
- QueryHeaderBuilder queryHeaderBuilder = QueryHeaderBuilderFactory.getQueryHeaderBuilder(null == metaData ? null : metaData.getResource().getDatabaseType());
+ QueryHeaderBuilderEngine queryHeaderBuilderEngine = new QueryHeaderBuilderEngine(null == metaData ? null : metaData.getResource().getDatabaseType());
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
- getQueryHeaders().add(queryHeaderBuilder.build(new JDBCQueryResultMetaData(resultSet.getMetaData()), metaData, columnIndex, dataNodeContainedRule));
+ getQueryHeaders().add(queryHeaderBuilderEngine.build(new JDBCQueryResultMetaData(resultSet.getMetaData()), metaData, columnIndex, dataNodeContainedRule));
}
setMergedResult(new IteratorStreamMergedResult(Collections.singletonList(new JDBCStreamQueryResult(resultSet))));
return new QueryResponseHeader(getQueryHeaders());
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java
index 3ac738560ed..c71e96c07cb 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java
@@ -18,65 +18,32 @@
package org.apache.shardingsphere.proxy.backend.response.header.query;
import org.apache.commons.lang3.concurrent.LazyInitializer;
-import org.apache.shardingsphere.infra.binder.segment.select.projection.DerivedColumn;
-import org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
-import org.apache.shardingsphere.infra.binder.segment.select.projection.ProjectionsContext;
-import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeAwareSPI;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
+import org.apache.shardingsphere.spi.type.required.RequiredSPI;
+import org.apache.shardingsphere.spi.type.typed.StatelessTypedSPI;
import java.sql.SQLException;
/**
* Query header builder.
*/
-public abstract class QueryHeaderBuilder implements DatabaseTypeAwareSPI {
+public interface QueryHeaderBuilder extends StatelessTypedSPI, RequiredSPI {
/**
- * Build query header builder.
- *
- * @param queryResultMetaData query result meta data
- * @param metaData ShardingSphere meta data
- * @param columnIndex column index
- * @param dataNodeContainedRule data node contained rule
- * @return query header
- * @throws SQLException SQL exception
- */
- public final QueryHeader build(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData,
- final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
- return doBuild(queryResultMetaData, metaData, queryResultMetaData.getColumnName(columnIndex), queryResultMetaData.getColumnLabel(columnIndex), columnIndex, dataNodeContainedRule);
- }
-
- /**
- * Build query header builder.
- *
- * @param projectionsContext projections context
+ * Build query header.
+ *
* @param queryResultMetaData query result meta data
* @param metaData ShardingSphere meta data
+ * @param columnName column name
+ * @param columnLabel column label
* @param columnIndex column index
* @param dataNodeContainedRule data node contained rule
* @return query header
* @throws SQLException SQL exception
*/
- public final QueryHeader build(final ProjectionsContext projectionsContext, final QueryResultMetaData queryResultMetaData,
- final ShardingSphereMetaData metaData, final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
- return doBuild(queryResultMetaData, metaData, getColumnName(projectionsContext, queryResultMetaData, columnIndex),
- getColumnLabel(projectionsContext, queryResultMetaData, columnIndex), columnIndex, dataNodeContainedRule);
- }
-
- private String getColumnLabel(final ProjectionsContext projectionsContext, final QueryResultMetaData queryResultMetaData, final int columnIndex) throws SQLException {
- Projection projection = projectionsContext.getExpandProjections().get(columnIndex - 1);
- return DerivedColumn.isDerivedColumnName(projection.getColumnLabel()) ? projection.getExpression() : queryResultMetaData.getColumnLabel(columnIndex);
- }
-
- private String getColumnName(final ProjectionsContext projectionsContext, final QueryResultMetaData queryResultMetaData, final int columnIndex) throws SQLException {
- Projection projection = projectionsContext.getExpandProjections().get(columnIndex - 1);
- return projection instanceof ColumnProjection ? ((ColumnProjection) projection).getName() : queryResultMetaData.getColumnName(columnIndex);
- }
-
- protected abstract QueryHeader doBuild(QueryResultMetaData queryResultMetaData, ShardingSphereMetaData metaData, String columnName, String columnLabel, int columnIndex,
- LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException;
+ QueryHeader build(QueryResultMetaData queryResultMetaData, ShardingSphereMetaData metaData,
+ String columnName, String columnLabel, int columnIndex, LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderEngine.java
similarity index 79%
copy from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java
copy to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderEngine.java
index 3ac738560ed..509dc56234f 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderEngine.java
@@ -17,12 +17,13 @@
package org.apache.shardingsphere.proxy.backend.response.header.query;
+import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.concurrent.LazyInitializer;
import org.apache.shardingsphere.infra.binder.segment.select.projection.DerivedColumn;
import org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
import org.apache.shardingsphere.infra.binder.segment.select.projection.ProjectionsContext;
import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeAwareSPI;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
@@ -31,9 +32,12 @@ import org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryH
import java.sql.SQLException;
/**
- * Query header builder.
+ * Query header builder engine.
*/
-public abstract class QueryHeaderBuilder implements DatabaseTypeAwareSPI {
+@RequiredArgsConstructor
+public final class QueryHeaderBuilderEngine {
+
+ private final DatabaseType databaseType;
/**
* Build query header builder.
@@ -45,9 +49,10 @@ public abstract class QueryHeaderBuilder implements DatabaseTypeAwareSPI {
* @return query header
* @throws SQLException SQL exception
*/
- public final QueryHeader build(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData,
+ public QueryHeader build(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData,
final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
- return doBuild(queryResultMetaData, metaData, queryResultMetaData.getColumnName(columnIndex), queryResultMetaData.getColumnLabel(columnIndex), columnIndex, dataNodeContainedRule);
+ QueryHeaderBuilder builder = QueryHeaderBuilderFactory.newInstance(databaseType);
+ return builder.build(queryResultMetaData, metaData, queryResultMetaData.getColumnName(columnIndex), queryResultMetaData.getColumnLabel(columnIndex), columnIndex, dataNodeContainedRule);
}
/**
@@ -61,9 +66,10 @@ public abstract class QueryHeaderBuilder implements DatabaseTypeAwareSPI {
* @return query header
* @throws SQLException SQL exception
*/
- public final QueryHeader build(final ProjectionsContext projectionsContext, final QueryResultMetaData queryResultMetaData,
+ public QueryHeader build(final ProjectionsContext projectionsContext, final QueryResultMetaData queryResultMetaData,
final ShardingSphereMetaData metaData, final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
- return doBuild(queryResultMetaData, metaData, getColumnName(projectionsContext, queryResultMetaData, columnIndex),
+ QueryHeaderBuilder builder = QueryHeaderBuilderFactory.newInstance(databaseType);
+ return builder.build(queryResultMetaData, metaData, getColumnName(projectionsContext, queryResultMetaData, columnIndex),
getColumnLabel(projectionsContext, queryResultMetaData, columnIndex), columnIndex, dataNodeContainedRule);
}
@@ -76,7 +82,4 @@ public abstract class QueryHeaderBuilder implements DatabaseTypeAwareSPI {
Projection projection = projectionsContext.getExpandProjections().get(columnIndex - 1);
return projection instanceof ColumnProjection ? ((ColumnProjection) projection).getName() : queryResultMetaData.getColumnName(columnIndex);
}
-
- protected abstract QueryHeader doBuild(QueryResultMetaData queryResultMetaData, ShardingSphereMetaData metaData, String columnName, String columnLabel, int columnIndex,
- LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactory.java
index b9ce435475e..a08831149f5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactory.java
@@ -20,33 +20,27 @@ package org.apache.shardingsphere.proxy.backend.response.header.query;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.proxy.backend.response.header.query.impl.MySQLQueryHeaderBuilder;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ServiceLoader;
+import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.spi.type.required.RequiredSPIRegistry;
+import org.apache.shardingsphere.spi.type.typed.TypedSPIRegistry;
/**
- * Factory for {@link QueryHeaderBuilder}.
+ * Query header builder factory.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class QueryHeaderBuilderFactory {
- private static final Map<String, QueryHeaderBuilder> QUERY_HEADER_BUILDERS = new HashMap<>();
-
- private static final QueryHeaderBuilder DEFAULT_QUERY_HEADER_BUILDER = new MySQLQueryHeaderBuilder();
-
static {
- ServiceLoader.load(QueryHeaderBuilder.class).forEach(each -> QUERY_HEADER_BUILDERS.put(each.getDatabaseType(), each));
+ ShardingSphereServiceLoader.register(QueryHeaderBuilder.class);
}
/**
- * Get {@link QueryHeaderBuilder} for specified database type.
+ * Create new instance of query header builder.
*
* @param databaseType database type
- * @return query header builder
+ * @return new instance of query header builder
*/
- public static QueryHeaderBuilder getQueryHeaderBuilder(final DatabaseType databaseType) {
- return QUERY_HEADER_BUILDERS.getOrDefault(null == databaseType ? null : databaseType.getName(), DEFAULT_QUERY_HEADER_BUILDER);
+ public static QueryHeaderBuilder newInstance(final DatabaseType databaseType) {
+ return TypedSPIRegistry.findRegisteredService(QueryHeaderBuilder.class, databaseType.getName()).orElseGet(() -> RequiredSPIRegistry.getRegisteredService(QueryHeaderBuilder.class));
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
index 1ca80230d4f..5548a294f0e 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.proxy.backend.response.header.query.impl;
import lombok.SneakyThrows;
import org.apache.commons.lang3.concurrent.ConcurrentException;
import org.apache.commons.lang3.concurrent.LazyInitializer;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
@@ -34,17 +33,12 @@ import java.util.Optional;
/**
* QueryHeaderBuilder for MySQL.
*/
-public final class MySQLQueryHeaderBuilder extends QueryHeaderBuilder {
-
- @Override
- public String getDatabaseType() {
- return new MySQLDatabaseType().getName();
- }
+public final class MySQLQueryHeaderBuilder implements QueryHeaderBuilder {
@SneakyThrows(ConcurrentException.class)
@Override
- protected QueryHeader doBuild(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData, final String columnName, final String columnLabel,
- final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
+ public QueryHeader build(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData, final String columnName, final String columnLabel,
+ final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
String schemaName = null == metaData ? "" : metaData.getName();
String actualTableName = queryResultMetaData.getTableName(columnIndex);
String tableName;
@@ -66,4 +60,14 @@ public final class MySQLQueryHeaderBuilder extends QueryHeaderBuilder {
boolean autoIncrement = queryResultMetaData.isAutoIncrement(columnIndex);
return new QueryHeader(schemaName, tableName, columnLabel, columnName, columnType, columnTypeName, columnLength, decimals, signed, primaryKey, notNull, autoIncrement);
}
+
+ @Override
+ public String getType() {
+ return "MySQL";
+ }
+
+ @Override
+ public boolean isDefault() {
+ return true;
+ }
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilder.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilder.java
index 680789f002a..e17f82aef2c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilder.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilder.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.proxy.backend.response.header.query.impl;
import org.apache.commons.lang3.concurrent.LazyInitializer;
-import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
@@ -29,18 +28,18 @@ import java.sql.SQLException;
/**
* QueryHeaderBuilder for openGauss.
*/
-public final class OpenGaussQueryHeaderBuilder extends QueryHeaderBuilder {
+public final class OpenGaussQueryHeaderBuilder implements QueryHeaderBuilder {
private final PostgreSQLQueryHeaderBuilder delegated = new PostgreSQLQueryHeaderBuilder();
@Override
- public String getDatabaseType() {
- return new OpenGaussDatabaseType().getName();
+ public QueryHeader build(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData, final String columnName, final String columnLabel,
+ final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
+ return delegated.build(queryResultMetaData, metaData, columnName, columnLabel, columnIndex, dataNodeContainedRule);
}
@Override
- protected QueryHeader doBuild(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData, final String columnName, final String columnLabel,
- final int columnIndex, final LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws SQLException {
- return delegated.doBuild(queryResultMetaData, metaData, columnName, columnLabel, columnIndex, dataNodeContainedRule);
+ public String getType() {
+ return "openGauss";
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilder.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilder.java
index f15b8d5d767..76570c4f891 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilder.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilder.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.proxy.backend.response.header.query.impl;
import org.apache.commons.lang3.concurrent.LazyInitializer;
-import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
@@ -29,7 +28,7 @@ import java.sql.SQLException;
/**
* QueryHeaderBuilder for PostgreSQL.
*/
-public final class PostgreSQLQueryHeaderBuilder extends QueryHeaderBuilder {
+public final class PostgreSQLQueryHeaderBuilder implements QueryHeaderBuilder {
private static final int UNUSED_INT_FIELD = 0;
@@ -38,17 +37,17 @@ public final class PostgreSQLQueryHeaderBuilder extends QueryHeaderBuilder {
private static final boolean UNUSED_BOOLEAN_FIELD = false;
@Override
- public String getDatabaseType() {
- return new PostgreSQLDatabaseType().getName();
- }
-
- @Override
- protected QueryHeader doBuild(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData, final String columnName, final String columnLabel,
- final int columnIndex, final LazyInitializer<DataNodeContainedRule> unused) throws SQLException {
+ public QueryHeader build(final QueryResultMetaData queryResultMetaData, final ShardingSphereMetaData metaData, final String columnName, final String columnLabel,
+ final int columnIndex, final LazyInitializer<DataNodeContainedRule> unused) throws SQLException {
int columnType = queryResultMetaData.getColumnType(columnIndex);
String columnTypeName = queryResultMetaData.getColumnTypeName(columnIndex);
int columnLength = queryResultMetaData.getColumnLength(columnIndex);
return new QueryHeader(UNUSED_STRING_FIELD, UNUSED_STRING_FIELD, columnLabel, UNUSED_STRING_FIELD, columnType, columnTypeName, columnLength,
UNUSED_INT_FIELD, UNUSED_BOOLEAN_FIELD, UNUSED_BOOLEAN_FIELD, UNUSED_BOOLEAN_FIELD, UNUSED_BOOLEAN_FIELD);
}
+
+ @Override
+ public String getType() {
+ return "PostgreSQL";
+ }
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
index 3b76c40fd00..3b59defcd04 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
@@ -26,8 +26,7 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder;
-import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilderFactory;
+import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilderEngine;
import org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
import org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
@@ -66,10 +65,10 @@ public final class DatabaseAdminQueryBackendHandler implements TextProtocolBacke
List<QueryHeader> result = new ArrayList<>(queryResultMetaData.getColumnCount());
ShardingSphereMetaData metaData = null == connectionSession.getSchemaName() ? null : ProxyContext.getInstance().getMetaData(connectionSession.getSchemaName());
DatabaseType databaseType = null == metaData ? null : ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(metaData.getName()).getResource().getDatabaseType();
- QueryHeaderBuilder queryHeaderBuilder = QueryHeaderBuilderFactory.getQueryHeaderBuilder(databaseType);
+ QueryHeaderBuilderEngine queryHeaderBuilderEngine = new QueryHeaderBuilderEngine(databaseType);
LazyInitializer<DataNodeContainedRule> dataNodeContainedRule = getDataNodeContainedRuleLazyInitializer(metaData);
for (int columnIndex = 1; columnIndex <= queryResultMetaData.getColumnCount(); columnIndex++) {
- result.add(queryHeaderBuilder.build(queryResultMetaData, metaData, columnIndex, dataNodeContainedRule));
+ result.add(queryHeaderBuilderEngine.build(queryResultMetaData, metaData, columnIndex, dataNodeContainedRule));
}
return result;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder
index 2911a5e05fb..bed1e967f37 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilder
@@ -15,6 +15,6 @@
# limitations under the License.
#
-org.apache.shardingsphere.proxy.backend.response.header.query.impl.MySQLQueryHeaderBuilder
org.apache.shardingsphere.proxy.backend.response.header.query.impl.PostgreSQLQueryHeaderBuilder
+org.apache.shardingsphere.proxy.backend.response.header.query.impl.MySQLQueryHeaderBuilder
org.apache.shardingsphere.proxy.backend.response.header.query.impl.OpenGaussQueryHeaderBuilder
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
index 78952ec44d8..7a68ce83e03 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
@@ -18,11 +18,11 @@
package org.apache.shardingsphere.proxy.backend.communication.jdbc;
import lombok.SneakyThrows;
-import org.apache.commons.lang3.concurrent.ConcurrentException;
import org.apache.commons.lang3.concurrent.LazyInitializer;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
@@ -44,7 +44,7 @@ import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicati
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.response.header.query.impl.MySQLQueryHeaderBuilder;
+import org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeaderBuilderEngine;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.junit.Before;
import org.junit.Test;
@@ -118,17 +118,15 @@ public final class JDBCDatabaseCommunicationEngineTest {
assertThat(engine, instanceOf(DatabaseCommunicationEngine.class));
Field queryHeadersField = DatabaseCommunicationEngine.class.getDeclaredField("queryHeaders");
ShardingSphereMetaData metaData = createMetaData();
- FieldSetter.setField(engine, queryHeadersField, Collections.singletonList(new MySQLQueryHeaderBuilder().build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData))));
+ FieldSetter.setField(engine, queryHeadersField, Collections.singletonList(
+ new QueryHeaderBuilderEngine(new MySQLDatabaseType()).build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData))));
Field mergedResultField = DatabaseCommunicationEngine.class.getDeclaredField("mergedResult");
FieldSetter.setField(engine, mergedResultField, new MemoryMergedResult<ShardingSphereRule>(null, null, null, Collections.emptyList()) {
- private MemoryQueryResultRow memoryQueryResultRow;
-
@Override
protected List<MemoryQueryResultRow> init(final ShardingSphereRule rule, final ShardingSphereSchema schema,
final SQLStatementContext<?> sqlStatementContext, final List<QueryResult> queryResults) {
- memoryQueryResultRow = mock(MemoryQueryResultRow.class);
- return Collections.singletonList(memoryQueryResultRow);
+ return Collections.singletonList(mock(MemoryQueryResultRow.class));
}
});
Exception ex = null;
@@ -171,7 +169,7 @@ public final class JDBCDatabaseCommunicationEngineTest {
return new LazyInitializer<DataNodeContainedRule>() {
@Override
- protected DataNodeContainedRule initialize() throws ConcurrentException {
+ protected DataNodeContainedRule initialize() {
return (DataNodeContainedRule) metaData.getRuleMetaData().getRules().stream().filter(each -> each instanceof DataNodeContainedRule).findFirst().orElse(null);
}
};
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactoryTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactoryTest.java
index 67f7961fa2b..18f3a53f907 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactoryTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactoryTest.java
@@ -29,13 +29,13 @@ public final class QueryHeaderBuilderFactoryTest {
@Test
public void assertImplementedDatabaseType() {
- QueryHeaderBuilder actual = QueryHeaderBuilderFactory.getQueryHeaderBuilder(new PostgreSQLDatabaseType());
+ QueryHeaderBuilder actual = QueryHeaderBuilderFactory.newInstance(new PostgreSQLDatabaseType());
assertTrue(actual instanceof PostgreSQLQueryHeaderBuilder);
}
@Test
public void assertUnsupportedDatabaseType() {
- QueryHeaderBuilder actual = QueryHeaderBuilderFactory.getQueryHeaderBuilder(new OracleDatabaseType());
+ QueryHeaderBuilder actual = QueryHeaderBuilderFactory.newInstance(new OracleDatabaseType());
assertTrue(actual instanceof MySQLQueryHeaderBuilder);
}
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
index 3641d39d67a..d00944a782a 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
@@ -18,11 +18,7 @@
package org.apache.shardingsphere.proxy.backend.response.header.query.impl;
import org.apache.commons.lang3.concurrent.LazyInitializer;
-import org.apache.shardingsphere.infra.binder.segment.select.projection.ProjectionsContext;
-import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
-import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ExpressionProjection;
import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.resource.DataSourcesMetaData;
@@ -37,7 +33,6 @@ import org.junit.Test;
import java.sql.SQLException;
import java.sql.Types;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Optional;
@@ -54,118 +49,45 @@ public final class MySQLQueryHeaderBuilderTest {
private final QueryHeaderBuilder queryHeaderBuilder = new MySQLQueryHeaderBuilder();
@Test
- public void assertGetDatabaseType() {
- assertThat(queryHeaderBuilder.getDatabaseType(), is(new MySQLDatabaseType().getName()));
- }
-
- @Test
- public void assertQueryHeaderSchema() throws SQLException {
+ public void assertBuild() throws SQLException {
+ QueryResultMetaData queryResultMetaData = createQueryResultMetaData();
ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+ QueryHeader actual = queryHeaderBuilder.build(
+ queryResultMetaData, metaData, queryResultMetaData.getColumnName(1), queryResultMetaData.getColumnLabel(1), 1, getDataNodeContainedRule(metaData));
assertThat(actual.getSchema(), is("sharding_schema"));
- }
-
- @Test
- public void assertQueryHeaderTable() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
assertThat(actual.getTable(), is("t_logic_order"));
- }
-
- @Test
- public void assertQueryHeaderColumnLabel() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
assertThat(actual.getColumnLabel(), is("order_id"));
- }
-
- @Test
- public void assertQueryHeaderColumnNameWithoutProjectionsContext() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
assertThat(actual.getColumnName(), is("order_id"));
- }
-
- @Test
- public void assertQueryHeaderColumnNameFromProjectionsContext() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createProjectionsContext(), createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
- assertThat(actual.getColumnName(), is("order_id"));
- }
-
- @Test
- public void assertQueryHeaderColumnNameFromMetaData() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createProjectionsContext(), createQueryResultMetaData(), metaData, 2, getDataNodeContainedRule(metaData));
- assertThat(actual.getColumnName(), is("expr"));
- }
-
- @Test
- public void assertQueryHeaderColumnLength() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
assertThat(actual.getColumnLength(), is(1));
- }
-
- @Test
- public void assertQueryHeaderColumnType() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
assertThat(actual.getColumnType(), is(Types.INTEGER));
- }
-
- @Test
- public void assertQueryHeaderDecimals() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
assertThat(actual.getDecimals(), is(1));
- }
-
- @Test
- public void assertQueryHeaderSigned() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
assertTrue(actual.isSigned());
- }
-
- @Test
- public void assertQueryHeaderPrimaryKey() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
assertTrue(actual.isPrimaryKey());
+ assertTrue(actual.isNotNull());
+ assertTrue(actual.isAutoIncrement());
}
@Test
public void assertQueryHeaderPrimaryKeyWithoutColumn() throws SQLException {
+ QueryResultMetaData queryResultMetaData = createQueryResultMetaData();
ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 2, getDataNodeContainedRule(metaData));
+ QueryHeader actual = queryHeaderBuilder.build(
+ queryResultMetaData, metaData, queryResultMetaData.getColumnName(2), queryResultMetaData.getColumnLabel(2), 2, getDataNodeContainedRule(metaData));
assertFalse(actual.isPrimaryKey());
}
- @Test
- public void assertQueryHeaderNotNull() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
- assertTrue(actual.isNotNull());
- }
-
- @Test
- public void assertQueryHeaderAutoIncrement() throws SQLException {
- ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
- assertTrue(actual.isAutoIncrement());
- }
-
@Test
public void assertDataNodeContainedRuleIsNotPresent() throws SQLException {
+ QueryResultMetaData queryResultMetaData = createQueryResultMetaData();
ShardingSphereMetaData metaData = createMetaData();
- QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, new LazyInitializer<DataNodeContainedRule>() {
-
- @Override
- protected DataNodeContainedRule initialize() {
- return null;
- }
- });
+ QueryHeader actual = queryHeaderBuilder.build(queryResultMetaData, metaData, queryResultMetaData.getColumnName(1), queryResultMetaData.getColumnLabel(1), 1,
+ new LazyInitializer<DataNodeContainedRule>() {
+
+ @Override
+ protected DataNodeContainedRule initialize() {
+ return null;
+ }
+ });
assertFalse(actual.isPrimaryKey());
assertThat(actual.getTable(), is("t_order"));
}
@@ -187,10 +109,6 @@ public final class MySQLQueryHeaderBuilderTest {
return result;
}
- private ProjectionsContext createProjectionsContext() {
- return new ProjectionsContext(0, 0, false, Arrays.asList(new ColumnProjection("o", "order_id", "id"), new ExpressionProjection("o.order_id + 1", "expr")));
- }
-
private QueryResultMetaData createQueryResultMetaData() throws SQLException {
QueryResultMetaData result = mock(QueryResultMetaData.class);
when(result.getTableName(1)).thenReturn("t_order");
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
index c4f04e4e7ad..982051a07e9 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.proxy.backend.response.header.query.impl;
-import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.junit.Test;
@@ -31,11 +30,6 @@ import static org.mockito.Mockito.when;
public final class OpenGaussQueryHeaderBuilderTest {
- @Test
- public void assertDatabaseType() {
- assertThat(new OpenGaussQueryHeaderBuilder().getDatabaseType(), is(new OpenGaussDatabaseType().getName()));
- }
-
@Test
public void assertBuildOpenGaussQueryHeader() throws SQLException {
final int columnIndex = 1;
@@ -44,8 +38,8 @@ public final class OpenGaussQueryHeaderBuilderTest {
when(queryResultMetaData.getColumnType(columnIndex)).thenReturn(Types.INTEGER);
when(queryResultMetaData.getColumnTypeName(columnIndex)).thenReturn("int");
when(queryResultMetaData.getColumnLength(columnIndex)).thenReturn(11);
- QueryHeader expected = new PostgreSQLQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
- QueryHeader actual = new OpenGaussQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
+ QueryHeader expected = new PostgreSQLQueryHeaderBuilder().build(queryResultMetaData, null, null, queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
+ QueryHeader actual = new OpenGaussQueryHeaderBuilder().build(queryResultMetaData, null, null, queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
assertThat(actual.getColumnLabel(), is(expected.getColumnLabel()));
assertThat(actual.getColumnType(), is(expected.getColumnType()));
assertThat(actual.getColumnTypeName(), is(expected.getColumnTypeName()));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
index 755ff182ec8..8bc9295b224 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.proxy.backend.response.header.query.impl;
-import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.junit.Test;
@@ -39,15 +38,10 @@ public final class PostgreSQLQueryHeaderBuilderTest {
when(queryResultMetaData.getColumnType(columnIndex)).thenReturn(Types.INTEGER);
when(queryResultMetaData.getColumnTypeName(columnIndex)).thenReturn("int");
when(queryResultMetaData.getColumnLength(columnIndex)).thenReturn(11);
- QueryHeader actual = new PostgreSQLQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
+ QueryHeader actual = new PostgreSQLQueryHeaderBuilder().build(queryResultMetaData, null, null, queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
assertThat(actual.getColumnLabel(), is("label"));
assertThat(actual.getColumnType(), is(Types.INTEGER));
assertThat(actual.getColumnTypeName(), is("int"));
assertThat(actual.getColumnLength(), is(11));
}
-
- @Test
- public void assertDatabaseType() {
- assertThat(new PostgreSQLQueryHeaderBuilder().getDatabaseType(), is(new PostgreSQLDatabaseType().getName()));
- }
}