001package gudusoft.gsqlparser.stmt;
002
003
004import gudusoft.gsqlparser.*;
005import gudusoft.gsqlparser.nodes.TDescribeSqlNode;
006import gudusoft.gsqlparser.nodes.TObjectName;
007import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
008
009public class TDescribeStmt extends TCustomSqlStatement {
010
011    private TObjectName dbObjectName;
012    private EDbObjectType dbObjectType;
013
014    public TObjectName getDbObjectName() {
015        return dbObjectName;
016    }
017
018    public EDbObjectType getDbObjectType() {
019        return dbObjectType;
020    }
021
022    public TObjectName getColumnName() {
023        return describeSqlNode.getColumnName();
024    }
025
026    public TSourceToken getDescToken() {
027        return describeSqlNode.getDescToken();
028    }
029
030    public TObjectName getTableName() {
031        return describeSqlNode.getTableName();
032    }
033
034    /**
035     * Whether the statement asks for the metadata as JSON
036     * ({@code DESCRIBE TABLE EXTENDED t AS JSON}, Databricks / Spark).
037     *
038     * @return {@code true} when an {@code AS JSON} clause is present
039     */
040    public boolean isAsJson() {
041        return (describeSqlNode != null) && (describeSqlNode.getAsJsonToken() != null);
042    }
043
044    public TDescribeStmt(EDbVendor dbvendor) {
045        super(dbvendor);
046        sqlstatementtype = ESqlStatementType.sstdescribe;
047    }
048
049    TDescribeSqlNode describeSqlNode;
050
051    public int doParseStatement(TCustomSqlStatement psql) {
052        if (rootNode == null) return -1;
053        super.doParseStatement(psql);
054        describeSqlNode = (TDescribeSqlNode)rootNode;
055        dbObjectName = describeSqlNode.getDbObjectName();
056        dbObjectType = describeSqlNode.getDbObjectType();
057
058        return 0;
059    }
060
061    public void accept(TParseTreeVisitor v){
062        v.preVisit(this);
063        v.postVisit(this);
064    }
065
066    public void acceptChildren(TParseTreeVisitor v){
067        v.preVisit(this);
068        v.postVisit(this);
069    }
070
071}