From ac70cf6dc32a437d84bbed2fb7718fffccc52d1c Mon Sep 17 00:00:00 2001 From: "shaojin.wensj" Date: Sun, 19 Feb 2023 16:12:05 +0800 Subject: [PATCH] improve sql parser hive & odps support --- .../druid/sql/dialect/hive/parser/HiveExprParser.java | 5 +++++ .../main/java/com/alibaba/druid/sql/parser/Lexer.java | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) 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) {