apilloud commented on a change in pull request #14241:
URL: https://github.com/apache/beam/pull/14241#discussion_r594737271



##########
File path: 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSQLQueryPlanner.java
##########
@@ -174,28 +174,39 @@ static boolean hasOnlyJavaUdfInProjects(RelOptRuleCall x) 
{
           } else if (rexNode instanceof RexLiteral) {
             SqlTypeName typeName = ((RexLiteral) rexNode).getTypeName();
             switch (typeName) {
-              case NULL:
+              case DOUBLE:
               case BOOLEAN:
-              case CHAR:
-              case BINARY:
+              case VARCHAR:

Review comment:
       This isn't a literal... CHAR is. Same with VARBINARY. 
https://github.com/apache/calcite/blob/039fe493e195416ee40c93b720f304ac9fc3c8c8/core/src/main/java/org/apache/calcite/rex/RexLiteral.java#L164

##########
File path: 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSQLQueryPlanner.java
##########
@@ -174,28 +174,39 @@ static boolean hasOnlyJavaUdfInProjects(RelOptRuleCall x) 
{
           } else if (rexNode instanceof RexLiteral) {
             SqlTypeName typeName = ((RexLiteral) rexNode).getTypeName();
             switch (typeName) {
-              case NULL:
+              case DOUBLE:
               case BOOLEAN:
-              case CHAR:
-              case BINARY:
+              case VARCHAR:
+              case VARBINARY:
               case DECIMAL:
+              case TIME:
+              case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
+              case TIMESTAMP:
+              case ARRAY:

Review comment:
       I don't think there are ARRAY or ROW literals. I'm pretty sure both 
become calls to constructors.

##########
File path: 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSQLQueryPlanner.java
##########
@@ -174,29 +174,20 @@ static boolean hasOnlyJavaUdfInProjects(RelOptRuleCall x) 
{
           } else if (rexNode instanceof RexLiteral) {
             SqlTypeName typeName = ((RexLiteral) rexNode).getTypeName();
             switch (typeName) {
-              case NULL:
-              case BOOLEAN:
-              case CHAR:
-              case BINARY:
-              case DECIMAL:
-                break;
-              default:
-                // Reject unsupported literals
+              case BIGINT: // BEAM-11989
+              case DATE: // BEAM-11990
                 return false;
+              default:
+                break;
             }
           } else if (rexNode instanceof RexInputRef) {
             SqlTypeName typeName = ((RexInputRef) 
rexNode).getType().getSqlTypeName();
             switch (typeName) {
-              case BIGINT:
-              case DOUBLE:
-              case BOOLEAN:
-              case VARCHAR:
-              case VARBINARY:
-              case DECIMAL:
-                break;
-              default:
-                // Reject unsupported input ref
+              case BIGINT: // BEAM-11989

Review comment:
       Literals and input refs have a completely different implementation. 
BigInt is represented as a `BigInteger` in InputRef and a `BigDecimal` in 
Literals. (That is possibly a bug in Calcite.)

##########
File path: 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSQLQueryPlanner.java
##########
@@ -174,28 +174,39 @@ static boolean hasOnlyJavaUdfInProjects(RelOptRuleCall x) 
{
           } else if (rexNode instanceof RexLiteral) {
             SqlTypeName typeName = ((RexLiteral) rexNode).getTypeName();
             switch (typeName) {
-              case NULL:
+              case DOUBLE:
               case BOOLEAN:
-              case CHAR:
-              case BINARY:
+              case VARCHAR:
+              case VARBINARY:
               case DECIMAL:
+              case TIME:
+              case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
+              case TIMESTAMP:
+              case ARRAY:
+              case ROW:
                 break;
+              case BIGINT: // BEAM-11989
+              case DATE: // BEAM-11990
               default:
-                // Reject unsupported literals
                 return false;
             }
           } else if (rexNode instanceof RexInputRef) {
             SqlTypeName typeName = ((RexInputRef) 
rexNode).getType().getSqlTypeName();
             switch (typeName) {
-              case BIGINT:
               case DOUBLE:
               case BOOLEAN:
               case VARCHAR:
               case VARBINARY:
               case DECIMAL:
+              case TIME:
+              case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
+              case TIMESTAMP:
+              case ARRAY:

Review comment:
       I believe you need to recurse into `((RexInputRef) 
rexNode).getType().getComponentType()` to verify the array type is supported.

##########
File path: 
sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSQLQueryPlanner.java
##########
@@ -174,28 +174,39 @@ static boolean hasOnlyJavaUdfInProjects(RelOptRuleCall x) 
{
           } else if (rexNode instanceof RexLiteral) {
             SqlTypeName typeName = ((RexLiteral) rexNode).getTypeName();
             switch (typeName) {
-              case NULL:
+              case DOUBLE:
               case BOOLEAN:
-              case CHAR:
-              case BINARY:
+              case VARCHAR:
+              case VARBINARY:
               case DECIMAL:
+              case TIME:
+              case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
+              case TIMESTAMP:
+              case ARRAY:
+              case ROW:
                 break;
+              case BIGINT: // BEAM-11989
+              case DATE: // BEAM-11990
               default:
-                // Reject unsupported literals
                 return false;
             }
           } else if (rexNode instanceof RexInputRef) {
             SqlTypeName typeName = ((RexInputRef) 
rexNode).getType().getSqlTypeName();
             switch (typeName) {
-              case BIGINT:
               case DOUBLE:
               case BOOLEAN:
               case VARCHAR:
               case VARBINARY:
               case DECIMAL:
+              case TIME:
+              case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
+              case TIMESTAMP:
+              case ARRAY:
+              case ROW:

Review comment:
       I believe you need to recurse into `((RexInputRef) 
rexNode).getType().getFieldList()` to verify the struct only contains supported 
types.




----------------------------------------------------------------
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.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to