From 7a201596cbed44f0f06fe9a5caa0d5e9ed6341cf Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 10 Nov 2012 13:38:26 +0800 Subject: [PATCH] sql server parser improved --- .../sqlserver/parser/SQLServerExprParser.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerExprParser.java index 5c58cb8c91..45e72d31fb 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/parser/SQLServerExprParser.java @@ -33,6 +33,19 @@ public class SQLServerExprParser extends SQLExprParser { super(new SQLServerLexer(sql)); this.lexer.nextToken(); } + + public SQLExpr primary() { + + + if (lexer.token() == Token.LBRACKET) { + lexer.nextToken(); + SQLExpr name = this.name(); + accept(Token.RBRACKET); + return primaryRest(name); + } + + return super.primary(); + } public SQLExpr primaryRest(SQLExpr expr) { if (lexer.token() == Token.DOTDOT) { @@ -42,11 +55,38 @@ public class SQLServerExprParser extends SQLExprParser { return super.primaryRest(expr); } + protected SQLExpr dotRest(SQLExpr expr) { + boolean backet = false; + + if (lexer.token() == Token.LBRACKET) { + lexer.nextToken(); + backet = true; + } + + expr = super.dotRest(expr); + + if (backet) { + accept(Token.RBRACKET); + } + + return expr; + } + public SQLName nameRest(SQLName expr) { if (lexer.token() == Token.DOTDOT) { lexer.nextToken(); + + boolean backet = false; + if (lexer.token() == Token.LBRACKET) { + lexer.nextToken(); + backet = true; + } String text = lexer.stringVal(); lexer.nextToken(); + + if (backet) { + accept(Token.RBRACKET); + } SQLServerObjectReferenceExpr owner = new SQLServerObjectReferenceExpr(expr); expr = new SQLPropertyExpr(owner, text);