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 @@ -145,6 +145,7 @@ and missing syntax gets added on demand — [open an issue](https://github.com/J
| **DDL** | `CREATE …` · `ALTER …` · `DROP …` |
| **MySQL table maintenance** | `ANALYZE` · `CHECK` · `OPTIMIZE` · `REPAIR TABLE` |
| **PostgreSQL RLS** | `CREATE POLICY` · `ALTER TABLE … ENABLE`/`DISABLE`/`FORCE`/`NO FORCE ROW LEVEL SECURITY` |
| **MySQL metadata statements** | `SHOW [FULL] COLUMNS`/`FIELDS` · `SHOW TABLE STATUS` · `SHOW CREATE TABLE`/`VIEW`/`PROCEDURE`/`FUNCTION`/`TRIGGER`/`EVENT`/`DATABASE`/`USER` |
| **Informix constraints** | `ALTER TABLE … ADD CONSTRAINT` with trailing constraint names for primary, unique, foreign and check constraints; enable with `parser.withDialect(Dialect.INFORMIX)` |
| **Salesforce SOQL** | `INCLUDES` · `EXCLUDES` |

Expand Down
12 changes: 12 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 @@ -683,6 +683,18 @@ public enum Feature {
* @see ShowIndexStatement
*/
showIndex,
/**
* MySQL/MariaDB "SHOW TABLE STATUS" statement is allowed
*
* @see ShowTableStatusStatement
*/
showTableStatus,
/**
* MySQL/MariaDB "SHOW CREATE" statement is allowed
*
* @see ShowCreateStatement
*/
showCreate,
/**
* @see UseStatement
*/
Expand Down
174 changes: 169 additions & 5 deletions src/main/java/net/sf/jsqlparser/statement/ShowColumnsStatement.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,148 @@
*/
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.show.ShowTablesStatement.SelectionMode;

/**
* A MySQL {@code SHOW [EXTENDED] [FULL] {COLUMNS | FIELDS} {FROM | IN} table [{FROM | IN} db]
* [LIKE 'pattern' | WHERE expr]} statement.
*
* @see <a href="https://dev.mysql.com/doc/refman/8.4/en/show-columns.html">MySQL SHOW COLUMNS</a>
*/
public class ShowColumnsStatement implements Statement {

private String tableName;
private boolean extended;
private boolean full;
private boolean fieldsKeyword;
private SelectionMode tableSelectionMode = SelectionMode.FROM;
private Table table;
private SelectionMode dbSelectionMode = SelectionMode.FROM;
private String dbName;
private Expression likeExpression;
private Expression whereCondition;

public ShowColumnsStatement() {
// empty constructor
}

public ShowColumnsStatement(String tableName) {
this.tableName = tableName;
setTableName(tableName);
}

public ShowColumnsStatement(Table table) {
this.table = table;
}

public boolean isExtended() {
return extended;
}

public void setExtended(boolean extended) {
this.extended = extended;
}

public boolean isFull() {
return full;
}

public void setFull(boolean full) {
this.full = full;
}

/** Whether the statement is spelled with {@code FIELDS} instead of {@code COLUMNS}. */
public boolean isFieldsKeyword() {
return fieldsKeyword;
}

public void setFieldsKeyword(boolean fieldsKeyword) {
this.fieldsKeyword = fieldsKeyword;
}

/** The keyword before the table name, {@code FROM} unless {@code IN} was written. */
public SelectionMode getTableSelectionMode() {
return tableSelectionMode;
}

public void setTableSelectionMode(SelectionMode tableSelectionMode) {
this.tableSelectionMode = tableSelectionMode;
}

public Table getTable() {
return table;
}

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

/** The table name as written, including any qualifier; derived from {@link #getTable()}. */
public String getTableName() {
return tableName;
return table == null ? null : table.getFullyQualifiedName();
}

public void setTableName(String tableName) {
this.tableName = tableName;
this.table = tableName == null ? null : new Table(tableName);
}

/** The keyword before the database name, {@code FROM} unless {@code IN} was written. */
public SelectionMode getDbSelectionMode() {
return dbSelectionMode;
}

public void setDbSelectionMode(SelectionMode dbSelectionMode) {
this.dbSelectionMode = dbSelectionMode;
}

/** The database of the trailing {@code FROM db} or {@code IN db} clause, or null. */
public String getDbName() {
return dbName;
}

public void setDbName(String dbName) {
this.dbName = dbName;
}

public Expression getLikeExpression() {
return likeExpression;
}

public void setLikeExpression(Expression likeExpression) {
this.likeExpression = likeExpression;
}

public Expression getWhereCondition() {
return whereCondition;
}

public void setWhereCondition(Expression whereCondition) {
this.whereCondition = whereCondition;
}

@Override
public String toString() {
return "SHOW COLUMNS FROM " + tableName;
StringBuilder builder = new StringBuilder("SHOW");
if (extended) {
builder.append(" EXTENDED");
}
if (full) {
builder.append(" FULL");
}
builder.append(fieldsKeyword ? " FIELDS " : " COLUMNS ")
.append(tableSelectionMode == null ? SelectionMode.FROM : tableSelectionMode)
.append(' ').append(table);
if (dbName != null) {
builder.append(' ')
.append(dbSelectionMode == null ? SelectionMode.FROM : dbSelectionMode)
.append(' ').append(dbName);
}
if (likeExpression != null) {
builder.append(" LIKE ").append(likeExpression);
} else if (whereCondition != null) {
builder.append(" WHERE ").append(whereCondition);
}
return builder.toString();
}

@Override
Expand All @@ -43,4 +162,49 @@ public ShowColumnsStatement withTableName(String tableName) {
this.setTableName(tableName);
return this;
}

public ShowColumnsStatement withTable(Table table) {
this.setTable(table);
return this;
}

public ShowColumnsStatement withExtended(boolean extended) {
this.setExtended(extended);
return this;
}

public ShowColumnsStatement withFull(boolean full) {
this.setFull(full);
return this;
}

public ShowColumnsStatement withFieldsKeyword(boolean fieldsKeyword) {
this.setFieldsKeyword(fieldsKeyword);
return this;
}

public ShowColumnsStatement withTableSelectionMode(SelectionMode tableSelectionMode) {
this.setTableSelectionMode(tableSelectionMode);
return this;
}

public ShowColumnsStatement withDbSelectionMode(SelectionMode dbSelectionMode) {
this.setDbSelectionMode(dbSelectionMode);
return this;
}

public ShowColumnsStatement withDbName(String dbName) {
this.setDbName(dbName);
return this;
}

public ShowColumnsStatement withLikeExpression(Expression likeExpression) {
this.setLikeExpression(likeExpression);
return this;
}

public ShowColumnsStatement withWhereCondition(Expression whereCondition) {
this.setWhereCondition(whereCondition);
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,9 @@
import net.sf.jsqlparser.statement.select.SelectVisitorAdapter;
import net.sf.jsqlparser.statement.select.TableStatement;
import net.sf.jsqlparser.statement.select.WithItem;
import net.sf.jsqlparser.statement.show.ShowCreateStatement;
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
import net.sf.jsqlparser.statement.show.ShowTableStatusStatement;
import net.sf.jsqlparser.statement.show.ShowTablesStatement;
import net.sf.jsqlparser.statement.truncate.Truncate;
import net.sf.jsqlparser.statement.update.Update;
Expand Down Expand Up @@ -923,6 +925,16 @@ public <S> Void visit(ShowTablesStatement showTables, S context) {
return metadataOnly();
}

@Override
public <S> Void visit(ShowTableStatusStatement showTableStatus, S context) {
return metadataOnly();
}

@Override
public <S> Void visit(ShowCreateStatement showCreate, S context) {
return metadataOnly();
}

@Override
public <S> Void visit(DescribeStatement describe, S context) {
return metadataOnly();
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,9 @@
import net.sf.jsqlparser.statement.merge.Merge;
import net.sf.jsqlparser.statement.refresh.RefreshMaterializedViewStatement;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.show.ShowCreateStatement;
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
import net.sf.jsqlparser.statement.show.ShowTableStatusStatement;
import net.sf.jsqlparser.statement.show.ShowTablesStatement;
import net.sf.jsqlparser.statement.truncate.Truncate;
import net.sf.jsqlparser.statement.update.ParenthesedUpdate;
Expand Down Expand Up @@ -311,6 +313,22 @@ default void visit(ShowTablesStatement showTables) {
this.visit(showTables, null);
}

default <S> T visit(ShowTableStatusStatement showTableStatus, S context) {
return null;
}

default void visit(ShowTableStatusStatement showTableStatus) {
this.visit(showTableStatus, null);
}

default <S> T visit(ShowCreateStatement showCreate, S context) {
return null;
}

default void visit(ShowCreateStatement showCreate) {
this.visit(showCreate, null);
}

<S> T visit(Merge merge, S context);

default void visit(Merge merge) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@
import net.sf.jsqlparser.statement.select.SelectVisitor;
import net.sf.jsqlparser.statement.select.SelectVisitorAdapter;
import net.sf.jsqlparser.statement.select.WithItem;
import net.sf.jsqlparser.statement.show.ShowCreateStatement;
import net.sf.jsqlparser.statement.show.ShowIndexStatement;
import net.sf.jsqlparser.statement.show.ShowTableStatusStatement;
import net.sf.jsqlparser.statement.show.ShowTablesStatement;
import net.sf.jsqlparser.statement.truncate.Truncate;
import net.sf.jsqlparser.statement.update.ParenthesedUpdate;
Expand Down Expand Up @@ -567,6 +569,16 @@ public <S> T visit(ShowTablesStatement showTables, S context) {
return null;
}

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

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

@Override
public <S> T visit(DeclareStatement declareStatement, S context) {
return null;
Expand Down
Loading
Loading