001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.nodes.*;
007
008/**
009 * DROP STORAGE VOLUME statement for StarRocks.
010 *
011 * Syntax:
012 * DROP STORAGE VOLUME [ IF EXISTS ] <storage_volume_name>
013 *
014 * This statement drops a storage volume from the cluster.
015 * The default storage volume and builtin_storage_volume cannot be dropped.
016 * Storage volumes referenced by databases or tables cannot be dropped.
017 */
018public class TStarrocksDropStorageVolumeStmt extends TCustomSqlStatement {
019
020    // Storage volume name
021    private TObjectName volumeName;
022
023    // IF EXISTS flag
024    private boolean ifExists;
025
026    public TStarrocksDropStorageVolumeStmt(EDbVendor dbvendor) {
027        super(dbvendor);
028        sqlstatementtype = ESqlStatementType.sststarrocksDropStorageVolume;
029    }
030
031    // Getters
032    public TObjectName getVolumeName() {
033        return volumeName;
034    }
035
036    public boolean isIfExists() {
037        return ifExists;
038    }
039
040    @Override
041    public int doParseStatement(TCustomSqlStatement psql) {
042        if (rootNode == null) return -1;
043        super.doParseStatement(psql);
044
045        TDropStorageVolumeSqlNode node = (TDropStorageVolumeSqlNode) rootNode;
046
047        this.volumeName = node.getVolumeName();
048        this.ifExists = node.isIfExists();
049
050        return 0;
051    }
052
053    @Override
054    public void accept(TParseTreeVisitor v) {
055        v.preVisit(this);
056        v.postVisit(this);
057    }
058
059    @Override
060    public void acceptChildren(TParseTreeVisitor v) {
061        v.preVisit(this);
062        v.postVisit(this);
063    }
064}