提交 7114aced 编写于 作者: T tristaZero

get owner for star select item.

上级 a04c2a65
......@@ -83,7 +83,10 @@ public class SelectListClauseParser implements SQLClauseParser {
result = parseAggregationSelectItem(selectStatement);
parseRestSelectItem(selectStatement);
} else {
result = new CommonSelectItem(SQLUtil.getExactlyValue(parseCommonSelectItem(selectStatement) + parseRestSelectItem(selectStatement)), aliasExpressionParser.parseSelectItemAlias());
SelectItem selectItem = parseCommonOrStarSelectItem(selectStatement);
result = selectItem instanceof StarSelectItem ? selectItem
: new CommonSelectItem(SQLUtil.getExactlyValue(selectItem.getExpression()
+ parseRestSelectItem(selectStatement)), aliasExpressionParser.parseSelectItemAlias());
}
return result;
}
......@@ -110,17 +113,13 @@ public class SelectListClauseParser implements SQLClauseParser {
return new StarSelectItem(Optional.<String>absent());
}
private boolean isAggregationSelectItem() {
return lexerEngine.equalAny(DefaultKeyword.MAX, DefaultKeyword.MIN, DefaultKeyword.SUM, DefaultKeyword.AVG, DefaultKeyword.COUNT);
}
private SelectItem parseAggregationSelectItem(final SelectStatement selectStatement) {
AggregationType aggregationType = AggregationType.valueOf(lexerEngine.getCurrentToken().getLiterals().toUpperCase());
private SelectItem parseStarSelectItem(final String owner) {
lexerEngine.nextToken();
return new AggregationSelectItem(aggregationType, lexerEngine.skipParentheses(selectStatement), aliasExpressionParser.parseSelectItemAlias());
aliasExpressionParser.parseSelectItemAlias();
return new StarSelectItem(Optional.fromNullable(owner));
}
private String parseCommonSelectItem(final SelectStatement selectStatement) {
private SelectItem parseCommonOrStarSelectItem(final SelectStatement selectStatement) {
String literals = lexerEngine.getCurrentToken().getLiterals();
int position = lexerEngine.getCurrentToken().getEndPosition() - literals.length();
StringBuilder result = new StringBuilder();
......@@ -135,10 +134,24 @@ public class SelectListClauseParser implements SQLClauseParser {
}
result.append(lexerEngine.getCurrentToken().getLiterals());
lexerEngine.nextToken();
if (lexerEngine.equalAny(Symbol.STAR)) {
return parseStarSelectItem(literals);
}
result.append(lexerEngine.getCurrentToken().getLiterals());
lexerEngine.nextToken();
}
return result.toString();
return new CommonSelectItem(result.toString(), Optional.<String>absent());
}
private boolean isAggregationSelectItem() {
return lexerEngine.equalAny(DefaultKeyword.MAX, DefaultKeyword.MIN, DefaultKeyword.SUM, DefaultKeyword.AVG, DefaultKeyword.COUNT);
}
private SelectItem parseAggregationSelectItem(final SelectStatement selectStatement) {
AggregationType aggregationType = AggregationType.valueOf(lexerEngine.getCurrentToken().getLiterals().toUpperCase());
lexerEngine.nextToken();
return new AggregationSelectItem(aggregationType, lexerEngine.skipParentheses(selectStatement), aliasExpressionParser.parseSelectItemAlias());
}
private String parseRestSelectItem(final SelectStatement selectStatement) {
......@@ -146,7 +159,8 @@ public class SelectListClauseParser implements SQLClauseParser {
while (lexerEngine.equalAny(Symbol.getOperators())) {
result.append(lexerEngine.getCurrentToken().getLiterals());
lexerEngine.nextToken();
result.append(parseCommonSelectItem(selectStatement));
SelectItem selectItem = parseCommonOrStarSelectItem(selectStatement);
result.append(selectItem.getExpression());
}
return result.toString();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册