mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved pg sql parser. for issue #2309
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
||||
package com.alibaba.druid.sql.dialect.postgresql.ast.stmt;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLName;
|
||||
import com.alibaba.druid.sql.ast.SQLStatementImpl;
|
||||
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
|
||||
public class PGConnectToStatement extends SQLStatementImpl implements PGSQLStatement {
|
||||
private SQLName target;
|
||||
|
||||
public PGConnectToStatement() {
|
||||
super(JdbcConstants.POSTGRESQL);
|
||||
}
|
||||
|
||||
protected void accept0(SQLASTVisitor visitor) {
|
||||
this.accept0((PGASTVisitor) visitor);
|
||||
}
|
||||
|
||||
public void output(StringBuffer buf) {
|
||||
SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(buf, dbType);
|
||||
this.accept(visitor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept0(PGASTVisitor v) {
|
||||
if (v.visit(this)) {
|
||||
acceptChild(v, target);
|
||||
}
|
||||
v.endVisit(this);
|
||||
}
|
||||
|
||||
public SQLName getTarget() {
|
||||
return target;
|
||||
}
|
||||
|
||||
public void setTarget(SQLName x) {
|
||||
if (x != null) {
|
||||
x.setParent(this);
|
||||
}
|
||||
this.target = x;
|
||||
}
|
||||
}
|
||||
@@ -106,7 +106,9 @@ public interface PGASTVisitor extends SQLASTVisitor {
|
||||
boolean visit(PGShowStatement x);
|
||||
|
||||
void endVisit(PGStartTransactionStatement x);
|
||||
|
||||
boolean visit(PGStartTransactionStatement x);
|
||||
|
||||
void endVisit(PGConnectToStatement x);
|
||||
boolean visit(PGConnectToStatement x);
|
||||
|
||||
}
|
||||
|
||||
+10
@@ -257,4 +257,14 @@ public class PGASTVisitorAdapter extends SQLASTVisitorAdapter implements PGASTVi
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(PGConnectToStatement x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(PGConnectToStatement x) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -651,6 +651,18 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(PGConnectToStatement x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(PGConnectToStatement x) {
|
||||
print0(ucase ? "CONNECT TO " : "connect to ");
|
||||
x.getTarget().accept(this);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLSetStatement x) {
|
||||
print0(ucase ? "SET " : "set ");
|
||||
|
||||
+10
@@ -339,4 +339,14 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(PGConnectToStatement x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(PGConnectToStatement x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 1999-2017 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.bvt.sql.postgresql;
|
||||
|
||||
import com.alibaba.druid.sql.PGTest;
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PGConnectTo_0 extends PGTest {
|
||||
public void testConnectTo() throws Exception {
|
||||
List<SQLStatement> stmtList = SQLUtils.parseStatements("CONNECT to db_2", JdbcConstants.POSTGRESQL);
|
||||
assertEquals(1, stmtList.size());
|
||||
|
||||
SQLStatement stmt = stmtList.get(0);
|
||||
assertEquals("CONNECT TO db_2", stmt.toString());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user