Skip to content

Commit

Permalink
Closes JSQLParser#1579. Added ANALYZE <table> support.
Browse files Browse the repository at this point in the history
  • Loading branch information
d2a-raudenaerde committed Jul 8, 2022
1 parent bf8a7db commit a01a097
Show file tree
Hide file tree
Showing 10 changed files with 156 additions and 1 deletion.
9 changes: 9 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 @@ -28,6 +28,7 @@
import net.sf.jsqlparser.statement.UseStatement;
import net.sf.jsqlparser.statement.alter.Alter;
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
import net.sf.jsqlparser.statement.analyze.Analyze;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.function.CreateFunction;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
Expand Down Expand Up @@ -394,6 +395,14 @@ public enum Feature {
*/
alterIndex,


/**
* SQL "ANALYZE" statement is allowed
*
* @see Analyze
*/
analyze,

/**
* SQL "TRUNCATE" statement is allowed
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
import net.sf.jsqlparser.statement.analyze.Analyze;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
Expand All @@ -37,7 +38,9 @@
import net.sf.jsqlparser.statement.values.ValuesStatement;

public interface StatementVisitor {


void visit(Analyze analyze);

void visit(SavepointStatement savepointStatement);

void visit(RollbackStatement rollbackStatement);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
import net.sf.jsqlparser.statement.analyze.Analyze;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
Expand Down Expand Up @@ -199,6 +200,11 @@ public void visit(CreateFunctionalStatement createFunctionalStatement) {
public void visit(CreateSynonym createSynonym) {
}

@Override
public void visit(Analyze analyze) {

}

@Override
public void visit(SavepointStatement savepointStatement) {
//@todo: do something usefull here
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/analyze/Analyze.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2022 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement.analyze;

import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;

public class Analyze implements Statement {

private Table table;

@Override
public void accept(StatementVisitor statementVisitor) {
statementVisitor.visit(this);
}

public Table getTable() {
return table;
}

public void setTable(Table table) {
this.table = table;
}

@Override
public String toString() {
return "ANALYZE " + table.toString();
}

public Analyze withTable(Table table) {
this.setTable(table);
return this;
}
}
4 changes: 4 additions & 0 deletions src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
import net.sf.jsqlparser.statement.analyze.Analyze;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
Expand Down Expand Up @@ -686,6 +687,9 @@ public void visit(Replace replace) {
}
}

public void visit(Analyze analyze) {
visit(analyze.getTable());
}
@Override
public void visit(Drop drop) {
visit(drop.getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
import net.sf.jsqlparser.statement.analyze.Analyze;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
Expand Down Expand Up @@ -182,6 +183,11 @@ public void visit(Update update) {

}

public void visit(Analyze analyzer) {
buffer.append("ANALYZE ");
buffer.append(analyzer.getTable());
}

@Override
public void visit(Alter alter) {
AlterDeParser alterDeParser = new AlterDeParser(buffer);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2022 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.util.validation.validator;

import net.sf.jsqlparser.parser.feature.Feature;
import net.sf.jsqlparser.statement.analyze.Analyze;
import net.sf.jsqlparser.util.validation.ValidationCapability;
import net.sf.jsqlparser.util.validation.metadata.NamedObject;

public class AnalyzeValidator extends AbstractValidator<Analyze>{
@Override
public void validate(Analyze analyze) {
for (ValidationCapability c : getCapabilities()) {
validateFeature(c, Feature.analyze);
validateName(c, NamedObject.table, analyze.getTable().getFullyQualifiedName(), true);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
import net.sf.jsqlparser.statement.analyze.Analyze;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.function.CreateFunction;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
Expand Down Expand Up @@ -268,6 +269,11 @@ public void visit(CreateSynonym createSynonym) {
getValidator(CreateSynonymValidator.class).validate(createSynonym);
}

@Override
public void visit(Analyze analyze) {
getValidator(AnalyzeValidator.class).validate(analyze);
}

@Override
public void visit(SavepointStatement savepointStatement) {
//TODO: not yet implemented
Expand Down
18 changes: 18 additions & 0 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import net.sf.jsqlparser.expression.operators.conditional.*;
import net.sf.jsqlparser.expression.operators.relational.*;
import net.sf.jsqlparser.schema.*;
import net.sf.jsqlparser.statement.*;
import net.sf.jsqlparser.statement.analyze.*;
import net.sf.jsqlparser.statement.alter.*;
import net.sf.jsqlparser.statement.alter.sequence.*;
import net.sf.jsqlparser.statement.comment.*;
Expand Down Expand Up @@ -620,6 +621,8 @@ Statement SingleStatement() :
|
stm = Drop()
|
stm = Analyze()
|
stm = Truncate()
|
stm = Execute()
Expand Down Expand Up @@ -5165,6 +5168,21 @@ ColDataType ColDataType():
}
}

Analyze Analyze():
{
Analyze analyze = new Analyze();
Table table = null;
}
{
<K_ANALYZE>
table=Table()

{
analyze.setTable(table);
return analyze;
}
}

CreateView CreateView():
{
CreateView createView = new CreateView();
Expand Down
36 changes: 36 additions & 0 deletions src/test/java/net/sf/jsqlparser/statement/analyze/AnalyzeTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2022 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement.analyze;

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.schema.Table;
import org.junit.jupiter.api.Test;

import java.io.StringReader;

import static net.sf.jsqlparser.test.TestUtils.assertDeparse;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class AnalyzeTest {

private final CCJSqlParserManager parserManager = new CCJSqlParserManager();

@Test
public void testAnalyze() throws JSQLParserException {
String statement = "ANALYZE mytab";
Analyze parsed = (Analyze) parserManager.parse(new StringReader(statement));
assertEquals("mytab", parsed.getTable().getFullyQualifiedName());
assertEquals(statement, "" + parsed);

assertDeparse(new Analyze().withTable(new Table("mytab")), statement);
}

}

0 comments on commit a01a097

Please sign in to comment.