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 * SUBMIT TASK statement for StarRocks. 011 * 012 * Syntax: 013 * SUBMIT TASK [task_name] 014 * [SCHEDULE [START(<schedule_start>)] EVERY(INTERVAL <schedule_interval>)] 015 * [PROPERTIES ("key" = "value"[, ...])] 016 * AS <etl_statement> 017 * 018 * Supported ETL statements: 019 * - CREATE TABLE AS SELECT (from v3.0) 020 * - INSERT (from v3.0) 021 * - CACHE SELECT (from v3.3) 022 */ 023public class TSubmitTaskStmt extends TCustomSqlStatement { 024 025 // Task identification (optional) 026 private TObjectName taskName; 027 028 // Schedule options 029 private boolean hasSchedule; 030 private String scheduleStart; 031 private String scheduleInterval; 032 033 // Properties (PROPERTIES clause) 034 private TPTNodeList<TFlinkTableProperty> taskProperties; 035 036 // Inner ETL statement 037 private TCustomSqlStatement innerStatement; 038 039 public TSubmitTaskStmt(EDbVendor dbvendor) { 040 super(dbvendor); 041 sqlstatementtype = ESqlStatementType.sststarrocksSubmitTask; 042 } 043 044 // Getters 045 public TObjectName getTaskName() { 046 return taskName; 047 } 048 049 public boolean hasSchedule() { 050 return hasSchedule; 051 } 052 053 public String getScheduleStart() { 054 return scheduleStart; 055 } 056 057 public String getScheduleInterval() { 058 return scheduleInterval; 059 } 060 061 public TPTNodeList<TFlinkTableProperty> getTaskProperties() { 062 return taskProperties; 063 } 064 065 public TCustomSqlStatement getInnerStatement() { 066 return innerStatement; 067 } 068 069 @Override 070 public int doParseStatement(TCustomSqlStatement psql) { 071 if (rootNode == null) return -1; 072 super.doParseStatement(psql); 073 074 TSubmitTaskSqlNode node = (TSubmitTaskSqlNode) rootNode; 075 076 this.taskName = node.getTaskName(); 077 this.hasSchedule = node.hasSchedule(); 078 079 if (node.getScheduleStart() != null) { 080 this.scheduleStart = node.getScheduleStart().toString(); 081 } 082 083 if (node.getScheduleInterval() != null) { 084 this.scheduleInterval = node.getScheduleInterval().toString(); 085 } 086 087 this.taskProperties = node.getTaskProperties(); 088 089 // Parse the inner statement 090 if (node.getInnerStatement() != null) { 091 TParseTreeNode innerNode = node.getInnerStatement(); 092 // The inner statement will be parsed separately by the parser 093 // We store the reference to the parsed statement 094 if (innerNode instanceof TCustomSqlStatement) { 095 this.innerStatement = (TCustomSqlStatement) innerNode; 096 } 097 } 098 099 return 0; 100 } 101 102 @Override 103 public void accept(TParseTreeVisitor v) { 104 v.preVisit(this); 105 v.postVisit(this); 106 } 107 108 @Override 109 public void acceptChildren(TParseTreeVisitor v) { 110 v.preVisit(this); 111 if (innerStatement != null) { 112 innerStatement.acceptChildren(v); 113 } 114 v.postVisit(this); 115 } 116}