From 611f4f8163b27893265e93acf9c501a3c407ccf2 Mon Sep 17 00:00:00 2001 From: Louis Xu Date: Mon, 28 Mar 2016 19:36:14 +0800 Subject: [PATCH] Add TD select parser --- .../teradata/parser/TeradataSelectParser.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/teradata/parser/TeradataSelectParser.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/teradata/parser/TeradataSelectParser.java b/src/main/java/com/alibaba/druid/sql/dialect/teradata/parser/TeradataSelectParser.java new file mode 100644 index 0000000000..bdd0fbd204 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/teradata/parser/TeradataSelectParser.java @@ -0,0 +1,62 @@ +package com.alibaba.druid.sql.dialect.teradata.parser; + +import com.alibaba.druid.sql.ast.SQLSetQuantifier; +import com.alibaba.druid.sql.ast.statement.SQLSelectQuery; +import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; +import com.alibaba.druid.sql.dialect.teradata.ast.stmt.TeradataSelectQueryBlock; +import com.alibaba.druid.sql.parser.SQLExprParser; +import com.alibaba.druid.sql.parser.SQLSelectParser; +import com.alibaba.druid.sql.parser.Token; + +public class TeradataSelectParser extends SQLSelectParser{ + + public TeradataSelectParser(SQLExprParser exprParser) { + super(exprParser); + } + + public TeradataSelectParser(String sql) { + this(new TeradataExprParser(sql)); + } + + public SQLSelectQuery query() { + if (lexer.token() == Token.LPAREN) { + lexer.nextToken(); + + SQLSelectQuery select = query(); + accept(Token.RPAREN); + + return queryRest(select); + } + + TeradataSelectQueryBlock queryBlock = new TeradataSelectQueryBlock(); + + if (lexer.token() == Token.SEL + || lexer.token() == Token.SELECT) { + + lexer.nextToken(); + + if (lexer.token() == Token.COMMENT) { + lexer.nextToken(); + } + + if (lexer.token() == (Token.DISTINCT)) { + queryBlock.setDistionOption(SQLSetQuantifier.DISTINCT); + lexer.nextToken(); + } else if (lexer.token() == (Token.ALL)) { + queryBlock.setDistionOption(SQLSetQuantifier.ALL); + lexer.nextToken(); + } + parseSelectList(queryBlock); + } + parseFrom(queryBlock); + + parseWhere(queryBlock); + + parseGroupBy(queryBlock); + + queryBlock.setOrderBy(this.exprParser.parseOrderBy()); + + return queryRest(queryBlock); + } + +}