ZijieSong946 commented on a change in pull request #12054: URL: https://github.com/apache/beam/pull/12054#discussion_r445658639
########## 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: Extract for millisecond precision works, but tests for microsecond and nanosecond precision not works because of TIME literal function. ---------------------------------------------------------------- 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