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}