Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closes #1579. Added ANALYZE <table> support. #1587

Merged
merged 1 commit into from
Jul 14, 2022
Merged
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
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);
}

}