001package gudusoft.gsqlparser.nodes.oceanbase;
002
003import gudusoft.gsqlparser.EDbObjectType;
004import gudusoft.gsqlparser.nodes.TObjectName;
005import gudusoft.gsqlparser.nodes.TParseTreeNode;
006import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
007
008/**
009 * AST node for OceanBase {@code PURGE} statements.
010 *
011 * <p>Supports:
012 * <ul>
013 *   <li>{@code PURGE TABLE name}</li>
014 *   <li>{@code PURGE DATABASE name}</li>
015 *   <li>{@code PURGE RECYCLEBIN}</li>
016 * </ul>
017 *
018 * @since 4.0.1.4
019 */
020public class TOceanbasePurgeSqlNode extends TParseTreeNode {
021
022    public enum EPurgeType { TABLE, DATABASE, RECYCLEBIN, INDEX, TENANT }
023
024    private EPurgeType purgeType;
025    private TObjectName objectName;
026
027    public EPurgeType getPurgeType() {
028        return purgeType;
029    }
030
031    public void setPurgeType(EPurgeType purgeType) {
032        this.purgeType = purgeType;
033    }
034
035    public TObjectName getObjectName() {
036        return objectName;
037    }
038
039    public void setObjectName(TObjectName objectName) {
040        this.objectName = objectName;
041        if (objectName != null) {
042            objectName.setDbObjectType(
043                    purgeType == EPurgeType.DATABASE
044                            ? EDbObjectType.database
045                            : EDbObjectType.table);
046        }
047    }
048
049    @Override
050    public void init(Object arg1) {
051        setObjectName((TObjectName) arg1);
052    }
053
054    @Override
055    public void accept(TParseTreeVisitor v) {
056        v.preVisit(this);
057        v.postVisit(this);
058    }
059
060    @Override
061    public void acceptChildren(TParseTreeVisitor v) {
062        v.preVisit(this);
063        if (objectName != null) {
064            objectName.acceptChildren(v);
065        }
066        v.postVisit(this);
067    }
068}