001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.TSourceToken;
004import gudusoft.gsqlparser.nodes.flink.TFlinkTableProperty;
005
006/**
007 * AST node for StarRocks SUBMIT TASK statement.
008 *
009 * Syntax:
010 * SUBMIT TASK [task_name]
011 *   [SCHEDULE [START(<schedule_start>)] EVERY(INTERVAL <schedule_interval>)]
012 *   [PROPERTIES ("key" = "value"[, ...])]
013 *   AS <etl_statement>
014 *
015 * Supported ETL statements:
016 *   - CREATE TABLE AS SELECT (from v3.0)
017 *   - INSERT (from v3.0)
018 *   - CACHE SELECT (from v3.3)
019 */
020public class TSubmitTaskSqlNode extends TParseTreeNode {
021    // Task identification (optional)
022    private TObjectName taskName;
023
024    // Schedule options
025    private boolean hasSchedule;
026    private TSourceToken scheduleStart;
027    private TParseTreeNode scheduleInterval;
028
029    // Properties (PROPERTIES clause) - raw type to allow parser assignment
030    private TParseTreeNode taskProperties;
031
032    // Inner ETL statement (CREATE TABLE AS SELECT, INSERT, or CACHE SELECT)
033    private TParseTreeNode innerStatement;
034
035    // Getters and setters
036    public TObjectName getTaskName() {
037        return taskName;
038    }
039
040    public void setTaskName(TObjectName taskName) {
041        this.taskName = taskName;
042    }
043
044    public boolean hasSchedule() {
045        return hasSchedule;
046    }
047
048    public void setHasSchedule(boolean hasSchedule) {
049        this.hasSchedule = hasSchedule;
050    }
051
052    public TSourceToken getScheduleStart() {
053        return scheduleStart;
054    }
055
056    public void setScheduleStart(TSourceToken scheduleStart) {
057        this.scheduleStart = scheduleStart;
058    }
059
060    public TParseTreeNode getScheduleInterval() {
061        return scheduleInterval;
062    }
063
064    public void setScheduleInterval(TParseTreeNode scheduleInterval) {
065        this.scheduleInterval = scheduleInterval;
066    }
067
068    @SuppressWarnings("unchecked")
069    public TPTNodeList<TFlinkTableProperty> getTaskProperties() {
070        return (TPTNodeList<TFlinkTableProperty>) taskProperties;
071    }
072
073    public void setTaskProperties(TParseTreeNode taskProperties) {
074        this.taskProperties = taskProperties;
075    }
076
077    public TParseTreeNode getInnerStatement() {
078        return innerStatement;
079    }
080
081    public void setInnerStatement(TParseTreeNode innerStatement) {
082        this.innerStatement = innerStatement;
083    }
084
085    public void init(Object arg1) {
086        // arg1 can be task name (TObjectName) or null
087        if (arg1 instanceof TObjectName) {
088            this.taskName = (TObjectName) arg1;
089        }
090    }
091}