001package gudusoft.gsqlparser.nodes; 002 003 004import gudusoft.gsqlparser.*; 005 006import java.util.ArrayList; 007 008public class TPivotedTable extends TParseTreeNode { 009 010 private TPivotClause pivotClause; 011 private TFromTable fromTableSource; 012 //private TAliasClause aliasClause = null; 013 private TTable tableSource; 014 private TPTNodeList <TPivotClause> pivotClauseList; 015 016 public TJoinList getJoins() { 017 return joins; 018 } 019 020 public TPTNodeList<TPivotClause> getPivotClauseList() { 021 return pivotClauseList; 022 } 023 024 private TJoinList joins; 025 026 public void setTableSource(TTable tableSource) { 027 this.tableSource = tableSource; 028 } 029 030 public TPivotClause getPivotClause() { 031 return pivotClause; 032 } 033 034 public TFromTable getFromTableSource() { 035 return fromTableSource; 036 } 037 038// @Override 039// public TAliasClause getAliasClause() { 040// return aliasClause; 041// } 042 043 public void init(Object arg1,Object arg2){ 044 joins = new TJoinList(); 045 pivotClauseList = new TPTNodeList <TPivotClause>() ; 046 fromTableSource = (TFromTable)arg1; 047 pivotClause = (TPivotClause)arg2; 048 pivotClauseList.addElement(pivotClause); 049 } 050 051// public void init(Object arg1,Object arg2,Object arg3){ 052// init(arg1,arg2); 053// aliasClause = (TAliasClause)arg3; 054// } 055 056 public TTable getTableSource() { 057 return tableSource; 058 } 059 060 protected TJoinExpr fromSourceJoin; 061 protected TTable tmpFromSourceTable; 062 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 063 //tableSource = psql.analyzeFromTable(fromTableSource,false); 064 //pivotClauseList.addElement(); 065// if (psql instanceof TPivotedTable){ 066// 067// } 068 TJoin lcJoin = null; 069 TTable lcTable = null; 070 if (fromTableSource.getFromtableType() != ETableSource.join){ 071 lcJoin = new TJoin(); 072 lcTable = psql.analyzeFromTable(fromTableSource, true); 073 tableSource = lcTable; 074 lcTable.setEffectType(ETableEffectType.tetSelect); 075 lcJoin.setTable(lcTable); 076 lcJoin.setStartToken(lcJoin.getTable().getStartToken()); 077 lcJoin.setEndToken(lcJoin.getTable().getEndToken()); 078 lcJoin.setGsqlparser(getGsqlparser()); 079 this.getRelations().add(lcTable); 080 // System.out.println("add table to reations:"+this.getRelations().get(0).toString()); 081 }else{ 082 083 this.fromSourceJoin = fromTableSource.getJoinExpr(); 084 085 this.tmpFromSourceTable = new TTable(); 086 this.tmpFromSourceTable.setTableType(ETableSource.join); 087 this.tmpFromSourceTable.setAliasClause(fromTableSource.getJoinExpr().getAliasClause()); 088 this.tmpFromSourceTable.setStartToken(fromTableSource.getStartToken()); 089 this.tmpFromSourceTable.setEndToken(fromTableSource.getEndToken()); 090 this.tmpFromSourceTable.setGsqlparser(fromTableSource.getGsqlparser()); 091 this.tmpFromSourceTable.setJoinExpr(this.fromSourceJoin); 092 this.getRelations().add(this.tmpFromSourceTable); 093 094 lcJoin = psql.analyzeJoin(fromTableSource.getJoinExpr(), null, true); 095 lcJoin.doParse(psql, ESqlClause.join); 096 } 097 098 joins.addJoin(lcJoin); 099 100// for (int i=0;i<pivotClauseList.size();i++){ 101// TPivotClause pivotClause = pivotClauseList.getElement(i); 102// if (pivotClause.getPivotTable() != null){ 103// pivotClause.getPivotTable().setSourceTableOfPivot(psql.getTables().getTable(0)); 104// } 105// } 106 pivotClauseList.doParse(psql,plocation); 107 108 109// if (aliasClause != null){ 110// aliasClause.doParse(psql,plocation); 111// } 112 } 113 114 public void accept(TParseTreeVisitor v){ 115 v.preVisit(this); 116 v.postVisit(this); 117 } 118 private ArrayList<TTable> relations = new ArrayList<>(); 119 120 public ArrayList<TTable> getRelations() { 121 return relations; 122 } 123 124 public void acceptChildren(TParseTreeVisitor v){ 125 v.preVisit(this); 126 127 if (TBaseType.USE_JOINEXPR_INSTEAD_OF_JOIN){ 128 for(TTable table:getRelations()){ 129 table.acceptChildren(v); 130 } 131 }else { 132 joins.acceptChildren(v); 133 } 134 135 pivotClauseList.acceptChildren(v); 136 v.postVisit(this); 137 } 138 139 public void setPivotClause(TPivotClause pivotClause) { 140 this.pivotClause = pivotClause; 141 } 142 143 public void setFromTableSource(TFromTable fromTableSource) { 144 this.fromTableSource = fromTableSource; 145 } 146 147 public void setPivotClauseList(TPTNodeList<TPivotClause> pivotClauseList) { 148 this.pivotClauseList = pivotClauseList; 149 } 150 151 public void setJoins(TJoinList joins) { 152 this.joins = joins; 153 } 154}