private int setDistinctFunctionAlias(final SelectItemSegment selectItemSegment, final int offset) { if (selectItemSegment instanceof AggregationSelectItemSegment) { AggregationSelectItemSegment aggregationSelectItemSegment = (AggregationSelectItemSegment) selectItemSegment; Optional<String> alias = aggregationSelectItemSegment.getAlias(); if (aggregationSelectItemSegment instanceof AggregationDistinctSelectItemSegment && !alias.isPresent()) { ((AggregationSelectItemSegment) selectItemSegment).setAlias(DerivedAlias.AGGREGATION_DISTINCT_DERIVED.getDerivedAlias(offset)); return offset + 1; } } return offset; }
/** * Judge is derived alias or not. * * @param aliasName alias name to be judged * @return is derived alias or not */ public static boolean isDerivedAlias(final String aliasName) { for (DerivedAlias each : DerivedAlias.values()) { if (aliasName.startsWith(each.pattern)) { return true; } } return false; } }
private void fillAggregationDistinctSelectItemSegment(final AggregationDistinctSelectItemSegment selectItemSegment, final SelectStatement selectStatement) { selectStatement.getItems().add( new AggregationDistinctSelectItem(selectItemSegment.getType(), selectItemSegment.getInnerExpression(), selectItemSegment.getAlias(), selectItemSegment.getDistinctExpression())); Optional<String> derivedAlias = Optional.absent(); if (DerivedAlias.isDerivedAlias(selectItemSegment.getAlias().get())) { derivedAlias = Optional.of(selectItemSegment.getAlias().get()); } selectStatement.getSQLTokens().add(new AggregationDistinctToken(selectItemSegment.getStartIndex(), selectItemSegment.getStopIndex(), selectItemSegment.getDistinctExpression(), derivedAlias)); }
private SelectItem getAggregationDistinctSelectItem(final SelectStatement selectStatement, final AggregationType aggregationType, final int beginPosition, final int endPosition, final String innerExpression) { Optional<String> alias = aliasExpressionParser.parseSelectItemAlias().isPresent() ? aliasExpressionParser.parseSelectItemAlias() : Optional.of(DerivedAlias.AGGREGATION_DISTINCT_DERIVED.getDerivedAlias(selectStatement.getAggregationDistinctSelectItems().size())); AggregationDistinctSelectItem result = new AggregationDistinctSelectItem( aggregationType, innerExpression, alias, getDistinctColumnName(innerExpression)); selectStatement.getSQLTokens().add(new AggregationDistinctToken(beginPosition, endPosition - 1, result.getDistinctColumnName(), alias)); return result; }