Skip to content

Commit a261832

Browse files
Added support for SHOW INDEX from table (#1704)
* Added support for SHOW INDEX from table * Added * import * fix for javadoc added <doclint>none</doclint>
1 parent be8e7a8 commit a261832

File tree

16 files changed

+339
-6
lines changed

16 files changed

+339
-6
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@
316316
<configuration>
317317
<additionalOptions>${javadoc.opts}</additionalOptions>
318318
<excludePackageNames>net.sf.jsqlparser.parser</excludePackageNames>
319+
<doclint>none</doclint>
319320
</configuration>
320321
<goals>
321322
<goal>jar</goal>

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,10 @@ public enum Feature {
591591
* @see ShowColumnsStatement
592592
*/
593593
showColumns,
594+
/**
595+
* @see ShowIndexStatement
596+
*/
597+
showIndex,
594598
/**
595599
* @see UseStatement
596600
*/

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import net.sf.jsqlparser.statement.merge.Merge;
3232
import net.sf.jsqlparser.statement.replace.Replace;
3333
import net.sf.jsqlparser.statement.select.Select;
34+
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
3435
import net.sf.jsqlparser.statement.show.ShowTablesStatement;
3536
import net.sf.jsqlparser.statement.truncate.Truncate;
3637
import net.sf.jsqlparser.statement.update.Update;
@@ -82,7 +83,9 @@ public interface StatementVisitor {
8283
void visit(ResetStatement reset);
8384

8485
void visit(ShowColumnsStatement set);
85-
86+
87+
void visit(ShowIndexStatement showIndex);
88+
8689
void visit(ShowTablesStatement showTables);
8790

8891
void visit(Merge merge);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import net.sf.jsqlparser.statement.merge.Merge;
3232
import net.sf.jsqlparser.statement.replace.Replace;
3333
import net.sf.jsqlparser.statement.select.Select;
34+
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
3435
import net.sf.jsqlparser.statement.show.ShowTablesStatement;
3536
import net.sf.jsqlparser.statement.truncate.Truncate;
3637
import net.sf.jsqlparser.statement.update.Update;
@@ -172,6 +173,10 @@ public void visit(ShowStatement aThis) {
172173
public void visit(ShowColumnsStatement set) {
173174
}
174175

176+
@Override
177+
public void visit(ShowIndexStatement set) {
178+
}
179+
175180
@Override
176181
public void visit(ShowTablesStatement showTables) {
177182
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.show;
11+
12+
import net.sf.jsqlparser.statement.Statement;
13+
import net.sf.jsqlparser.statement.StatementVisitor;
14+
15+
/**
16+
*
17+
* @author Jayant Kumar Yadav
18+
*/
19+
20+
public class ShowIndexStatement implements Statement {
21+
22+
private String tableName;
23+
24+
public ShowIndexStatement() {
25+
// empty constructor
26+
}
27+
28+
public ShowIndexStatement(String tableName) {
29+
this.tableName = tableName;
30+
}
31+
32+
public String getTableName() {
33+
return tableName;
34+
}
35+
36+
public void setTableName(String tableName) {
37+
this.tableName = tableName;
38+
}
39+
40+
@Override
41+
public String toString() {
42+
return "SHOW INDEX FROM " + tableName;
43+
}
44+
45+
@Override
46+
public void accept(StatementVisitor statementVisitor) {
47+
statementVisitor.visit(this);
48+
}
49+
50+
public ShowIndexStatement withTableName(String tableName) {
51+
this.setTableName(tableName);
52+
return this;
53+
}
54+
}

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

Lines changed: 114 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,119 @@
1313
import java.util.List;
1414
import java.util.Map;
1515

16-
import net.sf.jsqlparser.expression.*;
17-
import net.sf.jsqlparser.expression.operators.arithmetic.*;
16+
import net.sf.jsqlparser.expression.AllValue;
17+
import net.sf.jsqlparser.expression.AnalyticExpression;
18+
import net.sf.jsqlparser.expression.AnyComparisonExpression;
19+
import net.sf.jsqlparser.expression.ArrayConstructor;
20+
import net.sf.jsqlparser.expression.ArrayExpression;
21+
import net.sf.jsqlparser.expression.BinaryExpression;
22+
import net.sf.jsqlparser.expression.CaseExpression;
23+
import net.sf.jsqlparser.expression.CastExpression;
24+
import net.sf.jsqlparser.expression.CollateExpression;
25+
import net.sf.jsqlparser.expression.ConnectByRootOperator;
26+
import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
27+
import net.sf.jsqlparser.expression.DateValue;
28+
import net.sf.jsqlparser.expression.DoubleValue;
29+
import net.sf.jsqlparser.expression.Expression;
30+
import net.sf.jsqlparser.expression.ExpressionVisitor;
31+
import net.sf.jsqlparser.expression.ExtractExpression;
32+
import net.sf.jsqlparser.expression.Function;
33+
import net.sf.jsqlparser.expression.HexValue;
34+
import net.sf.jsqlparser.expression.IntervalExpression;
35+
import net.sf.jsqlparser.expression.JdbcNamedParameter;
36+
import net.sf.jsqlparser.expression.JdbcParameter;
37+
import net.sf.jsqlparser.expression.JsonAggregateFunction;
38+
import net.sf.jsqlparser.expression.JsonExpression;
39+
import net.sf.jsqlparser.expression.JsonFunction;
40+
import net.sf.jsqlparser.expression.JsonFunctionExpression;
41+
import net.sf.jsqlparser.expression.KeepExpression;
42+
import net.sf.jsqlparser.expression.LongValue;
43+
import net.sf.jsqlparser.expression.MySQLGroupConcat;
44+
import net.sf.jsqlparser.expression.NextValExpression;
45+
import net.sf.jsqlparser.expression.NotExpression;
46+
import net.sf.jsqlparser.expression.NullValue;
47+
import net.sf.jsqlparser.expression.NumericBind;
48+
import net.sf.jsqlparser.expression.OracleHierarchicalExpression;
49+
import net.sf.jsqlparser.expression.OracleHint;
50+
import net.sf.jsqlparser.expression.OracleNamedFunctionParameter;
51+
import net.sf.jsqlparser.expression.OverlapsCondition;
52+
import net.sf.jsqlparser.expression.Parenthesis;
53+
import net.sf.jsqlparser.expression.RowConstructor;
54+
import net.sf.jsqlparser.expression.RowGetExpression;
55+
import net.sf.jsqlparser.expression.SafeCastExpression;
56+
import net.sf.jsqlparser.expression.SignedExpression;
57+
import net.sf.jsqlparser.expression.StringValue;
58+
import net.sf.jsqlparser.expression.TimeKeyExpression;
59+
import net.sf.jsqlparser.expression.TimeValue;
60+
import net.sf.jsqlparser.expression.TimestampValue;
61+
import net.sf.jsqlparser.expression.TimezoneExpression;
62+
import net.sf.jsqlparser.expression.TryCastExpression;
63+
import net.sf.jsqlparser.expression.UserVariable;
64+
import net.sf.jsqlparser.expression.ValueListExpression;
65+
import net.sf.jsqlparser.expression.VariableAssignment;
66+
import net.sf.jsqlparser.expression.WhenClause;
67+
import net.sf.jsqlparser.expression.XMLSerializeExpr;
68+
import net.sf.jsqlparser.expression.operators.arithmetic.Addition;
69+
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
70+
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift;
71+
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseOr;
72+
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseRightShift;
73+
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseXor;
74+
import net.sf.jsqlparser.expression.operators.arithmetic.Concat;
75+
import net.sf.jsqlparser.expression.operators.arithmetic.Division;
76+
import net.sf.jsqlparser.expression.operators.arithmetic.IntegerDivision;
77+
import net.sf.jsqlparser.expression.operators.arithmetic.Modulo;
78+
import net.sf.jsqlparser.expression.operators.arithmetic.Multiplication;
79+
import net.sf.jsqlparser.expression.operators.arithmetic.Subtraction;
1880
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
1981
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
2082
import net.sf.jsqlparser.expression.operators.conditional.XorExpression;
21-
import net.sf.jsqlparser.expression.operators.relational.*;
83+
import net.sf.jsqlparser.expression.operators.relational.Between;
84+
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
85+
import net.sf.jsqlparser.expression.operators.relational.ExistsExpression;
86+
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
87+
import net.sf.jsqlparser.expression.operators.relational.FullTextSearch;
88+
import net.sf.jsqlparser.expression.operators.relational.GeometryDistance;
89+
import net.sf.jsqlparser.expression.operators.relational.GreaterThan;
90+
import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals;
91+
import net.sf.jsqlparser.expression.operators.relational.InExpression;
92+
import net.sf.jsqlparser.expression.operators.relational.IsBooleanExpression;
93+
import net.sf.jsqlparser.expression.operators.relational.IsDistinctExpression;
94+
import net.sf.jsqlparser.expression.operators.relational.IsNullExpression;
95+
import net.sf.jsqlparser.expression.operators.relational.ItemsListVisitor;
96+
import net.sf.jsqlparser.expression.operators.relational.JsonOperator;
97+
import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
98+
import net.sf.jsqlparser.expression.operators.relational.Matches;
99+
import net.sf.jsqlparser.expression.operators.relational.MinorThan;
100+
import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals;
101+
import net.sf.jsqlparser.expression.operators.relational.MultiExpressionList;
102+
import net.sf.jsqlparser.expression.operators.relational.NamedExpressionList;
103+
import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo;
104+
import net.sf.jsqlparser.expression.operators.relational.RegExpMatchOperator;
105+
import net.sf.jsqlparser.expression.operators.relational.RegExpMySQLOperator;
106+
import net.sf.jsqlparser.expression.operators.relational.SimilarToExpression;
22107
import net.sf.jsqlparser.schema.Column;
23108
import net.sf.jsqlparser.schema.Table;
24-
import net.sf.jsqlparser.statement.*;
109+
import net.sf.jsqlparser.statement.Block;
110+
import net.sf.jsqlparser.statement.Commit;
111+
import net.sf.jsqlparser.statement.CreateFunctionalStatement;
112+
import net.sf.jsqlparser.statement.DeclareStatement;
113+
import net.sf.jsqlparser.statement.DescribeStatement;
114+
import net.sf.jsqlparser.statement.ExplainStatement;
115+
import net.sf.jsqlparser.statement.IfElseStatement;
116+
import net.sf.jsqlparser.statement.PurgeObjectType;
117+
import net.sf.jsqlparser.statement.PurgeStatement;
118+
import net.sf.jsqlparser.statement.ResetStatement;
119+
import net.sf.jsqlparser.statement.RollbackStatement;
120+
import net.sf.jsqlparser.statement.SavepointStatement;
121+
import net.sf.jsqlparser.statement.SetStatement;
122+
import net.sf.jsqlparser.statement.ShowColumnsStatement;
123+
import net.sf.jsqlparser.statement.ShowStatement;
124+
import net.sf.jsqlparser.statement.Statement;
125+
import net.sf.jsqlparser.statement.StatementVisitor;
126+
import net.sf.jsqlparser.statement.Statements;
127+
import net.sf.jsqlparser.statement.UnsupportedStatement;
128+
import net.sf.jsqlparser.statement.UseStatement;
25129
import net.sf.jsqlparser.statement.alter.Alter;
26130
import net.sf.jsqlparser.statement.alter.AlterSession;
27131
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
@@ -62,6 +166,7 @@
62166
import net.sf.jsqlparser.statement.select.TableFunction;
63167
import net.sf.jsqlparser.statement.select.ValuesList;
64168
import net.sf.jsqlparser.statement.select.WithItem;
169+
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
65170
import net.sf.jsqlparser.statement.show.ShowTablesStatement;
66171
import net.sf.jsqlparser.statement.truncate.Truncate;
67172
import net.sf.jsqlparser.statement.update.Update;
@@ -764,6 +869,11 @@ public void visit(ShowColumnsStatement set) {
764869
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
765870
}
766871

872+
@Override
873+
public void visit(ShowIndexStatement showIndex) {
874+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
875+
}
876+
767877
@Override
768878
public void visit(RowConstructor rowConstructor) {
769879
for (Expression expr : rowConstructor.getExprList().getExpressions()) {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.util.deparser;
11+
12+
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
13+
14+
/**
15+
*
16+
* @author Jayant Kumar Yadav
17+
*/
18+
19+
public class ShowIndexStatementDeParser extends AbstractDeParser<ShowIndexStatement> {
20+
21+
public ShowIndexStatementDeParser(StringBuilder buffer) {
22+
super(buffer);
23+
}
24+
25+
@Override
26+
public void deParse(ShowIndexStatement show) {
27+
buffer.append("SHOW INDEX FROM ").append(show.getTableName());
28+
}
29+
30+
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import net.sf.jsqlparser.statement.replace.Replace;
5555
import net.sf.jsqlparser.statement.select.Select;
5656
import net.sf.jsqlparser.statement.select.WithItem;
57+
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
5758
import net.sf.jsqlparser.statement.show.ShowTablesStatement;
5859
import net.sf.jsqlparser.statement.truncate.Truncate;
5960
import net.sf.jsqlparser.statement.update.Update;
@@ -278,6 +279,11 @@ public void visit(UseStatement use) {
278279
public void visit(ShowColumnsStatement show) {
279280
new ShowColumnsStatementDeParser(buffer).deParse(show);
280281
}
282+
283+
@Override
284+
public void visit(ShowIndexStatement showIndexes) {
285+
new ShowIndexStatementDeParser(buffer).deParse(showIndexes);
286+
}
281287

282288
@Override
283289
public void visit(ShowTablesStatement showTables) {

src/main/java/net/sf/jsqlparser/util/validation/feature/MariaDbVersion.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ public enum MariaDbVersion implements Version {
133133
Feature.showTables,
134134
// https://mariadb.com/kb/en/show-columns/
135135
Feature.showColumns,
136+
// https://mariadb.com/kb/en/show-index/
137+
Feature.showIndex,
136138
// https://mariadb.com/kb/en/use/
137139
Feature.use,
138140
// https://mariadb.com/kb/en/grant/

src/main/java/net/sf/jsqlparser/util/validation/feature/MySqlVersion.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ public enum MySqlVersion implements Version {
118118
Feature.showTables,
119119
// https://dev.mysql.com/doc/refman/8.0/en/show-columns.html
120120
Feature.showColumns,
121+
// https://dev.mysql.com/doc/refman/8.0/en/show-index.html
122+
Feature.showIndex,
121123
// https://dev.mysql.com/doc/refman/8.0/en/grant.html
122124
Feature.grant,
123125
// https://dev.mysql.com/doc/refman/8.0/en/use.html
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 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.show.ShowIndexStatement;
14+
import net.sf.jsqlparser.util.validation.metadata.NamedObject;
15+
16+
/**
17+
*
18+
* @author Jayant Kumar Yadav
19+
*/
20+
21+
public class ShowIndexStatementValidator extends AbstractValidator<ShowIndexStatement> {
22+
23+
@Override
24+
public void validate(ShowIndexStatement show) {
25+
validateFeatureAndName(Feature.showIndex, NamedObject.table, show.getTableName());
26+
}
27+
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import net.sf.jsqlparser.statement.merge.Merge;
5454
import net.sf.jsqlparser.statement.replace.Replace;
5555
import net.sf.jsqlparser.statement.select.Select;
56+
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
5657
import net.sf.jsqlparser.statement.show.ShowTablesStatement;
5758
import net.sf.jsqlparser.statement.truncate.Truncate;
5859
import net.sf.jsqlparser.statement.update.Update;
@@ -182,7 +183,12 @@ public void visit(ShowStatement show) {
182183
public void visit(ShowColumnsStatement show) {
183184
getValidator(ShowColumnsStatementValidator.class).validate(show);
184185
}
185-
186+
187+
@Override
188+
public void visit(ShowIndexStatement show) {
189+
getValidator(ShowIndexStatementValidator.class).validate(show);
190+
}
191+
186192
@Override
187193
public void visit(ShowTablesStatement showTables) {
188194
getValidator(ShowTablesStatementValidator.class).validate(showTables);

0 commit comments

Comments
 (0)