[GitHub] [incubator-pinot] jackjlli commented on a change in pull request #6066: Detect the behavior when column name mismatches in the query

2020-10-12 Thread GitBox


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

2020-10-12 Thread GitBox


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 =