You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by GitBox <gi...@apache.org> on 2022/04/22 12:02:57 UTC

[GitHub] [druid] rohangarg commented on a diff in pull request #12431: Validate select columns for insert statement

rohangarg commented on code in PR #12431:
URL: https://github.com/apache/druid/pull/12431#discussion_r856162689


##########
sql/src/main/java/org/apache/druid/sql/calcite/planner/DruidPlanner.java:
##########
@@ -838,6 +843,31 @@ static ParsedNodes create(final SqlNode node) throws ValidationException
       return new ParsedNodes(explain, druidSqlInsert, query, ingestionGranularity);
     }
 
+    private static void validateSelectColumnForIngestion(SqlNode sqlNode) throws ValidationException
+    {
+      if (sqlNode instanceof SqlBasicCall) {
+        // If the sql node is a basic call, it could have select statements as operands.
+        // We need to recursivly check the operands for select statements.
+        SqlBasicCall sqlBasicCall = (SqlBasicCall) sqlNode;
+        for (SqlNode operand : sqlBasicCall.getOperandList()) {
+          validateSelectColumnForIngestion(operand);
+        }
+      } else if (sqlNode instanceof SqlSelect) {
+        // Validate that all columns which do some computation in the select statement are named.

Review Comment:
   One idea for handling such cases : can we use the `rootQueryRel` object after creating the `ParsedNodes` to see that there aren't any generated aliases? The `rootQueryRel` contains a `field` list which has ordinal to alias mapping from what I understand.
   And for checking if an alias is generated by calcite we could use something like https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/SqlUtil.java#L833 (directly not present in the calcite version we use).
   The downside of doing this is that users would not be able to provide column names like `EXPR$<number>` - not sure if we can live with that. 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org