Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ and missing syntax gets added on demand — [open an issue](https://github.com/J
| **Oracle vector types** | `VECTOR(*, *)` · `VECTOR(*, FLOAT32)` · `VECTOR(3, *)`, including dense and sparse storage formats |
| **PostgreSQL ownership** | `DROP OWNED` · `REASSIGN OWNED` |
| **MySQL table maintenance** | `ANALYZE` · `CHECK` · `CHECKSUM` · `OPTIMIZE` · `REPAIR TABLE` |
| **PostgreSQL maintenance** | `VACUUM` · `ANALYZE` · `CLUSTER` · `CHECKPOINT` |
| **MySQL account management** | `CREATE`/`ALTER`/`RENAME USER` · `CREATE ROLE` · `SET ROLE` · `SET DEFAULT ROLE` · `SET PASSWORD` |
| **Tablespaces** | MySQL and PostgreSQL `CREATE TABLESPACE` · `ALTER TABLESPACE` |
| **PostgreSQL RLS** | `CREATE POLICY` · `ALTER TABLE … ENABLE`/`DISABLE`/`FORCE`/`NO FORCE ROW LEVEL SECURITY` |
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/net/sf/jsqlparser/parser/feature/Feature.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@
import net.sf.jsqlparser.statement.alter.AlterEventTrigger;
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
import net.sf.jsqlparser.statement.analyze.Analyze;
import net.sf.jsqlparser.statement.maintenance.CheckpointStatement;
import net.sf.jsqlparser.statement.maintenance.ClusterStatement;
import net.sf.jsqlparser.statement.maintenance.VacuumStatement;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.database.CreateDatabase;
import net.sf.jsqlparser.statement.create.function.CreateFunction;
Expand Down Expand Up @@ -485,6 +488,27 @@ public enum Feature {
*/
tableMaintenance,

/**
* PostgreSQL "VACUUM" statement is allowed
*
* @see VacuumStatement
*/
vacuum,

/**
* PostgreSQL "CLUSTER" statement is allowed
*
* @see ClusterStatement
*/
cluster,

/**
* PostgreSQL "CHECKPOINT" statement is allowed
*
* @see CheckpointStatement
*/
checkpoint,

/**
* SQL "TRUNCATE" statement is allowed
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@
import net.sf.jsqlparser.statement.insert.InsertBulk;
import net.sf.jsqlparser.statement.load.LoadDataStatement;
import net.sf.jsqlparser.statement.lock.LockStatement;
import net.sf.jsqlparser.statement.maintenance.CheckpointStatement;
import net.sf.jsqlparser.statement.maintenance.ClusterStatement;
import net.sf.jsqlparser.statement.maintenance.VacuumStatement;
import net.sf.jsqlparser.statement.merge.Merge;
import net.sf.jsqlparser.statement.oracle.OracleAssignment;
import net.sf.jsqlparser.statement.oracle.OracleBlock;
Expand Down Expand Up @@ -748,6 +751,30 @@ public <S> Void visit(TableMaintenanceStatement statement, S context) {
return null;
}

@Override
public <S> Void visit(VacuumStatement vacuum, S context) {
// reclaims storage and, with ANALYZE, rewrites statistics; FULL rewrites the tables
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA, StmtFeature.READS_DATA);
return null;
}

@Override
public <S> Void visit(ClusterStatement cluster, S context) {
// rewrites the table in index order
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA, StmtFeature.READS_DATA);
return null;
}

@Override
public <S> Void visit(CheckpointStatement checkpoint, S context) {
// a server operation like ALTER SYSTEM CHECKPOINT; no data or schema changes
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SESSION);
return null;
}

private Void schemaOnly() {
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA);
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@
import net.sf.jsqlparser.statement.insert.InsertBulk;
import net.sf.jsqlparser.statement.insert.ParenthesedInsert;
import net.sf.jsqlparser.statement.lock.LockStatement;
import net.sf.jsqlparser.statement.maintenance.CheckpointStatement;
import net.sf.jsqlparser.statement.maintenance.ClusterStatement;
import net.sf.jsqlparser.statement.maintenance.VacuumStatement;
import net.sf.jsqlparser.statement.merge.Merge;
import net.sf.jsqlparser.statement.refresh.RefreshMaterializedViewStatement;
import net.sf.jsqlparser.statement.reindex.Reindex;
Expand Down Expand Up @@ -371,6 +374,30 @@ default void visit(TableMaintenanceStatement statement) {
this.visit(statement, null);
}

default <S> T visit(VacuumStatement vacuum, S context) {
return null;
}

default void visit(VacuumStatement vacuum) {
this.visit(vacuum, null);
}

default <S> T visit(ClusterStatement cluster, S context) {
return null;
}

default void visit(ClusterStatement cluster) {
this.visit(cluster, null);
}

default <S> T visit(CheckpointStatement checkpoint, S context) {
return null;
}

default void visit(CheckpointStatement checkpoint) {
this.visit(checkpoint, null);
}

default void visit(Execute execute) {
this.visit(execute, null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@
import net.sf.jsqlparser.statement.insert.InsertConflictAction;
import net.sf.jsqlparser.statement.insert.ParenthesedInsert;
import net.sf.jsqlparser.statement.lock.LockStatement;
import net.sf.jsqlparser.statement.maintenance.CheckpointStatement;
import net.sf.jsqlparser.statement.maintenance.ClusterStatement;
import net.sf.jsqlparser.statement.maintenance.VacuumStatement;
import net.sf.jsqlparser.statement.merge.Merge;
import net.sf.jsqlparser.statement.merge.MergeOperationVisitor;
import net.sf.jsqlparser.statement.merge.MergeOperationVisitorAdapter;
Expand Down Expand Up @@ -708,6 +711,21 @@ public <S> T visit(TableMaintenanceStatement statement, S context) {
return null;
}

@Override
public <S> T visit(VacuumStatement vacuum, S context) {
return null;
}

@Override
public <S> T visit(ClusterStatement cluster, S context) {
return null;
}

@Override
public <S> T visit(CheckpointStatement checkpoint, S context) {
return null;
}

@Override
public <S> T visit(SavepointStatement savepointStatement, S context) {
// @todo: do something usefully here
Expand Down
Loading
Loading