001package gudusoft.gsqlparser.nodes;
002
003import gudusoft.gsqlparser.ESqlClause;
004import gudusoft.gsqlparser.stmt.TSelectSqlStatement;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006
007/**
008* Represents a row in value clause of insert statement, or a row in values clause.
009*/
010public class TMultiTarget extends TParseTreeNode {
011    private TExpression expr;
012
013    public TExpression getExpr() {
014        return expr;
015    }
016
017    private TSelectSqlNode subQueryNode = null;
018    private TSelectSqlStatement subQuery = null;
019
020    /**
021     * this value list was represented by a {@link TResultColumnList}
022     * @return
023     */
024    public TResultColumnList getColumnList() {
025        return columnList;
026    }
027
028
029    /**
030     * this value list was generated from query.
031     * @return
032     */
033    public TSelectSqlStatement getSubQuery() {
034        return subQuery;
035    }
036
037    private TResultColumnList columnList = null;
038
039    public void setSubQuery(TSelectSqlStatement subQuery) {
040        this.subQuery = subQuery;
041    }
042
043    public void setColumnList(TResultColumnList columnList) {
044        this.columnList = columnList;
045    }
046
047    public void init(Object arg1)
048    {
049       if (arg1 instanceof TSelectSqlNode){
050
051           subQueryNode = (TSelectSqlNode)arg1;
052       } else if (arg1 instanceof TResultColumnList){
053           columnList = (TResultColumnList)arg1;
054       } else if (arg1 instanceof TExpression){
055           expr = (TExpression)arg1;
056       }
057    }
058
059    public void doParse(TCustomSqlStatement psql, ESqlClause plocation){
060        if (subQueryNode != null){
061            if (subQuery == null){
062                subQuery = new TSelectSqlStatement(psql.dbvendor);
063                subQuery.rootNode = subQueryNode;
064            }
065            subQuery.doParseStatement(psql);
066       }else if (columnList != null){
067           columnList.doParse(psql,plocation);
068        }else if (expr != null){
069            expr.doParse(psql,plocation);
070        }
071    }
072
073    public void accept(TParseTreeVisitor v){
074        v.preVisit(this);
075        v.postVisit(this);
076    }
077
078    public void acceptChildren(TParseTreeVisitor v){
079        v.preVisit(this);
080        if (subQuery != null) subQuery.acceptChildren(v);
081        if (columnList != null) columnList.acceptChildren(v);
082        if (expr != null) expr.acceptChildren(v);
083        v.postVisit(this);
084    }
085
086
087}