[GitHub] [incubator-pinot] jackjlli commented on a change in pull request #6066: Detect the behavior when column name mismatches in the query
jackjlli commented on a change in pull request #6066: URL: https://github.com/apache/incubator-pinot/pull/6066#discussion_r503610443 ## File path: pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java ## @@ -769,94 +786,133 @@ private void updateColumnNames(BrokerRequest brokerRequest) { for (int i = 0; i < selectionColumns.size(); i++) { String expression = selectionColumns.get(i); if (!expression.equals("*")) { - selectionColumns.set(i, fixColumnName(rawTableName, expression, columnNameMap)); + selectionColumns.set(i, fixColumnName(rawTableName, expression, columnNameMap, query)); } } } if (brokerRequest.isSetOrderBy()) { List orderBy = brokerRequest.getOrderBy(); for (SelectionSort selectionSort : orderBy) { String expression = selectionSort.getColumn(); -selectionSort.setColumn(fixColumnName(rawTableName, expression, columnNameMap)); +selectionSort.setColumn(fixColumnName(rawTableName, expression, columnNameMap, query)); } } PinotQuery pinotQuery = brokerRequest.getPinotQuery(); if (pinotQuery != null) { for (Expression expression : pinotQuery.getSelectList()) { -fixColumnName(rawTableName, expression, columnNameMap); +fixColumnName(rawTableName, expression, columnNameMap, query); } Expression filterExpression = pinotQuery.getFilterExpression(); if (filterExpression != null) { -fixColumnName(rawTableName, filterExpression, columnNameMap); +fixColumnName(rawTableName, filterExpression, columnNameMap, query); } List groupByList = pinotQuery.getGroupByList(); if (groupByList != null) { for (Expression expression : groupByList) { - fixColumnName(rawTableName, expression, columnNameMap); + fixColumnName(rawTableName, expression, columnNameMap, query); } } List orderByList = pinotQuery.getOrderByList(); if (orderByList != null) { for (Expression expression : orderByList) { - fixColumnName(rawTableName, expression, columnNameMap); + fixColumnName(rawTableName, expression, columnNameMap, query); } } Expression havingExpression = pinotQuery.getHavingExpression(); if (havingExpression != null) { -fixColumnName(rawTableName, havingExpression, columnNameMap); +fixColumnName(rawTableName, havingExpression, columnNameMap, query); } } } - private String fixColumnName(String rawTableName, String expression, @Nullable Map columnNameMap) { + private String fixColumnName(String rawTableName, String expression, @Nullable Map columnNameMap, + String query) { TransformExpressionTree expressionTree = TransformExpressionTree.compileToExpressionTree(expression); -fixColumnName(rawTableName, expressionTree, columnNameMap); +fixColumnName(rawTableName, expressionTree, columnNameMap, query); return expressionTree.toString(); } private void fixColumnName(String rawTableName, TransformExpressionTree expression, - @Nullable Map columnNameMap) { + @Nullable Map columnNameMap, String query) { TransformExpressionTree.ExpressionType expressionType = expression.getExpressionType(); if (expressionType == TransformExpressionTree.ExpressionType.IDENTIFIER) { - expression.setValue(getActualColumnName(rawTableName, expression.getValue(), columnNameMap)); + expression.setValue( + getActualColumnName(rawTableName, expression.getValue(), columnNameMap, query)); } else if (expressionType == TransformExpressionTree.ExpressionType.FUNCTION) { for (TransformExpressionTree child : expression.getChildren()) { -fixColumnName(rawTableName, child, columnNameMap); +fixColumnName(rawTableName, child, columnNameMap, query); } } } - private void fixColumnName(String rawTableName, Expression expression, @Nullable Map columnNameMap) { + private void fixColumnName(String rawTableName, Expression expression, @Nullable Map columnNameMap, + String query) { ExpressionType expressionType = expression.getType(); if (expressionType == ExpressionType.IDENTIFIER) { - Identifier identifier = expression.getIdentifier(); - identifier.setName(getActualColumnName(rawTableName, identifier.getName(), columnNameMap)); + if (!isStarIdentifier(expression)) { +Identifier identifier = expression.getIdentifier(); +identifier.setName(getActualColumnName(rawTableName, identifier.getName(), columnNameMap, +query)); + } } else if (expressionType == ExpressionType.FUNCTION) { - for (Expression operand : expression.getFunctionCall().getOperands()) { -fixColumnName(rawTableName, operand, columnNameMap); + String operator =
[GitHub] [incubator-pinot] jackjlli commented on a change in pull request #6066: Detect the behavior when column name mismatches in the query
jackjlli commented on a change in pull request #6066: URL: https://github.com/apache/incubator-pinot/pull/6066#discussion_r503610423 ## File path: pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseBrokerRequestHandler.java ## @@ -769,94 +786,133 @@ private void updateColumnNames(BrokerRequest brokerRequest) { for (int i = 0; i < selectionColumns.size(); i++) { String expression = selectionColumns.get(i); if (!expression.equals("*")) { - selectionColumns.set(i, fixColumnName(rawTableName, expression, columnNameMap)); + selectionColumns.set(i, fixColumnName(rawTableName, expression, columnNameMap, query)); } } } if (brokerRequest.isSetOrderBy()) { List orderBy = brokerRequest.getOrderBy(); for (SelectionSort selectionSort : orderBy) { String expression = selectionSort.getColumn(); -selectionSort.setColumn(fixColumnName(rawTableName, expression, columnNameMap)); +selectionSort.setColumn(fixColumnName(rawTableName, expression, columnNameMap, query)); } } PinotQuery pinotQuery = brokerRequest.getPinotQuery(); if (pinotQuery != null) { for (Expression expression : pinotQuery.getSelectList()) { -fixColumnName(rawTableName, expression, columnNameMap); +fixColumnName(rawTableName, expression, columnNameMap, query); } Expression filterExpression = pinotQuery.getFilterExpression(); if (filterExpression != null) { -fixColumnName(rawTableName, filterExpression, columnNameMap); +fixColumnName(rawTableName, filterExpression, columnNameMap, query); } List groupByList = pinotQuery.getGroupByList(); if (groupByList != null) { for (Expression expression : groupByList) { - fixColumnName(rawTableName, expression, columnNameMap); + fixColumnName(rawTableName, expression, columnNameMap, query); } } List orderByList = pinotQuery.getOrderByList(); if (orderByList != null) { for (Expression expression : orderByList) { - fixColumnName(rawTableName, expression, columnNameMap); + fixColumnName(rawTableName, expression, columnNameMap, query); } } Expression havingExpression = pinotQuery.getHavingExpression(); if (havingExpression != null) { -fixColumnName(rawTableName, havingExpression, columnNameMap); +fixColumnName(rawTableName, havingExpression, columnNameMap, query); } } } - private String fixColumnName(String rawTableName, String expression, @Nullable Map columnNameMap) { + private String fixColumnName(String rawTableName, String expression, @Nullable Map columnNameMap, + String query) { TransformExpressionTree expressionTree = TransformExpressionTree.compileToExpressionTree(expression); -fixColumnName(rawTableName, expressionTree, columnNameMap); +fixColumnName(rawTableName, expressionTree, columnNameMap, query); return expressionTree.toString(); } private void fixColumnName(String rawTableName, TransformExpressionTree expression, - @Nullable Map columnNameMap) { + @Nullable Map columnNameMap, String query) { TransformExpressionTree.ExpressionType expressionType = expression.getExpressionType(); if (expressionType == TransformExpressionTree.ExpressionType.IDENTIFIER) { - expression.setValue(getActualColumnName(rawTableName, expression.getValue(), columnNameMap)); + expression.setValue( + getActualColumnName(rawTableName, expression.getValue(), columnNameMap, query)); } else if (expressionType == TransformExpressionTree.ExpressionType.FUNCTION) { for (TransformExpressionTree child : expression.getChildren()) { -fixColumnName(rawTableName, child, columnNameMap); +fixColumnName(rawTableName, child, columnNameMap, query); } } } - private void fixColumnName(String rawTableName, Expression expression, @Nullable Map columnNameMap) { + private void fixColumnName(String rawTableName, Expression expression, @Nullable Map columnNameMap, + String query) { ExpressionType expressionType = expression.getType(); if (expressionType == ExpressionType.IDENTIFIER) { - Identifier identifier = expression.getIdentifier(); - identifier.setName(getActualColumnName(rawTableName, identifier.getName(), columnNameMap)); + if (!isStarIdentifier(expression)) { +Identifier identifier = expression.getIdentifier(); +identifier.setName(getActualColumnName(rawTableName, identifier.getName(), columnNameMap, +query)); + } } else if (expressionType == ExpressionType.FUNCTION) { - for (Expression operand : expression.getFunctionCall().getOperands()) { -fixColumnName(rawTableName, operand, columnNameMap); + String operator =