robinyqiu commented on a change in pull request #12054: URL: https://github.com/apache/beam/pull/12054#discussion_r446346530
########## File path: sdks/java/extensions/sql/zetasql/src/test/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSQLDialectSpecTest.java ########## @@ -2457,6 +2458,256 @@ public void testDateFromUnixInt64() { pipeline.run().waitUntilFinish(Duration.standardMinutes(PIPELINE_EXECUTION_WAITTIME_MINUTES)); } + ///////////////////////////////////////////////////////////////////////////// + // TIME type tests + ///////////////////////////////////////////////////////////////////////////// + + @Test + public void testTimeLiteral() { + String sql = "SELECT TIME '15:30:00'"; + + ZetaSQLQueryPlanner zetaSQLQueryPlanner = new ZetaSQLQueryPlanner(config); + BeamRelNode beamRelNode = zetaSQLQueryPlanner.convertToBeamRel(sql); + PCollection<Row> stream = BeamSqlRelUtils.toPCollection(pipeline, beamRelNode); + + PAssert.that(stream) + .containsInAnyOrder( + Row.withSchema(Schema.builder().addLogicalTypeField("f_time", SqlTypes.TIME).build()) + .addValues(LocalTime.of(15, 30, 0, 0)) + .build()); + pipeline.run().waitUntilFinish(Duration.standardMinutes(PIPELINE_EXECUTION_WAITTIME_MINUTES)); + } + + @Test + public void testTimeColumn() { + String sql = "SELECT FORMAT_TIME('%T', time_field) FROM table_with_time"; + + ZetaSQLQueryPlanner zetaSQLQueryPlanner = new ZetaSQLQueryPlanner(config); + BeamRelNode beamRelNode = zetaSQLQueryPlanner.convertToBeamRel(sql); + PCollection<Row> stream = BeamSqlRelUtils.toPCollection(pipeline, beamRelNode); + + PAssert.that(stream) + .containsInAnyOrder( + Row.withSchema(Schema.builder().addStringField("f_time_str").build()) + .addValues("15:30:00") + .build(), + Row.withSchema(Schema.builder().addStringField("f_time_str").build()) + .addValues("23:35:59") + .build()); + pipeline.run().waitUntilFinish(Duration.standardMinutes(PIPELINE_EXECUTION_WAITTIME_MINUTES)); + } + + // TODO[BEAM-9166]: Add a test for CURRENT_TIME function ("SELECT CURRENT_TIME()") + + @Test + public void testExtractTime() { + String sql = + "SELECT " + + "EXTRACT(HOUR FROM TIME '15:30:35') as hour, " + + "EXTRACT(MINUTE FROM TIME '15:30:35') as minute, " + + "EXTRACT(SECOND FROM TIME '15:30:35') as second, " + + "EXTRACT(MILLISECOND FROM TIME '15:30:35') as millisecond, " + + "EXTRACT(MICROSECOND FROM TIME '15:30:35') as microsecond "; Review comment: That looks good. We don't need to support nanosecond. ---------------------------------------------------------------- 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: us...@infra.apache.org