public override void PerformOnWhen(CaseExpression node) { if (node == null) { throw new ArgumentNullException("node"); } m_sql.Append(NewLine); }
SwitchFunction MakeSwitch(CaseExpression caseExpr) { if (caseExpr == null) { throw new ArgumentNullException("caseExpr"); } IExpression left = caseExpr.Case; SwitchFunction switchFunc = new SwitchFunction(); CaseAlternative alt = caseExpr.Alternatives; if (alt == null) { throw new InvalidOperationException("CASE has no alternatives."); } // branch expressions will be tailored through caseExpr.Alternatives if (left != null) { while (alt != null) { alt.When = new Expression(left.Clone(), ExpressionOperator.Equal, alt.When); CaseAlternative next = alt.Next; alt.Next = null; switchFunc.Add(alt); alt = next; } } else { switchFunc.Alternatives = alt; } IExpression elseExpr = caseExpr.Else; if (elseExpr != null) { // elseExpr will be tailored through caseExpr.Else CaseAlternative last = new CaseAlternative( new Expression( new IntegerValue(1), ExpressionOperator.Equal, new IntegerValue(1)), elseExpr); switchFunc.Add(last); } return(switchFunc); }
public override void PerformBefore(CaseExpression node) { if (node == null) { throw new ArgumentNullException("node"); } ReplaceTerm(node, MakeSwitch(node)); base.PerformBefore(node); }
public override void PerformOnElse(CaseExpression node) { if (node == null) { throw new ArgumentNullException("node"); } if (node.Else != null) { m_sql.Append("ELSE "); } }
public override void PerformBefore(CaseExpression node) { if (node == null) { throw new ArgumentNullException("node"); } m_sql.Append("CASE"); if (node.Case != null) { m_sql.Append(' '); } }
public override void PerformAfter(CaseExpression node) { if (node == null) { throw new ArgumentNullException("node"); } if (node.Else != null) { m_sql.Append(NewLine); } m_sql.Append("END"); }
public INode Clone() { CaseExpression caseExpression = new CaseExpression(); if (m_case != null) { caseExpression.Case = (IExpression)(m_case.Clone()); } if (m_else != null) { caseExpression.Else = (IExpression)(m_else.Clone()); } if (m_alternatives != null) { caseExpression.Alternatives = (CaseAlternative)(m_alternatives.Clone()); } return(caseExpression); }
public virtual void PerformAfter(CaseExpression node) { }
public virtual void PerformOnElse(CaseExpression node) { }
public virtual void PerformOnWhen(CaseExpression node) { }
public virtual void PerformBefore(CaseExpression node) { }
INode MakeSubstring(FunctionCall substringCall) { if (substringCall == null) { throw new ArgumentNullException("substringCall"); } if (TailorUtil.HasNullArgument(substringCall)) { return(NullValue.Value); } ExpressionItem val = substringCall.ExpressionArguments; if (val == null) { throw new InvalidOperationException("No parameters for SUBSTRING."); } ExpressionItem start = val.Next; if (start == null) { throw new InvalidOperationException("Too few parameters for SUBSTRING."); } ExpressionItem len = start.Next; // before adding len to the list Expression when = MakeNotNullCheck(substringCall.ExpressionArguments); if (len == null) { IExpression argument = TailorUtil.MakeLenArg(start.Expression, val.Expression, "LEN"); start.Add(new ExpressionItem(argument)); } else { if (len.Next != null) { throw new InvalidOperationException("Too many parameters for SUBSTRING."); } } if (when != null) { CaseExpression caseExpression = new CaseExpression(); caseExpression.Alternatives = new CaseAlternative(when, substringCall); Expression elseExpr = new Expression(); elseExpr.Left = NullValue.Value; caseExpression.Else = elseExpr; return(caseExpression); } else { return(substringCall); } }
public override void PerformAfter(CaseExpression node) { PopKnownParent(node); }
public override void PerformBefore(CaseExpression node) { PushParent(node); }