001package gudusoft.gsqlparser.nodes.oceanbase;
002
003import gudusoft.gsqlparser.EDbObjectType;
004import gudusoft.gsqlparser.nodes.TObjectName;
005import gudusoft.gsqlparser.nodes.TObjectNameList;
006import gudusoft.gsqlparser.nodes.TParseTreeNode;
007import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
008import gudusoft.gsqlparser.nodes.TPartitionDefinition;
009
010import java.util.ArrayList;
011
012/**
013 * AST node for OceanBase {@code ALTER TABLEGROUP} (Phase 4 Batch 6).
014 *
015 * <p>Grammar shapes:
016 * <ul>
017 *   <li>{@code ALTER TABLEGROUP name SET option_list}</li>
018 *   <li>{@code ALTER TABLEGROUP name ADD TABLE table_list}</li>
019 *   <li>{@code ALTER TABLEGROUP name ADD PARTITION (def, ...)}</li>
020 *   <li>{@code ALTER TABLEGROUP name DROP PARTITION name_list}</li>
021 *   <li>{@code ALTER TABLEGROUP name TRUNCATE PARTITION name_list}</li>
022 * </ul>
023 *
024 * @since 4.0.1.4
025 */
026public class TOceanbaseAlterTablegroupSqlNode extends TParseTreeNode {
027
028    public enum EAction {
029        SET_OPTIONS,
030        ADD_TABLE,
031        ADD_PARTITION,
032        DROP_PARTITION,
033        TRUNCATE_PARTITION
034    }
035
036    private EAction action = EAction.SET_OPTIONS;
037    private TObjectName tablegroupName;
038    private ArrayList<TOceanbaseTablegroupOption> tablegroupOptions
039            = new ArrayList<TOceanbaseTablegroupOption>();
040    private TObjectNameList addTableList;
041    private ArrayList<TPartitionDefinition> addPartitionDefinitions;
042    private TObjectNameList partitionNameList;
043
044    public EAction getAction() {
045        return action;
046    }
047
048    public void setAction(EAction action) {
049        this.action = action;
050    }
051
052    public TObjectName getTablegroupName() {
053        return tablegroupName;
054    }
055
056    public void setTablegroupName(TObjectName tablegroupName) {
057        this.tablegroupName = tablegroupName;
058        if (tablegroupName != null) {
059            tablegroupName.setDbObjectType(EDbObjectType.database);
060        }
061    }
062
063    public ArrayList<TOceanbaseTablegroupOption> getTablegroupOptions() {
064        return tablegroupOptions;
065    }
066
067    public void addTablegroupOption(TOceanbaseTablegroupOption option) {
068        if (option != null) {
069            this.tablegroupOptions.add(option);
070        }
071    }
072
073    public TObjectNameList getAddTableList() {
074        return addTableList;
075    }
076
077    public void setAddTableList(TObjectNameList addTableList) {
078        this.addTableList = addTableList;
079    }
080
081    public ArrayList<TPartitionDefinition> getAddPartitionDefinitions() {
082        return addPartitionDefinitions;
083    }
084
085    public void setAddPartitionDefinitions(ArrayList<TPartitionDefinition> addPartitionDefinitions) {
086        this.addPartitionDefinitions = addPartitionDefinitions;
087    }
088
089    public TObjectNameList getPartitionNameList() {
090        return partitionNameList;
091    }
092
093    public void setPartitionNameList(TObjectNameList partitionNameList) {
094        this.partitionNameList = partitionNameList;
095    }
096
097    @Override
098    public void init(Object arg1) {
099        setTablegroupName((TObjectName) arg1);
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 (tablegroupName != null) {
112            tablegroupName.acceptChildren(v);
113        }
114        for (TOceanbaseTablegroupOption opt : tablegroupOptions) {
115            if (opt != null) opt.acceptChildren(v);
116        }
117        if (addTableList != null) {
118            addTableList.acceptChildren(v);
119        }
120        if (addPartitionDefinitions != null) {
121            for (TPartitionDefinition def : addPartitionDefinitions) {
122                if (def != null) def.acceptChildren(v);
123            }
124        }
125        if (partitionNameList != null) {
126            partitionNameList.acceptChildren(v);
127        }
128        v.postVisit(this);
129    }
130}