dongjoon-hyun commented on a change in pull request #25000: [SPARK-28107][SQL] Support 'day to hour', 'day to minute', 'hour to minute' and 'minute to second' URL: https://github.com/apache/spark/pull/25000#discussion_r300211876
########## File path: common/unsafe/src/main/java/org/apache/spark/unsafe/types/CalendarInterval.java ########## @@ -174,11 +180,46 @@ public static CalendarInterval fromDayTimeString(String s) throws IllegalArgumen int sign = m.group(1) != null && m.group(1).equals("-") ? -1 : 1; long days = m.group(2) == null ? 0 : toLongWithRange("day", m.group(3), 0, Integer.MAX_VALUE); - long hours = toLongWithRange("hour", m.group(4), 0, 23); - long minutes = toLongWithRange("minute", m.group(5), 0, 59); - long seconds = toLongWithRange("second", m.group(6), 0, 59); + long hours; + long minutes; + long seconds; + if ("minute".equals(from)) { + hours = m.group(6) == null ? 0 : toLongWithRange("hour", m.group(4), 0, 23); + minutes = m.group(6) == null ? toLongWithRange("minute", m.group(4), 0, 59) + : toLongWithRange("minute", m.group(5), 0, 59); + seconds = m.group(6) == null ? toLongWithRange("minute", m.group(5), 0, 59) + : toLongWithRange("second", m.group(7), 0, 59); + } else { + if (m.group(8) != null && m.group(6) == null) { + hours = 0; + minutes = toLongWithRange("minute", m.group(4), 0, 59); + seconds = toLongWithRange("second", m.group(5), 0, 59); + } else { + hours = toLongWithRange("hour", m.group(4), 0, 23); + minutes = toLongWithRange("minute", m.group(5), 0, 59); + seconds = toLongWithRange("second", m.group(7), 0, 59); + } + } // Hive allow nanosecond precision interval - long nanos = toLongWithRange("nanosecond", m.group(8), 0L, 999999999L); + long nanos = toLongWithRange("nanosecond", m.group(9), 0L, 999999999L); + switch (to) { + case "hour": + minutes = 0; + seconds = 0; + nanos = 0; + break; + case "minute": + seconds = 0; + nanos = 0; + break; + case "second": + //If `to` value is "second", will not re-calculate days, hours, minutes, seconds + // and nanos + break; + default: + throw new IllegalArgumentException( + String.format("Cannot support 'interval '%s' %s to %s' expression", s, from, to)); Review comment: This string will look weird due to the nested `'`. ---------------------------------------------------------------- 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 With regards, Apache Git Services --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org