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}