improve sql parser

This commit is contained in:
wenshao
2013-08-03 23:00:31 +08:00
parent 32a43cc549
commit 459901e8d9
48 changed files with 937 additions and 813 deletions
@@ -1,57 +0,0 @@
/*
* Copyright 1999-2011 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.sql.dialect.postgresql.ast.stmt;
import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
public class PGTruncateStatement extends SQLTruncateStatement implements PGSQLStatement {
private boolean only;
private Boolean restartIdentity;
private Boolean cascade;
public boolean isOnly() {
return only;
}
public void setOnly(boolean only) {
this.only = only;
}
public Boolean getRestartIdentity() {
return restartIdentity;
}
public void setRestartIdentity(Boolean restartIdentity) {
this.restartIdentity = restartIdentity;
}
public Boolean getCascade() {
return cascade;
}
public void setCascade(Boolean cascade) {
this.cascade = cascade;
}
public void accept0(PGASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, tableSources);
}
visitor.endVisit(this);
}
}
@@ -30,7 +30,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGInsertStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
@@ -39,8 +38,8 @@ import com.alibaba.druid.sql.parser.Token;
public class PGSQLStatementParser extends SQLStatementParser {
public PGSQLStatementParser(String sql) {
super (new PGExprParser(sql));
public PGSQLStatementParser(String sql){
super(new PGExprParser(sql));
}
public PGSQLStatementParser(Lexer lexer){
@@ -113,7 +112,7 @@ public class PGSQLStatementParser extends SQLStatementParser {
SQLInsertStatement.ValuesClause valuesCaluse = new SQLInsertStatement.ValuesClause();
this.exprParser.exprList(valuesCaluse.getValues());
stmt.addValueCause(valuesCaluse);
accept(Token.RPAREN);
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
@@ -187,53 +186,6 @@ public class PGSQLStatementParser extends SQLStatementParser {
return deleteStatement;
}
public SQLStatement parseTruncate() {
accept(Token.TRUNCATE);
PGTruncateStatement stmt = new PGTruncateStatement();
if (lexer.token() == Token.TABLE) {
lexer.nextToken();
}
if (lexer.token() == Token.ONLY) {
lexer.nextToken();
stmt.setOnly(true);
}
for (;;) {
SQLName name = this.exprParser.name();
stmt.addTableSource(name);
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
continue;
}
break;
}
if (lexer.token() == Token.RESTART) {
lexer.nextToken();
accept(Token.IDENTITY);
stmt.setRestartIdentity(Boolean.TRUE);
} else if (lexer.token() == Token.SHARE) {
lexer.nextToken();
accept(Token.IDENTITY);
stmt.setRestartIdentity(Boolean.FALSE);
}
if (lexer.token() == Token.CASCADE) {
lexer.nextToken();
stmt.setCascade(Boolean.TRUE);
} else if (lexer.token() == Token.RESTRICT) {
lexer.nextToken();
stmt.setCascade(Boolean.FALSE);
}
return stmt;
}
public boolean parseStatementListDialect(List<SQLStatement> statementList) {
if (lexer.token() == Token.WITH) {
SQLStatement stmt = parseWith();
@@ -23,7 +23,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGInsertStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
@@ -53,10 +52,6 @@ public interface PGASTVisitor extends SQLASTVisitor {
boolean visit(PGWithClause x);
void endVisit(PGTruncateStatement x);
boolean visit(PGTruncateStatement x);
void endVisit(PGDeleteStatement x);
boolean visit(PGDeleteStatement x);
@@ -26,7 +26,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.Fetc
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement;
import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter;
@@ -83,18 +82,6 @@ public class PGASTVisitorAdapter extends SQLASTVisitorAdapter implements PGASTVi
@Override
public boolean visit(PGWithClause x) {
return true;
}
@Override
public void endVisit(PGTruncateStatement x) {
}
@Override
public boolean visit(PGTruncateStatement x) {
return true;
}
@@ -17,6 +17,7 @@ package com.alibaba.druid.sql.dialect.postgresql.visitor;
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
@@ -28,7 +29,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.Fetc
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement;
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
@@ -236,12 +236,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
}
@Override
public void endVisit(PGTruncateStatement x) {
}
@Override
public boolean visit(PGTruncateStatement x) {
public boolean visit(SQLTruncateStatement x) {
print("TRUNCATE TABLE ");
if (x.isOnly()) {
print("ONLY ");
@@ -21,7 +21,6 @@ import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter;
@@ -33,7 +32,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.Fetc
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
@@ -46,7 +44,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
public String getDbType() {
return JdbcUtils.POSTGRESQL;
}
@Override
public void endVisit(WindowClause x) {
@@ -111,17 +109,6 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
return true;
}
@Override
public void endVisit(PGTruncateStatement x) {
}
@Override
public boolean visit(PGTruncateStatement x) {
this.visit((SQLTruncateStatement) x);
return false;
}
@Override
public void endVisit(PGDeleteStatement x) {
@@ -206,7 +193,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
public void endVisit(PGSelectStatement x) {
}
@Override
public boolean visit(PGSelectStatement x) {
if (x.getWith() != null) {
@@ -250,7 +237,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
@Override
public void endVisit(PGSelectQueryBlock x) {
}
@Override
@@ -260,7 +247,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
@Override
public void endVisit(PGParameter x) {
}
@Override
@@ -270,7 +257,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
@Override
public void endVisit(PGFunctionTableSource x) {
}
@Override