001package gudusoft.gsqlparser.nodes;
002
003
004import gudusoft.gsqlparser.ESqlClause;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006
007/**
008 * update clause in merge statement.
009 * <pre>
010 *     [when matched [and search_conditions ] then update set {col_name = expression} | delete]
011 * </pre>
012 *
013 * <p> call {@link #getUpdateColumnList()} to return value for {col_name = expression}
014 *
015 * @see TMergeWhenClause
016 */
017public class TMergeUpdateClause extends TMergeActionClause {
018
019    private TResultColumnList   updateColumnList;
020    private TExpression updateWhereClause;
021    private TExpression deleteWhereClause;
022
023    public TResultColumnList getUpdateColumnList() {
024        return updateColumnList;
025    }
026
027    public TExpression getUpdateWhereClause() {
028        return updateWhereClause;
029    }
030
031    public TExpression getDeleteWhereClause() {
032        return deleteWhereClause;
033    }
034
035    public void init(Object arg1){
036        this.mergeActionType = EMergeActionType.update;
037        this.updateColumnList = (TResultColumnList)arg1;
038    }
039
040    public void init(Object arg1,Object arg2){
041        init(arg1);
042        this.updateWhereClause = (TExpression)arg2;
043    }
044
045    public void init(Object arg1,Object arg2,Object arg3){
046        init(arg1);
047        if (arg2 != null){
048            this.updateWhereClause = (TExpression)arg2;
049        }
050        if (arg3 != null){
051            this.deleteWhereClause = (TExpression)arg3;
052        }
053    }
054
055    public void doParse(TCustomSqlStatement psql, ESqlClause plocation){
056        if (updateColumnList != null){
057            updateColumnList.doParse(psql,ESqlClause.set);
058        }
059
060        if (this.updateWhereClause != null){
061            this.updateWhereClause.doParse(psql,ESqlClause.where);
062        }
063
064        if (this.deleteWhereClause != null){
065            this.deleteWhereClause.doParse(psql,ESqlClause.unknown);
066        }
067
068    }
069
070    public void setUnSetTerms(TResultColumnList unSetTerms) {
071        this.unSetTerms = unSetTerms;
072    }
073
074    public void accept(TParseTreeVisitor v){
075        v.preVisit(this);
076        v.postVisit(this);
077
078    }
079
080    public void acceptChildren(TParseTreeVisitor v){
081        v.preVisit(this);
082        if (updateColumnList != null){
083            updateColumnList.acceptChildren(v);
084        }
085
086        if (this.updateWhereClause != null){
087            this.updateWhereClause.acceptChildren(v);
088        }
089
090        if (this.deleteWhereClause != null){
091            this.deleteWhereClause.acceptChildren(v);
092        }
093        v.postVisit(this);
094    }
095
096    public void setUpdateColumnList(TResultColumnList updateColumnList) {
097        this.updateColumnList = updateColumnList;
098    }
099
100    public void setUpdateWhereClause(TExpression updateWhereClause) {
101        this.updateWhereClause = updateWhereClause;
102    }
103
104    public void setDeleteWhereClause(TExpression deleteWhereClause) {
105        this.deleteWhereClause = deleteWhereClause;
106    }
107
108    private TResultColumnList unSetTerms; //couchbase
109
110    public TResultColumnList getUnSetTerms() {
111        return unSetTerms;
112    }
113}