001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.nodes.oracle.TListSubpartitionDesc;
004import gudusoft.gsqlparser.nodes.oracle.TRangeSubpartitionDesc;
005
006import java.util.ArrayList;
007
008/**
009 * #TODO Need to be merged into {@link TPartitionDefinition}
010 *
011 *
012 */
013public class TTablePartitionItem extends TParseTreeNode {
014    public enum ETablePartitionItemType { range, hashIndividal,hashByQuantity,list};
015
016    private ArrayList<TRangeSubpartitionDesc> rangeSubpartitionDescs;
017    private ArrayList<TListSubpartitionDesc> listSubpartitionDescs;
018
019    public void setRangeSubpartitionDescs(ArrayList<TRangeSubpartitionDesc> rangeSubpartitionDescs) {
020        this.rangeSubpartitionDescs = rangeSubpartitionDescs;
021    }
022
023    public void setListSubpartitionDescs(ArrayList<TListSubpartitionDesc> listSubpartitionDescs) {
024        this.listSubpartitionDescs = listSubpartitionDescs;
025    }
026
027    public ArrayList<TRangeSubpartitionDesc> getRangeSubpartitionDescs() {
028        return rangeSubpartitionDescs;
029    }
030
031    public ArrayList<TListSubpartitionDesc> getListSubpartitionDescs() {
032        return listSubpartitionDescs;
033    }
034
035    private TExpression hashPartitionQuantity;
036
037    public TExpression getHashPartitionQuantity() {
038        return hashPartitionQuantity;
039    }
040
041
042    private ETablePartitionItemType tablePartitionItemType ;
043
044    public ETablePartitionItemType getTablePartitionItemType() {
045        return tablePartitionItemType;
046    }
047
048    private TObjectName partitionName;
049    private TRangeValuesClause rangeValuesClause;
050    private TListValuesClause listValuesClause;
051
052    public TListValuesClause getListValuesClause() {
053        return listValuesClause;
054    }
055
056    public TObjectName getPartitionName() {
057        return partitionName;
058    }
059
060    public void init(Object arg1){
061        tablePartitionItemType = (ETablePartitionItemType)arg1;
062    }
063
064    public void init(Object arg1, Object arg2){
065        init(arg1);
066
067        switch (tablePartitionItemType){
068            case hashByQuantity:
069                this.hashPartitionQuantity = (TExpression)arg2;
070                break;
071        }
072    }
073
074    private TObjectNameList storeInTablespaceList;
075
076    public TObjectNameList getStoreInTablespaceList() {
077        return storeInTablespaceList;
078    }
079
080    public void init(Object arg1, Object arg2, Object arg3){
081        init(arg1);
082
083        switch (tablePartitionItemType){
084            case range:
085                if (arg2 != null){
086                    this.partitionName = (TObjectName)arg2;
087                }
088                this.rangeValuesClause = (TRangeValuesClause)arg3;
089                break;
090            case hashByQuantity:
091                this.hashPartitionQuantity = (TExpression)arg2;
092                TDummyList options = (TDummyList)arg3;
093                for(int i=0;i<options.size();i++){
094                    TDummy dummy = options.getDummyItem(i);
095                    if (dummy.int1 == 1){
096                        // store in ( tablespace list)
097                        storeInTablespaceList =  ((TDummy)(dummy.node1)).objectNameList;
098                    }
099                }
100                break;
101            case list:
102                if (arg2 != null){
103                    this.partitionName = (TObjectName)arg2;
104                }
105                this.listValuesClause = (TListValuesClause)arg3;
106                break;
107
108        }
109    }
110
111    public TRangeValuesClause getRangeValuesClause() {
112        return rangeValuesClause;
113    }
114
115    public void accept(TParseTreeVisitor v){
116        v.preVisit(this);
117        v.postVisit(this);
118    }
119
120    public void acceptChildren(TParseTreeVisitor v){
121        v.preVisit(this);
122        v.postVisit(this);
123    }
124
125}