001package gudusoft.gsqlparser.nodes.teradata;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.*;
005
006public class TTDUnpivot extends TParseTreeNode {
007
008    private TFromTable onTableRef;
009    private TConstantList valueColumnsInString;
010    private TConstantList unpivotColumnsInString;
011    private TConstantList columnListInString;
012    private TConstantList columnAliasListInString;
013
014    private TTable unPivotTable;
015
016    private TObjectNameList valueColumns = new TObjectNameList();
017    private TObjectNameList unpivotColumns = new TObjectNameList();
018    private TObjectNameList columnList = new TObjectNameList();
019
020    public TObjectNameList getColumnList() {
021        return columnList;
022    }
023
024    public TObjectNameList getUnpivotColumns() {
025        return unpivotColumns;
026    }
027
028    public TTable getUnPivotTable() {
029        return unPivotTable;
030    }
031
032    public TConstantList getColumnAliasListInString() {
033        return columnAliasListInString;
034    }
035
036    public TConstantList getColumnListInString() {
037        return columnListInString;
038    }
039
040    public TConstantList getUnpivotColumnsInString() {
041        return unpivotColumnsInString;
042    }
043
044    public TConstantList getValueColumnsInString() {
045        return valueColumnsInString;
046    }
047
048    public void doParse(TCustomSqlStatement psql, ESqlClause plocation){
049        unPivotTable = psql.analyzeFromTable(onTableRef,true);
050        TTable refTable = unPivotTable;
051        if (unPivotTable.getTableType() == ETableSource.subquery){
052            refTable = unPivotTable.getSubquery().getTables().getTable(0);
053        }
054        for(int i=0;i<valueColumnsInString.size();i++){
055            TConstant c = valueColumnsInString.getConstant(i);
056            TObjectName nc = TObjectName.createObjectName ( EDbVendor.dbvteradata, EDbObjectType.column,c.getValueToken());
057            valueColumns.addObjectName(nc);
058            refTable.getLinkedColumns().addObjectName(nc);
059            nc.setSourceTable(refTable);
060        }
061        for(int i=0;i<unpivotColumnsInString.size();i++){
062            TConstant c = unpivotColumnsInString.getConstant(i);
063            TObjectName nc = TObjectName.createObjectName (EDbVendor.dbvteradata, EDbObjectType.column,c.getValueToken());
064            unpivotColumns.addObjectName(nc);
065            refTable.getLinkedColumns().addObjectName(nc);
066            nc.setSourceTable(refTable);
067        }
068        for(int i=0;i<columnListInString.size();i++){
069            TConstant c = columnListInString.getConstant(i);
070            TObjectName nc = TObjectName.createObjectName ( EDbVendor.dbvteradata, EDbObjectType.column,c.getValueToken());
071            columnList.addObjectName(nc);
072            refTable.getLinkedColumns().addObjectName(nc);
073            nc.setSourceTable(refTable);
074        }
075    }
076
077    public void init(Object arg1,Object arg2,Object arg3,Object arg4){
078        onTableRef = (TFromTable)arg1;
079        valueColumnsInString = (TConstantList)arg2;
080        unpivotColumnsInString = (TConstantList)arg3;
081        columnListInString = (TConstantList)arg4;
082    }
083
084    public void init(Object arg1,Object arg2,Object arg3,Object arg4,Object arg5){
085        init(arg1,arg2,arg3,arg4);
086        columnAliasListInString = (TConstantList)arg5;
087    }
088
089    public void accept(TParseTreeVisitor v){
090        v.preVisit(this);
091        v.postVisit(this);
092    }
093
094    public void acceptChildren(TParseTreeVisitor v){
095        v.preVisit(this);
096        v.postVisit(this);
097    }
098}