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 SNAPSHOT statement for StarRocks.
010 *
011 * Syntax:
012 * SHOW SNAPSHOT ON <repo_name>
013 * [WHERE SNAPSHOT = <snapshot_name> [AND TIMESTAMP = <backup_timestamp>]]
014 *
015 * Views data snapshots in a specified repository.
016 */
017public class TStarrocksShowSnapshotStmt extends TCustomSqlStatement {
018
019    // ON clause - repository name (required)
020    private TObjectName repositoryName;
021
022    // Full WHERE clause expression
023    private TExpression whereCondition;
024
025    public TStarrocksShowSnapshotStmt(EDbVendor dbvendor) {
026        super(dbvendor);
027        sqlstatementtype = ESqlStatementType.sststarrocksShowSnapshot;
028    }
029
030    // Getters
031    public TObjectName getRepositoryName() {
032        return repositoryName;
033    }
034
035    public TExpression getWhereCondition() {
036        return whereCondition;
037    }
038
039    @Override
040    public int doParseStatement(TCustomSqlStatement psql) {
041        if (rootNode == null) return -1;
042        super.doParseStatement(psql);
043
044        TShowSnapshotSqlNode node = (TShowSnapshotSqlNode) rootNode;
045
046        this.repositoryName = node.getRepositoryName();
047        this.whereCondition = node.getWhereCondition();
048
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}