001package gudusoft.gsqlparser.nodes; 002 003import gudusoft.gsqlparser.*; 004 005/* 006* Date: 2010-4-13 007* Time: 17:06:00 008*/ 009public class TOutputClause extends TParseTreeNode { 010 011 private TResultColumnList selectItemList = null; 012 013 public void setSelectItemList2(TResultColumnList selectItemList2) { 014 this.selectItemList2 = selectItemList2; 015 } 016 017 private TResultColumnList selectItemList2 = null; 018 private TObjectName intoTable = null; 019 020 public void setIntoColumnList(TObjectNameList intoColumnList) { 021 this.intoColumnList = intoColumnList; 022 } 023 024 private TObjectNameList intoColumnList = null; 025 026 public void init(Object arg1,Object arg2) 027 { 028 selectItemList = (TResultColumnList)arg1; 029 if (arg2 != null){ 030 intoTable = (TObjectName)arg2; 031 } 032 } 033 034 public TObjectNameList getIntoColumnList() { 035 return intoColumnList; 036 } 037 038 public TObjectName getIntoTable() { 039 return intoTable; 040 } 041 042 public TResultColumnList getSelectItemList2() { 043 return selectItemList2; 044 } 045 046 public TResultColumnList getSelectItemList() { 047 return selectItemList; 048 } 049 050 public void doParse(TCustomSqlStatement psql, ESqlClause plocation){ 051 //selectItemList.doParse(psql, ESqlClause.output); 052 TResultColumn rc=null; 053 for(int i=0;i<selectItemList.size();i++){ 054 rc = selectItemList.getResultColumn(i); 055 if ((rc.toString().toLowerCase().startsWith("deleted")) ||(rc.toString().toLowerCase().startsWith("inserted"))){ 056 if (rc.getFieldAttr() != null){ 057 rc.getFieldAttr().setLocation(ESqlClause.output); 058 psql.tables.getTable(0).getLinkedColumns().addObjectName(rc.getFieldAttr()); 059 rc.getFieldAttr().setSourceTable(psql.tables.getTable(0)); 060 } 061 }else if (rc.toString().equalsIgnoreCase("$action")){ 062 rc.getFieldAttr().setDbObjectType(EDbObjectType.constant); 063 }else { 064 rc.doParse(psql,ESqlClause.output); 065 } 066 } 067 068 if (intoTable != null){ 069 intoTable.setObjectType(TObjectName.ttobjTable); 070 // add this table reference to 071 TTable lcTable = new TTable(); 072 lcTable.setTableName(intoTable); 073 lcTable.setEffectType(ETableEffectType.tetOutput); 074 if (intoColumnList != null){ 075 for(int i=0;i<intoColumnList.size();i++){ 076 lcTable.getObjectNameReferences().addObjectName(intoColumnList.getObjectName(i)); 077 intoColumnList.getObjectName(i).setLocation(ESqlClause.output); 078 lcTable.getLinkedColumns().addObjectName(intoColumnList.getObjectName(i)); 079 intoColumnList.getObjectName(i).setSourceTable(lcTable); 080 } 081 } 082 psql.tables.addTable(lcTable); 083 } 084 085 if (selectItemList2 != null){ 086 087 selectItemList2.doParse(psql, ESqlClause.output); 088 } 089 090 } 091 092 public void accept(TParseTreeVisitor v){ 093 v.preVisit(this); 094 v.postVisit(this); 095 } 096 097 public void acceptChildren(TParseTreeVisitor v){ 098 v.preVisit(this); 099 v.postVisit(this); 100 } 101 102 public void setSelectItemList(TResultColumnList selectItemList) { 103 this.selectItemList = selectItemList; 104 } 105 106 public void setIntoTable(TObjectName intoTable) { 107 this.intoTable = intoTable; 108 } 109}