Skip to content

Commit

Permalink
重新提交PR针对Postgresql 加上 analyze和vacuum的sql 解析#5412 (#5439)
Browse files Browse the repository at this point in the history
* 重新提交 case postgresql 补上 greenplum和edb的判断,都是Postgresql类型的数据库 #5413

重新提交 case postgresql 补上 greenplum和edb的判断,都是Postgresql类型的数据库 #5413

* 重新提交 针对Postgresql 加上 analyze和vacuum的sql 解析#5412

重新提交  针对Postgresql 加上 analyze和vacuum的sql 解析#5412
  • Loading branch information
lizongbo authored Sep 11, 2023
1 parent 880da36 commit 8163f00
Show file tree
Hide file tree
Showing 16 changed files with 530 additions and 0 deletions.
4 changes: 4 additions & 0 deletions core/src/main/java/com/alibaba/druid/sql/PagerUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@ private static boolean limitQueryBlock(SQLSelect select, DbType dbType, int offs
case clickhouse:
return limitMySqlQueryBlock(queryBlock, dbType, offset, count, check);
case postgresql:
case greenplum:
case edb:
case hive:
case odps:
case presto:
Expand Down Expand Up @@ -550,6 +552,8 @@ private static SQLSelectQueryBlock createQueryBlock(DbType dbType) {
case oracle:
return new OracleSelectQueryBlock();
case postgresql:
case greenplum:
case edb:
return new PGSelectQueryBlock();
case sqlserver:
case jtds:
Expand Down
4 changes: 4 additions & 0 deletions core/src/main/java/com/alibaba/druid/sql/SQLUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,8 @@ public static SQLASTOutputVisitor createFormatOutputVisitor(Appendable out,
case tidb:
return new MySqlOutputVisitor(out);
case postgresql:
case greenplum:
case edb:
return new PGOutputVisitor(out);
case sqlserver:
case jtds:
Expand Down Expand Up @@ -568,6 +570,8 @@ public static SchemaStatVisitor createSchemaStatVisitor(SchemaRepository reposit
case elastic_search:
return new MySqlSchemaStatVisitor(repository);
case postgresql:
case greenplum:
case edb:
return new PGSchemaStatVisitor(repository);
case sqlserver:
case jtds:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ public SQLDeleteStatement createSQLDeleteStatement() {
case tidb:
return new MySqlDeleteStatement();
case postgresql:
case greenplum:
case edb:
return new PGDeleteStatement();
default:
return new SQLDeleteStatement();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,8 @@ public SQLUpdateStatement createSQLUpdateStatement() {
case oracle:
return new OracleUpdateStatement();
case postgresql:
case greenplum:
case edb:
return new PGUpdateStatement();
case sqlserver:
return new SQLServerUpdateStatement();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* 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.sql.dialect.postgresql.ast.stmt;

import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.ast.SQLStatementImpl;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;

import java.util.ArrayList;
import java.util.List;

/**
* @author lizongbo
* @see <a href="https://www.postgresql.org/docs/current/sql-analyze.html">ANALYZE — collect statistics about a database</a>
*/
public class PGAnalyzeStatement extends SQLStatementImpl implements PGSQLStatement {

private boolean verbose;
private boolean skipLocked;
private List<SQLExprTableSource> tableSources = new ArrayList<>();

public PGAnalyzeStatement(DbType dbType) {
super.dbType = dbType;
}

public boolean isVerbose() {
return verbose;
}

public void setVerbose(boolean verbose) {
this.verbose = verbose;
}

public boolean isSkipLocked() {
return skipLocked;
}

public void setSkipLocked(boolean skipLocked) {
this.skipLocked = skipLocked;
}

public List<SQLExprTableSource> getTableSources() {
return tableSources;
}

public void setTableSources(List<SQLExprTableSource> tableSources) {
this.tableSources = tableSources;
}

@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor instanceof PGASTVisitor) {
accept0((PGASTVisitor) visitor);
} else {
super.accept0(visitor);
}
}

@Override
public void accept0(PGASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, tableSources);
}
visitor.endVisit(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
/*
* 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.sql.dialect.postgresql.ast.stmt;

import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.ast.SQLStatementImpl;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;

import java.util.ArrayList;
import java.util.List;


/**
* @author lizongbo
* @see <a href="https://www.postgresql.org/docs/current/sql-vacuum.html">VACUUM — garbage-collect and optionally analyze a database</a>
*/
public class PGVacuumStatement extends SQLStatementImpl implements PGSQLStatement {

private boolean full;
private boolean freeze;
private boolean verbose;
private boolean skipLocked;
private boolean analyze;
private boolean disablePageSkipping;
private boolean processToast;
private boolean truncate;
private List<SQLExprTableSource> tableSources = new ArrayList<>();

public PGVacuumStatement(DbType dbType) {
super.dbType = dbType;
}

public boolean isVerbose() {
return verbose;
}

public void setVerbose(boolean verbose) {
this.verbose = verbose;
}

public boolean isSkipLocked() {
return skipLocked;
}

public void setSkipLocked(boolean skipLocked) {
this.skipLocked = skipLocked;
}

public List<SQLExprTableSource> getTableSources() {
return tableSources;
}

public void setTableSources(List<SQLExprTableSource> tableSources) {
this.tableSources = tableSources;
}

public boolean isFull() {
return full;
}

public void setFull(boolean full) {
this.full = full;
}

public boolean isFreeze() {
return freeze;
}

public void setFreeze(boolean freeze) {
this.freeze = freeze;
}

public boolean isAnalyze() {
return analyze;
}

public void setAnalyze(boolean analyze) {
this.analyze = analyze;
}

public boolean isDisablePageSkipping() {
return disablePageSkipping;
}

public void setDisablePageSkipping(boolean disablePageSkipping) {
this.disablePageSkipping = disablePageSkipping;
}

public boolean isProcessToast() {
return processToast;
}

public void setProcessToast(boolean processToast) {
this.processToast = processToast;
}

public boolean isTruncate() {
return truncate;
}

public void setTruncate(boolean truncate) {
this.truncate = truncate;
}

@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor instanceof PGASTVisitor) {
accept0((PGASTVisitor) visitor);
} else {
super.accept0(visitor);
}
}

@Override
public void accept0(PGASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, tableSources);
}
visitor.endVisit(this);
}
}
Loading

0 comments on commit 8163f00

Please sign in to comment.