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 a54ae1d Fix PostgreSQL select no columns cause NPE (#10632)
a54ae1d is described below
commit a54ae1d11be2a2f651c08470a9890d3d5768d893
Author: 吴伟杰 <[email protected]>
AuthorDate: Thu Jun 3 14:10:14 2021 +0800
Fix PostgreSQL select no columns cause NPE (#10632)
* Fix PostgreSQL select no columns cause NPE
* Remove unused imports
---
.../command/query/text/PostgreSQLComQueryExecutor.java | 12 +++---------
.../command/query/text/PostgreSQLComQueryExecutorTest.java | 6 +++---
.../statement/impl/PostgreSQLStatementSQLVisitor.java | 2 ++
3 files changed, 8 insertions(+), 12 deletions(-)
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutor.java
index 4025cf0..17d416f 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutor.java
@@ -43,8 +43,6 @@ import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
-import java.util.List;
-import java.util.Optional;
/**
* Command query executor for PostgreSQL.
@@ -64,20 +62,16 @@ public final class PostgreSQLComQueryExecutor implements
QueryCommandExecutor {
public Collection<DatabasePacket<?>> execute() throws SQLException {
ResponseHeader responseHeader = textProtocolBackendHandler.execute();
if (responseHeader instanceof QueryResponseHeader) {
- Optional<PostgreSQLRowDescriptionPacket> result =
createQueryPacket((QueryResponseHeader) responseHeader);
- return
result.<List<DatabasePacket<?>>>map(Collections::singletonList).orElseGet(Collections::emptyList);
+ return
Collections.singletonList(createQueryPacket((QueryResponseHeader)
responseHeader));
}
responseType = ResponseType.UPDATE;
return
Collections.singletonList(createUpdatePacket((UpdateResponseHeader)
responseHeader));
}
- private Optional<PostgreSQLRowDescriptionPacket> createQueryPacket(final
QueryResponseHeader queryResponseHeader) {
+ private PostgreSQLRowDescriptionPacket createQueryPacket(final
QueryResponseHeader queryResponseHeader) {
Collection<PostgreSQLColumnDescription> columnDescriptions =
createColumnDescriptions(queryResponseHeader);
- if (columnDescriptions.isEmpty()) {
- return Optional.empty();
- }
responseType = ResponseType.QUERY;
- return Optional.of(new
PostgreSQLRowDescriptionPacket(columnDescriptions.size(), columnDescriptions));
+ return new PostgreSQLRowDescriptionPacket(columnDescriptions.size(),
columnDescriptions);
}
private Collection<PostgreSQLColumnDescription>
createColumnDescriptions(final QueryResponseHeader queryResponseHeader) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutorTest.java
index 1118f7e..b127d89 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/text/PostgreSQLComQueryExecutorTest.java
@@ -46,7 +46,6 @@ import java.util.Collections;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@@ -85,8 +84,9 @@ public final class PostgreSQLComQueryExecutorTest {
QueryResponseHeader queryResponseHeader =
mock(QueryResponseHeader.class);
when(textProtocolBackendHandler.execute()).thenReturn(queryResponseHeader);
Collection<DatabasePacket<?>> actual = queryExecutor.execute();
- assertTrue(actual.isEmpty());
- assertNull(queryExecutor.getResponseType());
+ assertThat(actual.size(), is(1));
+ assertThat(actual.iterator().next(),
is(instanceOf(PostgreSQLRowDescriptionPacket.class)));
+ assertThat(queryExecutor.getResponseType(), is(ResponseType.QUERY));
verify(queryResponseHeader).getQueryHeaders();
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
index f10447f..391ebbf 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
@@ -773,6 +773,8 @@ public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementB
projects.setDistinctRow(true);
}
result.setProjections(projects);
+ } else {
+ result.setProjections(new ProjectionsSegment(-1, -1));
}
if (null != ctx.fromClause()) {
TableSegment tableSegment = (TableSegment) visit(ctx.fromClause());