001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.nodes.*;
007
008/**
009 * SHOW BACKUP and SHOW RESTORE statements for StarRocks.
010 *
011 * Syntax:
012 * SHOW BACKUP [FROM <db_name>]
013 * SHOW RESTORE [FROM <db_name>]
014 *
015 * This statement views the last BACKUP/RESTORE task in a specified database.
016 * Only the information of the last BACKUP/RESTORE task is saved in StarRocks.
017 */
018public class TStarrocksShowBackupRestoreStmt extends TCustomSqlStatement {
019
020    /**
021     * Type of show statement - BACKUP or RESTORE
022     */
023    public enum ShowType {
024        BACKUP,
025        RESTORE
026    }
027
028    // Type of show statement
029    private ShowType showType;
030
031    // FROM clause - optional database name
032    private TObjectName databaseName;
033
034    public TStarrocksShowBackupRestoreStmt(EDbVendor dbvendor) {
035        super(dbvendor);
036        // Will be set based on showType during parsing
037        sqlstatementtype = ESqlStatementType.sststarrocksShowBackup;
038    }
039
040    // Getters
041    public ShowType getShowType() {
042        return showType;
043    }
044
045    public TObjectName getDatabaseName() {
046        return databaseName;
047    }
048
049    @Override
050    public int doParseStatement(TCustomSqlStatement psql) {
051        if (rootNode == null) return -1;
052        super.doParseStatement(psql);
053
054        TShowBackupRestoreSqlNode node = (TShowBackupRestoreSqlNode) rootNode;
055
056        TShowBackupRestoreSqlNode.ShowType nodeShowType = node.getShowType();
057        if (nodeShowType == TShowBackupRestoreSqlNode.ShowType.BACKUP) {
058            this.showType = ShowType.BACKUP;
059            this.sqlstatementtype = ESqlStatementType.sststarrocksShowBackup;
060        } else {
061            this.showType = ShowType.RESTORE;
062            this.sqlstatementtype = ESqlStatementType.sststarrocksShowRestore;
063        }
064
065        this.databaseName = node.getDatabaseName();
066
067        return 0;
068    }
069
070    @Override
071    public void accept(TParseTreeVisitor v) {
072        v.preVisit(this);
073        v.postVisit(this);
074    }
075
076    @Override
077    public void acceptChildren(TParseTreeVisitor v) {
078        v.preVisit(this);
079        v.postVisit(this);
080    }
081}