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 * BEGIN LOAD TRANSACTION statement for StarRocks.
011 *
012 * Syntax:
013 * BEGIN LOAD TRANSACTION [FOR db.table] [WITH LABEL label_name] [PROPERTIES ('key'='value', ...)]
014 *
015 * Used for transactional bulk data loading with two-phase commit support.
016 */
017public class TBeginLoadTransactionStmt extends TCustomSqlStatement {
018
019    // Target table specification (optional: FOR db.table)
020    private TObjectName loadTargetTable;
021
022    // Transaction label (optional: WITH LABEL label_name)
023    private TObjectName labelName;
024
025    // Properties (PROPERTIES clause)
026    private TPTNodeList<TFlinkTableProperty> loadProperties;
027
028    public TBeginLoadTransactionStmt(EDbVendor dbvendor) {
029        super(dbvendor);
030        sqlstatementtype = ESqlStatementType.sststarrocksBeginLoadTransaction;
031    }
032
033    // Getters
034    public TObjectName getLoadTargetTable() {
035        return loadTargetTable;
036    }
037
038    public TObjectName getLabelName() {
039        return labelName;
040    }
041
042    public TPTNodeList<TFlinkTableProperty> getLoadProperties() {
043        return loadProperties;
044    }
045
046    @Override
047    public int doParseStatement(TCustomSqlStatement psql) {
048        if (rootNode == null) return -1;
049        super.doParseStatement(psql);
050
051        TBeginLoadTransactionSqlNode node = (TBeginLoadTransactionSqlNode) rootNode;
052
053        this.loadTargetTable = node.getTargetTable();
054        this.labelName = node.getLabelName();
055        this.loadProperties = node.getLoadProperties();
056
057        return 0;
058    }
059
060    @Override
061    public void accept(TParseTreeVisitor v) {
062        v.preVisit(this);
063        v.postVisit(this);
064    }
065
066    @Override
067    public void acceptChildren(TParseTreeVisitor v) {
068        v.preVisit(this);
069        v.postVisit(this);
070    }
071}