001package gudusoft.gsqlparser.stmt.postgresql;
002/*
003 * Date: 13-12-3
004 */
005
006import gudusoft.gsqlparser.EDbVendor;
007import gudusoft.gsqlparser.ESqlClause;
008import gudusoft.gsqlparser.ESqlStatementType;
009import gudusoft.gsqlparser.TCustomSqlStatement;
010import gudusoft.gsqlparser.nodes.*;
011import gudusoft.gsqlparser.stmt.TBlockSqlStatement;
012
013
014public class TForEachStmt extends TBlockSqlStatement {
015
016    public TForEachStmt(){
017        this(EDbVendor.dbvpostgresql);
018    }
019
020    private TObjectNameList scalarVariables;
021
022    public TObjectNameList getScalarVariables() {
023        return scalarVariables;
024    }
025
026    private TObjectName variableName;
027    private TStatementListSqlNode stmts = null;
028    private TExpression arrayExpr;
029    private TConstant sliceValue;
030
031    public void setSliceValue(TConstant sliceValue) {
032        this.sliceValue = sliceValue;
033    }
034
035    public TConstant getSliceValue() {
036
037        return sliceValue;
038    }
039
040    public void setArrayExpr(TExpression arrayExpr) {
041        this.arrayExpr = arrayExpr;
042    }
043
044    public TExpression getArrayExpr() {
045
046        return arrayExpr;
047    }
048
049    public TForEachStmt(EDbVendor dbvendor) {
050        super(dbvendor);
051        sqlstatementtype = ESqlStatementType.sstpostgresqlforeach;
052    }
053
054    public int doParseStatement(TCustomSqlStatement psql) {
055     // if this stmt created directly in .y file, then no rootNode is available
056     // if this stmt created in tlzcmds, then rootNode must exists.
057
058     //   if (rootNode == null) return -1;
059
060        super.doParseStatement(psql);
061
062        stmts.doParse(this, ESqlClause.unknown);
063        for(int i=0;i<stmts.size();i++){
064            this.getBodyStatements().add(stmts.getStatementSqlNode(i).getStmt());
065        }
066
067        return 0;
068    }
069
070    public TStatementListSqlNode getStmts() {
071        return stmts;
072    }
073
074    public TObjectName getVariableName() {
075        return variableName;
076    }
077
078    public void init(Object arg1,Object arg2){
079        stmts = (TStatementListSqlNode)arg1;
080        if (arg2 instanceof TObjectNameList){
081            this.scalarVariables = (TObjectNameList) arg2;
082            this.variableName = this.scalarVariables.getObjectName(0);
083        }else {
084            variableName = (TObjectName)arg2;
085        }
086
087
088    }
089
090    public void accept(TParseTreeVisitor v){
091        v.preVisit(this);
092
093        v.postVisit(this);
094    }
095
096    public void acceptChildren(TParseTreeVisitor v){
097        v.preVisit(this);
098        getBodyStatements().accept(v);
099        v.postVisit(this);
100    }
101
102    public void setVariableName(TObjectName variableName) {
103        this.variableName = variableName;
104    }
105}