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.TOceanbaseDropTenantSqlNode;
009
010/**
011 * OceanBase {@code DROP TENANT} statement (Phase 4 Batch 1).
012 *
013 * <p>Supports {@code DROP TENANT [IF EXISTS] name [FORCE|PURGE]}.
014 * Tagged {@link ESqlStatementType#sstoceanbase_drop_tenant}.
015 *
016 * @since 4.0.1.4
017 */
018public class TDropTenantSqlStatement extends TCustomSqlStatement {
019
020    private TObjectName tenantName;
021    private boolean force;
022    private boolean purge;
023
024    public TDropTenantSqlStatement(EDbVendor dbvendor) {
025        super(dbvendor);
026        this.sqlstatementtype = ESqlStatementType.sstoceanbase_drop_tenant;
027    }
028
029    public TObjectName getTenantName() {
030        return tenantName;
031    }
032
033    public boolean isForce() {
034        return force;
035    }
036
037    public boolean isPurge() {
038        return purge;
039    }
040
041    @Override
042    public int doParseStatement(TCustomSqlStatement psql) {
043        if (rootNode == null) return -1;
044        super.doParseStatement(psql);
045        TOceanbaseDropTenantSqlNode node = (TOceanbaseDropTenantSqlNode) rootNode;
046        this.tenantName = node.getTenantName();
047        this.force = node.isForce();
048        this.purge = node.isPurge();
049        return 0;
050    }
051
052    @Override
053    public void accept(TParseTreeVisitor v) {
054        v.preVisit(this);
055        v.postVisit(this);
056    }
057
058    @Override
059    public void acceptChildren(TParseTreeVisitor v) {
060        v.preVisit(this);
061        v.postVisit(this);
062    }
063}