コード例 #1
0
        public void ToString(StringBuilder builder)
        {
            builder.Append(StringTokens.TagOpen);
            builder.Append(Tag);
            builder.Append(StringTokens.ArgumentsOpen);
            CaseSwitch.ToString(builder);
            builder.Append(StringTokens.ArgumentsClose);
            builder.Append(StringTokens.TagClose);

            foreach (var caseValue in Cases)
            {
                builder.Append(StringTokens.TagOpen);
                builder.Append(StringTokens.CaseTagName);
                builder.Append(StringTokens.ArgumentsOpen);
                builder.Append(caseValue.Key);
                builder.Append(StringTokens.ArgumentsClose);
                builder.Append(StringTokens.TagClose);

                caseValue.Value.ToString(builder);

                builder.Append(StringTokens.TagOpen);
                builder.Append(StringTokens.ElementClose);
                builder.Append(StringTokens.CaseTagName);
                builder.Append(StringTokens.TagClose);
            }

            builder.Append(StringTokens.TagOpen);
            builder.Append(StringTokens.ElementClose);
            builder.Append(Tag);
            builder.Append(StringTokens.TagClose);
        }
コード例 #2
0
        public IExpression Evaluate(EvaluationParameters parameters)
        {
            var evalSwitch = CaseSwitch.TryEvaluate(parameters);
            var asInt      = parameters.FunctionProvider.ToInteger(evalSwitch);

            INode caseNode;

            if (!_Cases.TryGetValue(asInt, out caseNode))
            {
                throw new InvalidOperationException();
            }
            return(caseNode.TryEvaluate(parameters));
        }
コード例 #3
0
ファイル: ExpressionParser.cs プロジェクト: dnnancy/sqlformat
        private void ParseCaseExpression(CaseExpression caseExpression)
        {
            while (Tokenizer.IsNextToken(Constants.When))
            {
                ReadNextToken();
                CaseSwitch caseSwitch = new CaseSwitch(caseExpression);
                caseSwitch.When = ReadCriteriaList(caseExpression);

                Tokenizer.ExpectToken(Constants.Then);
                caseSwitch.Then = ReadExpression(caseExpression);

                caseExpression.Cases.Add(caseSwitch);
            }

            if (Tokenizer.IsNextToken(Constants.Else))
            {
                ReadNextToken();
                caseExpression.Else = ReadExpression(caseExpression);
            }

            ExpectToken(Constants.End);
        }