001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.nodes.*;
007
008/**
009 * ABORT LOAD TRANSACTION statement for StarRocks.
010 *
011 * Syntax:
012 * ABORT LOAD TRANSACTION [label_name]
013 * ABORT LOAD TRANSACTION [FOR db_name]
014 *
015 * Aborts the stream load transaction to roll back data changes.
016 * Note: ROLLBACK LOAD TRANSACTION is an alias for ABORT LOAD TRANSACTION.
017 */
018public class TAbortLoadTransactionStmt extends TCustomSqlStatement {
019
020    // Transaction label (optional)
021    private TObjectName labelName;
022
023    // Database name (optional: FOR db_name)
024    private TObjectName databaseName;
025
026    // Whether this was specified using ROLLBACK instead of ABORT
027    private boolean isRollback;
028
029    public TAbortLoadTransactionStmt(EDbVendor dbvendor) {
030        super(dbvendor);
031        sqlstatementtype = ESqlStatementType.sststarrocksAbortLoadTransaction;
032    }
033
034    // Getters
035    public TObjectName getLabelName() {
036        return labelName;
037    }
038
039    public TObjectName getDatabaseName() {
040        return databaseName;
041    }
042
043    public boolean isRollback() {
044        return isRollback;
045    }
046
047    @Override
048    public int doParseStatement(TCustomSqlStatement psql) {
049        if (rootNode == null) return -1;
050        super.doParseStatement(psql);
051
052        TAbortLoadTransactionSqlNode node = (TAbortLoadTransactionSqlNode) rootNode;
053
054        this.labelName = node.getLabelName();
055        this.databaseName = node.getDatabaseName();
056        this.isRollback = node.isRollback();
057
058        return 0;
059    }
060
061    @Override
062    public void accept(TParseTreeVisitor v) {
063        v.preVisit(this);
064        v.postVisit(this);
065    }
066
067    @Override
068    public void acceptChildren(TParseTreeVisitor v) {
069        v.preVisit(this);
070        v.postVisit(this);
071    }
072}