001package gudusoft.gsqlparser.nodes.functions;
002
003
004import gudusoft.gsqlparser.EFunctionType;
005import gudusoft.gsqlparser.ESqlClause;
006import gudusoft.gsqlparser.TCustomSqlStatement;
007import gudusoft.gsqlparser.nodes.TDummy;
008import gudusoft.gsqlparser.nodes.TExpression;
009import gudusoft.gsqlparser.nodes.TFunctionCall;
010import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
011import gudusoft.gsqlparser.nodes.teradata.TRangeNFunctionItem;
012
013import java.util.ArrayList;
014
015
016public class TRangeNFunction extends TFunctionCall {
017
018    public enum ERangeSpec {no_range, no_range_or_unknown, no_range_comma_unknown,unknown, not_specified};
019
020    private ERangeSpec rangeSpec = ERangeSpec.not_specified;
021
022    public ERangeSpec getRangeSpec() {
023        return rangeSpec;
024    }
025
026    public void setRangeSpecByDummy(TDummy node){
027        switch (node.int1){
028            case 1:
029                rangeSpec = ERangeSpec.no_range;
030                break;
031            case 2:
032                rangeSpec = ERangeSpec.no_range_or_unknown;
033                break;
034            case 3:
035                rangeSpec = ERangeSpec.no_range_comma_unknown;
036                break;
037            case 4:
038                rangeSpec = ERangeSpec.unknown;
039                break;
040        }
041    }
042
043    private TExpression betweenExpr = null;//teradata range_n
044    private TExpression rangeSize = null; //teradata range_n
045
046
047    private ArrayList<TRangeNFunctionItem> rangeNFunctionItems;
048
049    public ArrayList<TRangeNFunctionItem> getRangeNFunctionItems() {
050        return rangeNFunctionItems;
051    }
052    public void doParse(TCustomSqlStatement psql, ESqlClause plocation){
053        this.getExpr1().doParse(psql,plocation);
054        for(TRangeNFunctionItem rangeItem : rangeNFunctionItems){
055            rangeItem.doParse(psql,plocation);
056        }
057    }
058
059    public void init(Object arg1,Object arg2){
060        this.setFunctionType(EFunctionType.range_n_t);
061        this.setExpr1((TExpression) arg1);
062        this.rangeNFunctionItems = (ArrayList<TRangeNFunctionItem>)arg2;
063    }
064
065    public void accept(TParseTreeVisitor v){
066        v.preVisit(this);
067        v.postVisit(this);
068    }
069
070    public void acceptChildren(TParseTreeVisitor v){
071        v.preVisit(this);
072        this.getExpr1().acceptChildren(v);
073        for(TRangeNFunctionItem item:rangeNFunctionItems){
074            item.acceptChildren(v);
075        }
076        v.postVisit(this);
077    }
078}