001package gudusoft.gsqlparser.nodes; 002 003 004import gudusoft.gsqlparser.*; 005import gudusoft.gsqlparser.sqlenv.TSQLTable; 006import gudusoft.gsqlparser.stmt.TSelectSqlStatement; 007 008import java.util.ArrayList; 009 010public class TPivotInClause extends TParseTreeNode { 011 private TResultColumnList items; 012 private TSelectSqlNode selectSqlNode; 013 private ArrayList<TExpressionList> valueList; 014 015 public ArrayList<TExpressionList> getValueList() { 016 return valueList; 017 } 018 019 public TSelectSqlStatement getSubQuery() { 020 return subQuery; 021 } 022 023 private TSelectSqlStatement subQuery; 024 025 public void linkColumnToTable(TTable table, TSQLTable sqlTable){ 026 027 if (items != null){ 028 for(TResultColumn resultColumn:items){ 029 if (resultColumn.getExpr().getExpressionType() == EExpressionType.simple_object_name_t){ 030 table.getLinkedColumns().addObjectName(resultColumn.getExpr().getObjectOperand()); 031 resultColumn.getExpr().getObjectOperand().setSourceTable(table); 032 }else if (resultColumn.getExpr().getExpressionType() == EExpressionType.simple_constant_t){ 033 TObjectName newObject= TObjectName.createObjectName (this.dbvendor, EDbObjectType.column, resultColumn.getExpr().getConstantOperand().getValueToken() ); 034 table.getLinkedColumns().addObjectName(newObject); 035 newObject.setSourceTable(table); 036 } 037 } 038 039 if (sqlTable != null){ 040 for(TResultColumn resultColumn:items){ 041 sqlTable.addColumn(resultColumn.getDisplayName()); 042 } 043 } 044 }else if (subQuery != null){ 045 for(TResultColumn resultColumn:subQuery.getResultColumnList()){ 046 TObjectName pivotColumn = TObjectName.createObjectName (this.dbvendor, EDbObjectType.column,new TSourceToken(resultColumn.getDisplayName())); 047 table.getLinkedColumns().addObjectName(pivotColumn); 048 pivotColumn.setSourceTable(table); 049 pivotColumn.setSourceColumn(resultColumn); 050 if (sqlTable != null){ 051 sqlTable.addColumn(pivotColumn.toString()); 052 } 053 } 054 } 055 } 056 057 public TResultColumnList getItems() { 058 return items; 059 } 060 061 public void init(Object arg1){ 062 if (arg1 instanceof TResultColumnList){ 063 items = (TResultColumnList)arg1; 064 }else if (arg1 instanceof TSelectSqlNode){ 065 selectSqlNode = (TSelectSqlNode)arg1; 066 }else{ 067 valueList = (ArrayList<TExpressionList>)arg1; 068 } 069 070 } 071 072 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 073 if (selectSqlNode != null){ 074 subQuery = new TSelectSqlStatement(psql.dbvendor); 075 subQuery.rootNode = selectSqlNode; 076 subQuery.setLocation(ESqlClause.pivot_in); 077 subQuery.doParseStatement(psql); 078 } 079 } 080 081 public void accept(TParseTreeVisitor v){ 082 v.preVisit(this); 083 v.postVisit(this); 084 } 085 086 public void acceptChildren(TParseTreeVisitor v) { 087 v.preVisit(this); 088 if (items != null) items.accept(v); 089 if (subQuery != null) subQuery.accept(v); 090 v.postVisit(this); 091 } 092 093 public void setItems(TResultColumnList items) { 094 this.items = items; 095 } 096 097 public void setSubQuery(TSelectSqlStatement subQuery) { 098 this.subQuery = subQuery; 099 } 100}