From f8a9c1b872f5ef78536e720034bbeeb319811dc1 Mon Sep 17 00:00:00 2001 From: magicdoom Date: Mon, 1 Jun 2015 17:26:11 +0800 Subject: [PATCH] fix parse mysql load data infile's bug --- .../mysql/parser/MySqlStatementParser.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 6a1d0e77ad..e0f5b7e0db 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -1760,6 +1760,7 @@ public class MySqlStatementParser extends SQLStatementParser { } protected MySqlLoadDataInFileStatement parseLoadDataInFile() { + acceptIdentifier("DATA"); MySqlLoadDataInFileStatement stmt = new MySqlLoadDataInFileStatement(); @@ -1818,7 +1819,8 @@ public class MySqlStatementParser extends SQLStatementParser { if (identifierEquals("TERMINATED")) { lexer.nextToken(); accept(Token.BY); - stmt.setColumnsTerminatedBy((SQLLiteralExpr) this.exprParser.expr()); + stmt.setColumnsTerminatedBy(new SQLCharExpr(lexer.stringVal())); + lexer.nextToken(); } if (identifierEquals("OPTIONALLY")) { @@ -1829,13 +1831,15 @@ public class MySqlStatementParser extends SQLStatementParser { if (identifierEquals("ENCLOSED")) { lexer.nextToken(); accept(Token.BY); - stmt.setColumnsEnclosedBy((SQLLiteralExpr) this.exprParser.expr()); + stmt.setColumnsEnclosedBy(new SQLCharExpr(lexer.stringVal())); + lexer.nextToken(); } if (identifierEquals("ESCAPED")) { lexer.nextToken(); accept(Token.BY); - stmt.setColumnsEscaped((SQLLiteralExpr) this.exprParser.expr()); + stmt.setColumnsEscaped(new SQLCharExpr(lexer.stringVal())); + lexer.nextToken(); } } @@ -1844,13 +1848,15 @@ public class MySqlStatementParser extends SQLStatementParser { if (identifierEquals("STARTING")) { lexer.nextToken(); accept(Token.BY); - stmt.setLinesStartingBy((SQLLiteralExpr) this.exprParser.expr()); + stmt.setLinesStartingBy(new SQLCharExpr(lexer.stringVal())); + lexer.nextToken(); } if (identifierEquals("TERMINATED")) { lexer.nextToken(); accept(Token.BY); - stmt.setLinesTerminatedBy((SQLLiteralExpr) this.exprParser.expr()); + stmt.setLinesTerminatedBy(new SQLCharExpr(lexer.stringVal())); + lexer.nextToken(); } } @@ -1872,6 +1878,8 @@ public class MySqlStatementParser extends SQLStatementParser { } return stmt; + + } public MySqlPrepareStatement parsePrepare() {