示例#1
0
        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]));
        }
示例#2
0
 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]);
         }
     }
 }
示例#3
0
 public override void VisitBefore(IfStmt ifStmt)
 {
     // 最上位階層のIF文のみを解析対象にする
     if (_topIfStmt == null)
     {
         _topIfStmt = ifStmt;
     }
     else if (_topIfStmt != ifStmt)
     {
         return;
     }
     _conditionStack.Push(ifStmt.Conditions[0]);
 }
示例#4
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();
            }
        }
示例#5
0
        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]));
        }
示例#6
0
        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));
        }
示例#7
0
 virtual public void VisitOnEndIf(IfStmt ifStmt, int offset)
 {
 }
示例#8
0
 virtual public void VisitOnElsIf(IfStmt ifStmt, int ifThenIndex, int offset)
 {
 }
示例#9
0
 virtual public void VisitAfter(IfStmt ifStmt)
 {
 }
示例#10
0
 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);
 }