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}