Uploaded image for project: 'Beam'
  1. Beam
  2. BEAM-9311

ZetaSQL Named Parameters are lower case, don't treat as case-sensitive

Details

    • Bug
    • Status: Resolved
    • P2
    • Resolution: Fixed
    • None
    • 2.20.0
    • dsl-sql-zetasql
    • None

    Description

      ZetaSQL Named Parameters are case insensitive, always resolved to lower case. 

      See: https://github.com/google/zetasql/blob/79adcd0fe227173e68ed7aa88f580a691ebe82c2/zetasql/analyzer/resolver_expr.cc#L1342

      java.lang.NullPointerException at org.apache.beam.sdk.extensions.sql.zetasql.translation.ExpressionConverter.convertResolvedParameter(ExpressionConverter.java:962) at org.apache.beam.sdk.extensions.sql.zetasql.translation.ExpressionConverter.convertRexNodeFromResolvedExpr(ExpressionConverter.java:311) at org.apache.beam.sdk.extensions.sql.zetasql.translation.ExpressionConverter.convertRexNodeFromComputedColumnWithFieldList(ExpressionConverter.java:460) at org.apache.beam.sdk.extensions.sql.zetasql.translation.ExpressionConverter.retrieveRexNode(ExpressionConverter.java:207) at org.apache.beam.sdk.extensions.sql.zetasql.translation.ProjectScanConverter.convert(ProjectScanConverter.java:45) at org.apache.beam.sdk.extensions.sql.zetasql.translation.ProjectScanConverter.convert(ProjectScanConverter.java:29) at org.apache.beam.sdk.extensions.sql.zetasql.translation.QueryStatementConverter.convertNode(QueryStatementConverter.java:97) at org.apache.beam.sdk.extensions.sql.zetasql.translation.QueryStatementConverter.convert(QueryStatementConverter.java:84) at org.apache.beam.sdk.extensions.sql.zetasql.translation.QueryStatementConverter.convertRootQuery(QueryStatementConverter.java:51) at org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLPlannerImpl.rel(ZetaSQLPlannerImpl.java:160) at org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLQueryPlanner.convertToBeamRelInternal(ZetaSQLQueryPlanner.java:131) at org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLQueryPlanner.convertToBeamRel(ZetaSQLQueryPlanner.java:115) at org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLQueryPlanner.convertToBeamRel(ZetaSQLQueryPlanner.java:103) at org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLDialectSpecTest.testNamedParameterQuery(ZetaSQLDialectSpecTest.java:3245)

       

      Repro:

       

      @Test
      public void testNamedParameterQuery() {
        String sql = "SELECT @ColA AS ColA";
        ImmutableMap<String, Value> params = ImmutableMap.of("ColA", Value.createInt64Value(5));
      
        ZetaSQLQueryPlanner zetaSQLQueryPlanner = new ZetaSQLQueryPlanner(config);
        BeamRelNode beamRelNode = zetaSQLQueryPlanner.convertToBeamRel(sql, params);
        PCollection<Row> stream = BeamSqlRelUtils.toPCollection(pipeline, beamRelNode);
        final Schema schema = Schema.builder().addInt64Field("field1").build();
        PAssert.that(stream).containsInAnyOrder(Row.withSchema(schema).addValues(5L).build());
        pipeline.run().waitUntilFinish(Duration.standardMinutes(PIPELINE_EXECUTION_WAITTIME_MINUTES));
        }
      

       

       

      Attachments

        Issue Links

          Activity

            People

              apilloud Andrew Pilloud
              apilloud Andrew Pilloud
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 0.5h
                  0.5h