001package gudusoft.gsqlparser.stmt.oceanbase;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.nodes.TObjectName;
007import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
008import gudusoft.gsqlparser.nodes.oceanbase.TOceanbasePurgeSqlNode;
009
010/**
011 * OceanBase {@code PURGE} statement.
012 *
013 * <p>Supports:
014 * <ul>
015 *   <li>{@code PURGE TABLE name}</li>
016 *   <li>{@code PURGE DATABASE name}</li>
017 *   <li>{@code PURGE RECYCLEBIN}</li>
018 * </ul>
019 * Tagged {@link ESqlStatementType#sstoceanbase_purge}.
020 *
021 * @since 4.0.1.4
022 */
023public class TPurgeSqlStatement extends TCustomSqlStatement {
024
025    private TOceanbasePurgeSqlNode.EPurgeType purgeType;
026    private TObjectName objectName;
027
028    public TPurgeSqlStatement(EDbVendor dbvendor) {
029        super(dbvendor);
030        this.sqlstatementtype = ESqlStatementType.sstoceanbase_purge;
031    }
032
033    public TOceanbasePurgeSqlNode.EPurgeType getPurgeType() {
034        return purgeType;
035    }
036
037    public TObjectName getObjectName() {
038        return objectName;
039    }
040
041    @Override
042    public int doParseStatement(TCustomSqlStatement psql) {
043        if (rootNode == null) return -1;
044        super.doParseStatement(psql);
045        TOceanbasePurgeSqlNode node = (TOceanbasePurgeSqlNode) rootNode;
046        this.purgeType = node.getPurgeType();
047        this.objectName = node.getObjectName();
048        return 0;
049    }
050
051    @Override
052    public void accept(TParseTreeVisitor v) {
053        v.preVisit(this);
054        v.postVisit(this);
055    }
056
057    @Override
058    public void acceptChildren(TParseTreeVisitor v) {
059        v.preVisit(this);
060        v.postVisit(this);
061    }
062}