public override void VisitOnThen(IfStmt ifStmt, int ifThenIndex, int offset) { if (_topIfStmt != ifStmt) { return; } // 条件式とSQL文をリストに格納する _conditions.Add(this.ConcatConditions(_conditionStack)); _stmtsList.Add(this.RemoveNullStmt(ifStmt.StatementsList[ifThenIndex])); }
public override void VisitAfter(IfStmt ifStmt) { for (int i = 0; i < ifStmt.Conditions.Count; ++i) { if (IsPlaceHolderPredicate(ifStmt.Conditions[i])) { ifStmt.SetBranch(i , Place((PlaceHolderPredicate)ifStmt.Conditions[i]) , ifStmt.StatementsList[i]); } } }
public override void VisitBefore(IfStmt ifStmt) { // 最上位階層のIF文のみを解析対象にする if (_topIfStmt == null) { _topIfStmt = ifStmt; } else if (_topIfStmt != ifStmt) { return; } _conditionStack.Push(ifStmt.Conditions[0]); }
public override void VisitAfter(IfStmt ifStmt) { if (_topIfStmt != ifStmt) { return; } // IF部分の条件式をPOPする _conditionStack.Pop(); // ELSIF部分の条件式をPOPする for (int i = 0; i < ifStmt.CountElsIfStatements; ++i) { _conditionStack.Pop(); } }
public override void VisitOnElsIf(IfStmt ifStmt, int ifThenIndex, int offset) { if (_topIfStmt != ifStmt) { return; } // ELSE(ELSIF)において、スタックの1番上の式を否定し、これをスタックに戻す var lastCondition = _conditionStack.Pop(); var lastNotCondition = new NotPredicate(this.EncloseIfNecessary(lastCondition)); _conditionStack.Push(lastNotCondition); // IFにおいて条件式をスタックにPUSHする _conditionStack.Push(this.EncloseIfNecessary(ifStmt.Conditions[ifThenIndex])); }
public override void VisitOnElse(IfStmt ifStmt, int offset) { if (_topIfStmt != ifStmt) { return; } // ELSE(ELSIF)において、スタックの1番上の式を否定し、これをスタックに戻す var lastCondition = _conditionStack.Pop(); var lastNotCondition = new NotPredicate(this.EncloseIfNecessary(lastCondition)); _conditionStack.Push(lastNotCondition); // 条件式とSQL文をリストに格納する _conditions.Add(this.ConcatConditions(_conditionStack)); _stmtsList.Add(this.RemoveNullStmt(ifStmt.ElseStatements)); }
virtual public void VisitOnEndIf(IfStmt ifStmt, int offset) { }
virtual public void VisitOnElsIf(IfStmt ifStmt, int ifThenIndex, int offset) { }
virtual public void VisitAfter(IfStmt ifStmt) { }
virtual public void VisitBefore(IfStmt ifStmt) { }
public void VisitOnEndIf(IfStmt ifStmt, int offset) { _visitor.VisitOnEndIf(ifStmt, offset); }
public void VisitOnElse(IfStmt ifStmt, int offset) { _visitor.VisitOnElse(ifStmt, offset); }
public void VisitOnElsIf(IfStmt ifStmt, int ifThenIndex, int offset) { _visitor.VisitOnElsIf(ifStmt, ifThenIndex, offset); }
public void VisitAfter(IfStmt ifStmt) { _visitor.VisitAfter(ifStmt); }
public void VisitBefore(IfStmt ifStmt) { _visitor.VisitBefore(ifStmt); }