001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.nodes.*;
007import gudusoft.gsqlparser.nodes.flink.TFlinkTableProperty;
008
009/**
010 * ALTER STORAGE VOLUME statement for StarRocks.
011 *
012 * Syntax:
013 * ALTER STORAGE VOLUME [ IF EXISTS ] <storage_volume_name>
014 * { COMMENT = '<comment_string>' | SET ("key" = "value"[,...]) }
015 *
016 * This statement modifies an existing storage volume's properties or comment.
017 * TYPE, LOCATIONS, and path-related properties cannot be altered.
018 */
019public class TStarrocksAlterStorageVolumeStmt extends TCustomSqlStatement {
020
021    // Storage volume name
022    private TObjectName volumeName;
023
024    // IF EXISTS flag
025    private boolean ifExists;
026
027    // Action type
028    private TAlterStorageVolumeSqlNode.EAlterStorageVolumeAction actionType;
029
030    // New comment (for COMMENT action)
031    private String comment;
032
033    // Properties to set (for SET action)
034    private TPTNodeList<TFlinkTableProperty> properties;
035
036    public TStarrocksAlterStorageVolumeStmt(EDbVendor dbvendor) {
037        super(dbvendor);
038        sqlstatementtype = ESqlStatementType.sststarrocksAlterStorageVolume;
039    }
040
041    // Getters
042    public TObjectName getVolumeName() {
043        return volumeName;
044    }
045
046    public boolean isIfExists() {
047        return ifExists;
048    }
049
050    public TAlterStorageVolumeSqlNode.EAlterStorageVolumeAction getActionType() {
051        return actionType;
052    }
053
054    public String getComment() {
055        return comment;
056    }
057
058    public TPTNodeList<TFlinkTableProperty> getProperties() {
059        return properties;
060    }
061
062    @Override
063    public int doParseStatement(TCustomSqlStatement psql) {
064        if (rootNode == null) return -1;
065        super.doParseStatement(psql);
066
067        TAlterStorageVolumeSqlNode node = (TAlterStorageVolumeSqlNode) rootNode;
068
069        this.volumeName = node.getVolumeName();
070        this.ifExists = node.isIfExists();
071        this.actionType = node.getActionType();
072
073        if (node.getComment() != null) {
074            this.comment = node.getComment().toString();
075        }
076
077        this.properties = node.getProperties();
078
079        return 0;
080    }
081
082    @Override
083    public void accept(TParseTreeVisitor v) {
084        v.preVisit(this);
085        v.postVisit(this);
086    }
087
088    @Override
089    public void acceptChildren(TParseTreeVisitor v) {
090        v.preVisit(this);
091        v.postVisit(this);
092    }
093}