Skip to content

Commit e5c8a89

Browse files
Closes #1579. Added ANALYZE <table> support. (#1587)
1 parent 2654548 commit e5c8a89

File tree

10 files changed

+156
-1
lines changed

10 files changed

+156
-1
lines changed

src/main/java/net/sf/jsqlparser/parser/feature/Feature.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import net.sf.jsqlparser.statement.UseStatement;
2929
import net.sf.jsqlparser.statement.alter.Alter;
3030
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
31+
import net.sf.jsqlparser.statement.analyze.Analyze;
3132
import net.sf.jsqlparser.statement.comment.Comment;
3233
import net.sf.jsqlparser.statement.create.function.CreateFunction;
3334
import net.sf.jsqlparser.statement.create.index.CreateIndex;
@@ -394,6 +395,14 @@ public enum Feature {
394395
*/
395396
alterIndex,
396397

398+
399+
/**
400+
* SQL "ANALYZE" statement is allowed
401+
*
402+
* @see Analyze
403+
*/
404+
analyze,
405+
397406
/**
398407
* SQL "TRUNCATE" statement is allowed
399408
*

src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
1515
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
1616
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
17+
import net.sf.jsqlparser.statement.analyze.Analyze;
1718
import net.sf.jsqlparser.statement.comment.Comment;
1819
import net.sf.jsqlparser.statement.create.index.CreateIndex;
1920
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -37,7 +38,9 @@
3738
import net.sf.jsqlparser.statement.values.ValuesStatement;
3839

3940
public interface StatementVisitor {
40-
41+
42+
void visit(Analyze analyze);
43+
4144
void visit(SavepointStatement savepointStatement);
4245

4346
void visit(RollbackStatement rollbackStatement);

src/main/java/net/sf/jsqlparser/statement/StatementVisitorAdapter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
1515
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
1616
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
17+
import net.sf.jsqlparser.statement.analyze.Analyze;
1718
import net.sf.jsqlparser.statement.comment.Comment;
1819
import net.sf.jsqlparser.statement.create.index.CreateIndex;
1920
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -199,6 +200,11 @@ public void visit(CreateFunctionalStatement createFunctionalStatement) {
199200
public void visit(CreateSynonym createSynonym) {
200201
}
201202

203+
@Override
204+
public void visit(Analyze analyze) {
205+
206+
}
207+
202208
@Override
203209
public void visit(SavepointStatement savepointStatement) {
204210
//@todo: do something usefull here
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2022 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.analyze;
11+
12+
import net.sf.jsqlparser.schema.Table;
13+
import net.sf.jsqlparser.statement.Statement;
14+
import net.sf.jsqlparser.statement.StatementVisitor;
15+
16+
public class Analyze implements Statement {
17+
18+
private Table table;
19+
20+
@Override
21+
public void accept(StatementVisitor statementVisitor) {
22+
statementVisitor.visit(this);
23+
}
24+
25+
public Table getTable() {
26+
return table;
27+
}
28+
29+
public void setTable(Table table) {
30+
this.table = table;
31+
}
32+
33+
@Override
34+
public String toString() {
35+
return "ANALYZE " + table.toString();
36+
}
37+
38+
public Analyze withTable(Table table) {
39+
this.setTable(table);
40+
return this;
41+
}
42+
}

src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
2828
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
2929
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
30+
import net.sf.jsqlparser.statement.analyze.Analyze;
3031
import net.sf.jsqlparser.statement.comment.Comment;
3132
import net.sf.jsqlparser.statement.create.index.CreateIndex;
3233
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -686,6 +687,9 @@ public void visit(Replace replace) {
686687
}
687688
}
688689

690+
public void visit(Analyze analyze) {
691+
visit(analyze.getTable());
692+
}
689693
@Override
690694
public void visit(Drop drop) {
691695
visit(drop.getName());

src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
3737
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
3838
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
39+
import net.sf.jsqlparser.statement.analyze.Analyze;
3940
import net.sf.jsqlparser.statement.comment.Comment;
4041
import net.sf.jsqlparser.statement.create.index.CreateIndex;
4142
import net.sf.jsqlparser.statement.create.schema.CreateSchema;
@@ -191,6 +192,11 @@ public void visit(Update update) {
191192

192193
}
193194

195+
public void visit(Analyze analyzer) {
196+
buffer.append("ANALYZE ");
197+
buffer.append(analyzer.getTable());
198+
}
199+
194200
@Override
195201
public void visit(Alter alter) {
196202
AlterDeParser alterDeParser = new AlterDeParser(buffer);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2022 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.util.validation.validator;
11+
12+
import net.sf.jsqlparser.parser.feature.Feature;
13+
import net.sf.jsqlparser.statement.analyze.Analyze;
14+
import net.sf.jsqlparser.util.validation.ValidationCapability;
15+
import net.sf.jsqlparser.util.validation.metadata.NamedObject;
16+
17+
public class AnalyzeValidator extends AbstractValidator<Analyze>{
18+
@Override
19+
public void validate(Analyze analyze) {
20+
for (ValidationCapability c : getCapabilities()) {
21+
validateFeature(c, Feature.analyze);
22+
validateName(c, NamedObject.table, analyze.getTable().getFullyQualifiedName(), true);
23+
}
24+
}
25+
}

src/main/java/net/sf/jsqlparser/util/validation/validator/StatementValidator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
3535
import net.sf.jsqlparser.statement.alter.RenameTableStatement;
3636
import net.sf.jsqlparser.statement.alter.sequence.AlterSequence;
37+
import net.sf.jsqlparser.statement.analyze.Analyze;
3738
import net.sf.jsqlparser.statement.comment.Comment;
3839
import net.sf.jsqlparser.statement.create.function.CreateFunction;
3940
import net.sf.jsqlparser.statement.create.index.CreateIndex;
@@ -268,6 +269,11 @@ public void visit(CreateSynonym createSynonym) {
268269
getValidator(CreateSynonymValidator.class).validate(createSynonym);
269270
}
270271

272+
@Override
273+
public void visit(Analyze analyze) {
274+
getValidator(AnalyzeValidator.class).validate(analyze);
275+
}
276+
271277
@Override
272278
public void visit(SavepointStatement savepointStatement) {
273279
//TODO: not yet implemented

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import net.sf.jsqlparser.expression.operators.conditional.*;
3737
import net.sf.jsqlparser.expression.operators.relational.*;
3838
import net.sf.jsqlparser.schema.*;
3939
import net.sf.jsqlparser.statement.*;
40+
import net.sf.jsqlparser.statement.analyze.*;
4041
import net.sf.jsqlparser.statement.alter.*;
4142
import net.sf.jsqlparser.statement.alter.sequence.*;
4243
import net.sf.jsqlparser.statement.comment.*;
@@ -620,6 +621,8 @@ Statement SingleStatement() :
620621
|
621622
stm = Drop()
622623
|
624+
stm = Analyze()
625+
|
623626
stm = Truncate()
624627
|
625628
stm = Execute()
@@ -5195,6 +5198,21 @@ ColDataType ColDataType():
51955198
}
51965199
}
51975200

5201+
Analyze Analyze():
5202+
{
5203+
Analyze analyze = new Analyze();
5204+
Table table = null;
5205+
}
5206+
{
5207+
<K_ANALYZE>
5208+
table=Table()
5209+
5210+
{
5211+
analyze.setTable(table);
5212+
return analyze;
5213+
}
5214+
}
5215+
51985216
CreateView CreateView():
51995217
{
52005218
CreateView createView = new CreateView();
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2022 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.analyze;
11+
12+
import net.sf.jsqlparser.JSQLParserException;
13+
import net.sf.jsqlparser.parser.CCJSqlParserManager;
14+
import net.sf.jsqlparser.schema.Table;
15+
import org.junit.jupiter.api.Test;
16+
17+
import java.io.StringReader;
18+
19+
import static net.sf.jsqlparser.test.TestUtils.assertDeparse;
20+
import static org.junit.jupiter.api.Assertions.assertEquals;
21+
22+
public class AnalyzeTest {
23+
24+
private final CCJSqlParserManager parserManager = new CCJSqlParserManager();
25+
26+
@Test
27+
public void testAnalyze() throws JSQLParserException {
28+
String statement = "ANALYZE mytab";
29+
Analyze parsed = (Analyze) parserManager.parse(new StringReader(statement));
30+
assertEquals("mytab", parsed.getTable().getFullyQualifiedName());
31+
assertEquals(statement, "" + parsed);
32+
33+
assertDeparse(new Analyze().withTable(new Table("mytab")), statement);
34+
}
35+
36+
}

0 commit comments

Comments
 (0)