From 3dd50bd3debf1f0273e40db1347c9bd4440a62e0 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 9 Aug 2018 14:26:12 +0800 Subject: [PATCH] for #1120, filter derived column for sharding-jdbc --- .../adapter/AbstractResultSetAdapter.java | 3 +- .../GeneratedKeysResultSetMetaData.java | 2 +- .../resultset/ShardingResultSetMetaData.java | 147 +++++++++++++ .../cases/dql/dataset/db/select_avg.xml | 4 +- .../dataset/db/select_group_by_with_avg.xml | 42 ++-- ...select_group_by_without_grouped_column.xml | 5 +- .../db/select_order_by_desc_and_index_asc.xml | 161 +++++++------- .../dataset/db/select_order_by_with_date.xml | 161 +++++++------- ...t_pagination_with_row_number_and_limit.xml | 5 +- .../dql/dataset/db/select_with_expression.xml | 81 ++++--- .../dbtbl_with_masterslave/select_avg.xml | 4 +- .../select_group_by_with_avg.xml | 22 +- ...select_group_by_without_grouped_column.xml | 5 +- .../select_order_by_desc_and_index_asc.xml | 1 - .../select_order_by_with_date.xml | 1 - ...t_pagination_with_row_number_and_limit.xml | 5 +- .../select_with_expression.xml | 201 +++++++++--------- .../cases/dql/dataset/tbl/select_avg.xml | 4 +- .../dataset/tbl/select_group_by_with_avg.xml | 6 +- ...select_group_by_without_grouped_column.xml | 5 +- .../select_order_by_desc_and_index_asc.xml | 81 ++++--- .../dataset/tbl/select_order_by_with_date.xml | 81 ++++--- ...t_pagination_with_row_number_and_limit.xml | 5 +- .../dataset/tbl/select_with_expression.xml | 41 ++-- 24 files changed, 597 insertions(+), 476 deletions(-) create mode 100644 sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/resultset/ShardingResultSetMetaData.java diff --git a/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/adapter/AbstractResultSetAdapter.java b/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/adapter/AbstractResultSetAdapter.java index ec19397d821bf..d941614ffc850 100644 --- a/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/adapter/AbstractResultSetAdapter.java +++ b/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/adapter/AbstractResultSetAdapter.java @@ -18,6 +18,7 @@ package io.shardingsphere.core.jdbc.adapter; import com.google.common.base.Preconditions; +import io.shardingsphere.core.jdbc.core.resultset.ShardingResultSetMetaData; import io.shardingsphere.core.jdbc.unsupported.AbstractUnsupportedOperationResultSet; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -55,7 +56,7 @@ public AbstractResultSetAdapter(final List resultSets, final Statemen @Override public final ResultSetMetaData getMetaData() throws SQLException { - return resultSets.get(0).getMetaData(); + return new ShardingResultSetMetaData(resultSets.get(0).getMetaData()); } @Override diff --git a/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/resultset/GeneratedKeysResultSetMetaData.java b/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/resultset/GeneratedKeysResultSetMetaData.java index 13c4ee37ffef8..3a26c7c4f1c21 100644 --- a/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/resultset/GeneratedKeysResultSetMetaData.java +++ b/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/resultset/GeneratedKeysResultSetMetaData.java @@ -25,7 +25,7 @@ import java.sql.Types; /** - * ResultSet metadata for generated keys. + * Result set meta data for generated keys. * * @author gaohongtao */ diff --git a/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/resultset/ShardingResultSetMetaData.java b/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/resultset/ShardingResultSetMetaData.java new file mode 100644 index 0000000000000..0550da4ba8d6a --- /dev/null +++ b/sharding-jdbc/src/main/java/io/shardingsphere/core/jdbc/core/resultset/ShardingResultSetMetaData.java @@ -0,0 +1,147 @@ +/* + * Copyright 2016-2018 shardingsphere.io. + *

+ * Licensed 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 io.shardingsphere.core.jdbc.core.resultset; + +import io.shardingsphere.core.jdbc.adapter.WrapperAdapter; +import io.shardingsphere.core.parsing.parser.constant.DerivedColumn; +import lombok.RequiredArgsConstructor; + +import java.sql.ResultSetMetaData; +import java.sql.SQLException; + +/** + * Sharding result set meta data. + * + * @author zhangliang + */ +@RequiredArgsConstructor +public final class ShardingResultSetMetaData extends WrapperAdapter implements ResultSetMetaData { + + private final ResultSetMetaData resultSetMetaData; + + @Override + public int getColumnCount() throws SQLException { + int result = 0; + for (int columnIndex = 1; columnIndex <= resultSetMetaData.getColumnCount(); columnIndex++) { + if (!DerivedColumn.isDerivedColumn(resultSetMetaData.getColumnLabel(columnIndex))) { + result++; + } + } + return result; + } + + @Override + public boolean isAutoIncrement(final int column) throws SQLException { + return resultSetMetaData.isAutoIncrement(column); + } + + @Override + public boolean isCaseSensitive(final int column) throws SQLException { + return resultSetMetaData.isCaseSensitive(column); + } + + @Override + public boolean isSearchable(final int column) throws SQLException { + return resultSetMetaData.isSearchable(column); + } + + @Override + public boolean isCurrency(final int column) throws SQLException { + return resultSetMetaData.isCurrency(column); + } + + @Override + public int isNullable(final int column) throws SQLException { + return resultSetMetaData.isNullable(column); + } + + @Override + public boolean isSigned(final int column) throws SQLException { + return resultSetMetaData.isSigned(column); + } + + @Override + public int getColumnDisplaySize(final int column) throws SQLException { + return resultSetMetaData.getColumnDisplaySize(column); + } + + @Override + public String getColumnLabel(final int column) throws SQLException { + return resultSetMetaData.getColumnLabel(column); + } + + @Override + public String getColumnName(final int column) throws SQLException { + return resultSetMetaData.getColumnName(column); + } + + @Override + public String getSchemaName(final int column) throws SQLException { + return resultSetMetaData.getSchemaName(column); + } + + @Override + public int getPrecision(final int column) throws SQLException { + return resultSetMetaData.getPrecision(column); + } + + @Override + public int getScale(final int column) throws SQLException { + return resultSetMetaData.getScale(column); + } + + @Override + public String getTableName(final int column) throws SQLException { + return resultSetMetaData.getTableName(column); + } + + @Override + public String getCatalogName(final int column) throws SQLException { + return resultSetMetaData.getCatalogName(column); + } + + @Override + public int getColumnType(final int column) throws SQLException { + return resultSetMetaData.getColumnType(column); + } + + @Override + public String getColumnTypeName(final int column) throws SQLException { + return resultSetMetaData.getColumnTypeName(column); + } + + @Override + public boolean isReadOnly(final int column) throws SQLException { + return resultSetMetaData.isReadOnly(column); + } + + @Override + public boolean isWritable(final int column) throws SQLException { + return resultSetMetaData.isWritable(column); + } + + @Override + public boolean isDefinitelyWritable(final int column) throws SQLException { + return resultSetMetaData.isDefinitelyWritable(column); + } + + @Override + public String getColumnClassName(final int column) throws SQLException { + return resultSetMetaData.getColumnClassName(column); + } +} diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_avg.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_avg.xml index 401ecdb6b83d1..290cc8b0f3ab9 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_avg.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_avg.xml @@ -1,8 +1,6 @@ - - - + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_group_by_with_avg.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_group_by_with_avg.xml index 5076e53c7db99..a7f7c6e274bf9 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_group_by_with_avg.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_group_by_with_avg.xml @@ -2,27 +2,25 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_group_by_without_grouped_column.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_group_by_without_grouped_column.xml index 9bcbb53b85eee..26b1167c7d6e9 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_group_by_without_grouped_column.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_group_by_without_grouped_column.xml @@ -1,8 +1,7 @@ - - - + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_order_by_desc_and_index_asc.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_order_by_desc_and_index_asc.xml index d1bef7a93e65f..07200bcec11cd 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_order_by_desc_and_index_asc.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_order_by_desc_and_index_asc.xml @@ -5,86 +5,85 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_order_by_with_date.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_order_by_with_date.xml index d1bef7a93e65f..07200bcec11cd 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_order_by_with_date.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_order_by_with_date.xml @@ -5,86 +5,85 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_pagination_with_row_number_and_limit.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_pagination_with_row_number_and_limit.xml index 00ecc07eb0dd2..03dbe69922bc1 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_pagination_with_row_number_and_limit.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_pagination_with_row_number_and_limit.xml @@ -5,8 +5,7 @@ - - - + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_with_expression.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_with_expression.xml index 4342bb10faa03..7aeb183d0b9f5 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_with_expression.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/db/select_with_expression.xml @@ -1,46 +1,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_avg.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_avg.xml index 68ef4ca247351..9b6b22ab882c7 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_avg.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_avg.xml @@ -1,8 +1,6 @@ - - - + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_group_by_with_avg.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_group_by_with_avg.xml index a3948f0d84a86..e8f8a0260655f 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_group_by_with_avg.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_group_by_with_avg.xml @@ -2,17 +2,15 @@ - - - - - - - - - - - - + + + + + + + + + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_group_by_without_grouped_column.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_group_by_without_grouped_column.xml index 3005656eb6725..f8f37eb485f3f 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_group_by_without_grouped_column.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_group_by_without_grouped_column.xml @@ -1,8 +1,7 @@ - - - + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_order_by_desc_and_index_asc.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_order_by_desc_and_index_asc.xml index f4ba798bf509e..ab55cf4a2d0d0 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_order_by_desc_and_index_asc.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_order_by_desc_and_index_asc.xml @@ -5,6 +5,5 @@ - diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_order_by_with_date.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_order_by_with_date.xml index f4ba798bf509e..ab55cf4a2d0d0 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_order_by_with_date.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_order_by_with_date.xml @@ -5,6 +5,5 @@ - diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_pagination_with_row_number_and_limit.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_pagination_with_row_number_and_limit.xml index 0d99717a60553..d1de128735a24 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_pagination_with_row_number_and_limit.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_pagination_with_row_number_and_limit.xml @@ -5,8 +5,7 @@ - - - + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_with_expression.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_with_expression.xml index 75104707db64e..5e75601385ce5 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_with_expression.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/dbtbl_with_masterslave/select_with_expression.xml @@ -1,106 +1,105 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_avg.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_avg.xml index 6c135954eef86..0d54113846a80 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_avg.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_avg.xml @@ -1,8 +1,6 @@ - - - + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_group_by_with_avg.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_group_by_with_avg.xml index 53fa098cf0b1f..c95e5e8ac5bec 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_group_by_with_avg.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_group_by_with_avg.xml @@ -2,9 +2,7 @@ - - - - + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_group_by_without_grouped_column.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_group_by_without_grouped_column.xml index 3005656eb6725..f8f37eb485f3f 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_group_by_without_grouped_column.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_group_by_without_grouped_column.xml @@ -1,8 +1,7 @@ - - - + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_order_by_desc_and_index_asc.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_order_by_desc_and_index_asc.xml index 5fe27842bcd30..36739c810117d 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_order_by_desc_and_index_asc.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_order_by_desc_and_index_asc.xml @@ -5,46 +5,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_order_by_with_date.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_order_by_with_date.xml index 5fe27842bcd30..36739c810117d 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_order_by_with_date.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_order_by_with_date.xml @@ -5,46 +5,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_pagination_with_row_number_and_limit.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_pagination_with_row_number_and_limit.xml index a84f46a14a9b3..a2c10abce6831 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_pagination_with_row_number_and_limit.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_pagination_with_row_number_and_limit.xml @@ -5,8 +5,7 @@ - - - + + diff --git a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_with_expression.xml b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_with_expression.xml index 6c6fc3e759ad2..40644b52f7e84 100644 --- a/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_with_expression.xml +++ b/sharding-jdbc/src/test/resources/asserts/cases/dql/dataset/tbl/select_with_expression.xml @@ -1,26 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +