diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/hive/parser/HiveExprParser.java b/core/src/main/java/com/alibaba/druid/sql/dialect/hive/parser/HiveExprParser.java index 486f95d024..658f41bc8b 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/hive/parser/HiveExprParser.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/hive/parser/HiveExprParser.java @@ -90,6 +90,11 @@ public class HiveExprParser extends SQLExprParser { lexer.nextToken(); Number num = ((SQLNumericLiteralExpr) expr).getNumber(); expr = new SQLDecimalExpr(num.toString()); + } else if (lexer.identifierEquals(FnvHash.Constants.DAYS)) { // hortonworks + lexer.nextToken(); + SQLIntervalExpr intervalExpr = new SQLIntervalExpr(); + intervalExpr.setValue(expr); + intervalExpr.setUnit(SQLIntervalUnit.DAY); } break; default: diff --git a/core/src/main/java/com/alibaba/druid/sql/parser/Lexer.java b/core/src/main/java/com/alibaba/druid/sql/parser/Lexer.java index 88084f2ec4..e1bfdae07c 100644 --- a/core/src/main/java/com/alibaba/druid/sql/parser/Lexer.java +++ b/core/src/main/java/com/alibaba/druid/sql/parser/Lexer.java @@ -2580,8 +2580,17 @@ public class Lexer { } int start = pos; - for (;;) { + for (; ; ) { if (ch == ' ' || ch == '\r' || ch == '\n' || ch == EOI) { + while (pos < text.length() - 1) { + char c1 = text.charAt(pos); + if (c1 == ' ' || c1 == '\r' || c1 == '\n' || c1 == '\t') { + pos++; + continue; + } + break; + } + String arg = text.substring(start, pos); arg = arg.trim(); if (arg.length() > 0) {