Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Update IntervalUtils.scala
  • Loading branch information
AngersZhuuuu committed May 8, 2021
commit 8569d86a7c9b7867f69e40165618dda3389dc0ca
Original file line number Diff line number Diff line change
Expand Up @@ -99,16 +99,16 @@ object IntervalUtils {
result
}

private val unquotedYearMonthRegex = "([+|-])?(\\d+)-(\\d+)"
private val quotedYearMonthPattern = (s"^$unquotedYearMonthRegex$$").r
private val yearMonthLiteralPattern =
(s"(?i)^INTERVAL\\s+([+|-])?'$unquotedYearMonthRegex'\\s+YEAR\\s+TO\\s+MONTH$$").r
private val yearMonthPatternString = "([+|-])?(\\d+)-(\\d+)"
private val yearMonthRegex = (s"^$yearMonthPatternString$$").r
private val yearMonthLiteralRegex =
(s"(?i)^INTERVAL\\s+([+|-])?'$yearMonthPatternString'\\s+YEAR\\s+TO\\s+MONTH$$").r

def castStringToYMInterval(input: UTF8String): Int = {
input.trimAll().toString match {
case quotedYearMonthPattern("-", year, month) => toYMInterval(year, month, -1)
case quotedYearMonthPattern(_, year, month) => toYMInterval(year, month, 1)
case yearMonthLiteralPattern(firstSign, secondSign, year, month) =>
case yearMonthRegex("-", year, month) => toYMInterval(year, month, -1)
case yearMonthRegex(_, year, month) => toYMInterval(year, month, 1)
case yearMonthLiteralRegex(firstSign, secondSign, year, month) =>
(firstSign, secondSign) match {
case ("-", "-") => toYMInterval(year, month, 1)
case ("-", _) => toYMInterval(year, month, -1)
Expand All @@ -129,9 +129,9 @@ object IntervalUtils {
def fromYearMonthString(input: String): CalendarInterval = {
require(input != null, "Interval year-month string must be not null")
input.trim match {
case quotedYearMonthPattern("-", yearStr, monthStr) =>
case yearMonthRegex("-", yearStr, monthStr) =>
new CalendarInterval(toYMInterval(yearStr, monthStr, -1), 0, 0)
case quotedYearMonthPattern(_, yearStr, monthStr) =>
case yearMonthRegex(_, yearStr, monthStr) =>
new CalendarInterval(toYMInterval(yearStr, monthStr, 1), 0, 0)
case _ =>
throw new IllegalArgumentException(
Expand All @@ -151,11 +151,11 @@ object IntervalUtils {
}
}

private val unquotedDaySecondRegex =
private val daySecondPatternString =
"([+|-])?(\\d+) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})(\\.\\d{1,9})?"
private val quotedDaySecondPattern = (s"^$unquotedDaySecondRegex$$").r
private val daySecondLiteralPattern =
(s"(?i)^INTERVAL\\s+([+|-])?\\'$unquotedDaySecondRegex\\'\\s+DAY\\s+TO\\s+SECOND$$").r
private val daySecondRegex = (s"^$daySecondPatternString$$").r
private val daySecondLiteralRegex =
(s"(?i)^INTERVAL\\s+([+|-])?\\'$daySecondPatternString\\'\\s+DAY\\s+TO\\s+SECOND$$").r

def castStringToDTInterval(input: UTF8String): Long = {
def secondAndMicro(second: String, micro: String): String = {
Expand All @@ -167,11 +167,11 @@ object IntervalUtils {
}

input.trimAll().toString match {
case quotedDaySecondPattern("-", day, hour, minute, second, micro) =>
case daySecondRegex("-", day, hour, minute, second, micro) =>
toDTInterval(day, hour, minute, secondAndMicro(second, micro), -1)
case quotedDaySecondPattern(_, day, hour, minute, second, micro) =>
case daySecondRegex(_, day, hour, minute, second, micro) =>
toDTInterval(day, hour, minute, secondAndMicro(second, micro), 1)
case daySecondLiteralPattern(firstSign, secondSign, day, hour, minute, second, micro) =>
case daySecondLiteralRegex(firstSign, secondSign, day, hour, minute, second, micro) =>
(firstSign, secondSign) match {
case ("-", "-") => toDTInterval(day, hour, minute, secondAndMicro(second, micro), 1)
case ("-", _) => toDTInterval(day, hour, minute, secondAndMicro(second, micro), -1)
Expand Down