@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; }
/** * Judge is derived column or not. * * @param columnName column name to be judged * @return is derived column or not */ public static boolean isDerivedColumn(final String columnName) { for (DerivedColumn each : DerivedColumn.values()) { if (columnName.startsWith(each.pattern)) { return true; } } return false; } }
private void appendDerivedOrderColumns(final ItemsToken itemsToken, final List<OrderItem> orderItems, final SelectStatement selectStatement) { int derivedColumnOffset = 0; for (OrderItem each : orderItems) { if (!containsItem(selectStatement, each)) { String alias = DerivedColumn.ORDER_BY_ALIAS.getDerivedColumnAlias(derivedColumnOffset++); each.setAlias(alias); itemsToken.getItems().add(each.getQualifiedName().get() + " AS " + alias + " "); } } }
private void appendDerivedOrderColumns(final ItemsToken itemsToken, final List<OrderItem> orderItems, final SelectStatement selectStatement, final ShardingTableMetaData shardingTableMetaData) { int derivedColumnOffset = 0; for (OrderItem each : orderItems) { if (!containsItem(selectStatement, each, shardingTableMetaData)) { String alias = DerivedColumn.ORDER_BY_ALIAS.getDerivedColumnAlias(derivedColumnOffset++); each.setAlias(alias); itemsToken.getItems().add(each.getQualifiedName().get() + " AS " + alias + " "); } } }
private PostgreSQLQueryResponsePackets getQueryResponsePacketsWithoutDerivedColumns(final PostgreSQLQueryResponsePackets postgreSQLQueryResponsePackets) { int columnCount = 0; List<PostgreSQLColumnDescription> postgreSQLColumnDescriptions = new ArrayList<>(postgreSQLQueryResponsePackets.getColumnCount()); for (PostgreSQLColumnDescription each : postgreSQLQueryResponsePackets.getPostgreSQLRowDescriptionPacket().getPostgreSQLColumnDescriptions()) { if (!DerivedColumn.isDerivedColumn(each.getColumnName())) { postgreSQLColumnDescriptions.add(each); columnCount++; } } return new PostgreSQLQueryResponsePackets(new PostgreSQLRowDescriptionPacket(columnCount, postgreSQLColumnDescriptions)); }
private void appendDerivedGroupColumns(final ItemsToken itemsToken, final List<OrderItem> orderItems, final SelectStatement selectStatement, final ShardingTableMetaData shardingTableMetaData) { int derivedColumnOffset = 0; for (OrderItem each : orderItems) { if (!containsItem(selectStatement, each, shardingTableMetaData)) { String alias = DerivedColumn.GROUP_BY_ALIAS.getDerivedColumnAlias(derivedColumnOffset++); each.setAlias(alias); itemsToken.getItems().add(each.getQualifiedName().get() + " AS " + alias + " "); } } }
private QueryResponsePackets getQueryResponsePacketsWithoutDerivedColumns(final QueryResponsePackets queryResponsePackets) { Collection<ColumnDefinition41Packet> columnDefinition41Packets = new ArrayList<>(queryResponsePackets.getColumnCount()); int columnCount = 0; for (ColumnDefinition41Packet each : queryResponsePackets.getColumnDefinition41Packets()) { if (!DerivedColumn.isDerivedColumn(each.getName())) { columnDefinition41Packets.add(each); columnCount++; } } FieldCountPacket fieldCountPacket = new FieldCountPacket(1, columnCount); return new QueryResponsePackets(fieldCountPacket, columnDefinition41Packets, new EofPacket(columnCount + 2)); }
private void appendDerivedGroupColumns(final ItemsToken itemsToken, final List<OrderItem> orderItems, final SelectStatement selectStatement) { int derivedColumnOffset = 0; for (OrderItem each : orderItems) { if (!containsItem(selectStatement, each)) { String alias = DerivedColumn.GROUP_BY_ALIAS.getDerivedColumnAlias(derivedColumnOffset++); each.setAlias(alias); itemsToken.getItems().add(each.getQualifiedName().get() + " AS " + alias + " "); } } }
private void appendAvgDerivedColumns(final ItemsToken itemsToken, final SelectStatement selectStatement) { int derivedColumnOffset = 0; for (SelectItem each : selectStatement.getItems()) { if (!(each instanceof AggregationSelectItem) || AggregationType.AVG != ((AggregationSelectItem) each).getType()) { continue; } AggregationSelectItem avgItem = (AggregationSelectItem) each; String countAlias = DerivedColumn.AVG_COUNT_ALIAS.getDerivedColumnAlias(derivedColumnOffset); AggregationSelectItem countItem = new AggregationSelectItem(AggregationType.COUNT, avgItem.getInnerExpression(), Optional.of(countAlias)); String sumAlias = DerivedColumn.AVG_SUM_ALIAS.getDerivedColumnAlias(derivedColumnOffset); AggregationSelectItem sumItem = new AggregationSelectItem(AggregationType.SUM, avgItem.getInnerExpression(), Optional.of(sumAlias)); avgItem.getDerivedAggregationSelectItems().add(countItem); avgItem.getDerivedAggregationSelectItems().add(sumItem); // TODO replace avg to constant, avoid calculate useless avg itemsToken.getItems().add(countItem.getExpression() + " AS " + countAlias + " "); itemsToken.getItems().add(sumItem.getExpression() + " AS " + sumAlias + " "); derivedColumnOffset++; } }
private void appendAvgDerivedColumns(final ItemsToken itemsToken, final SelectStatement selectStatement) { int derivedColumnOffset = 0; for (SelectItem each : selectStatement.getItems()) { if (!isAverageSelectItem(each)) { continue; } AggregationSelectItem avgItem = (AggregationSelectItem) each; String countAlias = DerivedColumn.AVG_COUNT_ALIAS.getDerivedColumnAlias(derivedColumnOffset); AggregationSelectItem countItem = new AggregationSelectItem(AggregationType.COUNT, avgItem.getInnerExpression(), Optional.of(countAlias)); String sumAlias = DerivedColumn.AVG_SUM_ALIAS.getDerivedColumnAlias(derivedColumnOffset); AggregationSelectItem sumItem = new AggregationSelectItem(AggregationType.SUM, avgItem.getInnerExpression(), Optional.of(sumAlias)); avgItem.getDerivedAggregationSelectItems().add(countItem); avgItem.getDerivedAggregationSelectItems().add(sumItem); // TODO replace avg to constant, avoid calculate useless avg if (!(avgItem instanceof AggregationDistinctSelectItem)) { itemsToken.getItems().add(countItem.getExpression() + " AS " + countAlias + " "); itemsToken.getItems().add(sumItem.getExpression() + " AS " + sumAlias + " "); } derivedColumnOffset++; } }