Ejemplo n.º 1
0
        public void TestVariableAnalysis()
        {
            var patternTests = new[] {
                new[] { "A", "[\"A\"]", "[]" },
                new[] { "A B", "[\"A\", \"B\"]", "[]" },
                new[] { "A B*", "[\"A\"]", "[\"B\"]" },
                new[] { "A B B", "[\"A\"]", "[\"B\"]" },
                new[] { "A B A", "[\"B\"]", "[\"A\"]" },
                new[] { "A B+ C", "[\"A\", \"C\"]", "[\"B\"]" },
                new[] { "A B?", "[\"A\", \"B\"]", "[]" },
                new[] { "(A B)* C", "[\"C\"]", "[\"A\", \"B\"]" },
                new[] { "D (A B)+ (G H)? C", "[\"D\", \"G\", \"H\", \"C\"]", "[\"A\", \"B\"]" },
                new[] { "A B | A C", "[\"A\", \"B\", \"C\"]", "[]" },
                new[] { "(A B*) | (A+ C)", "[\"C\"]", "[\"B\", \"A\"]" },
                new[] { "(A | B) | (C | A)", "[\"A\", \"B\", \"C\"]", "[]" },
            };

            for (var i = 0; i < patternTests.Length; i++)
            {
                var pattern    = patternTests[i][0];
                var expression = "select * from MyEvent#keepall match_recognize (" +
                                 "  partition by string measures A.string as a_string pattern ( " +
                                 pattern +
                                 ") define A as (A.value = 1) )";

                var raw = CompilerHelperSingleEPL.ParseWalk(expression, SupportStatementSpecMapEnv.Make(container));

                var parent    = raw.MatchRecognizeSpec.Pattern;
                var singles   = new LinkedHashSet <string>();
                var multiples = new LinkedHashSet <string>();

                RowRecogHelper.RecursiveInspectVariables(parent, false, singles, multiples);

                var outText = "Failed in :" +
                              pattern +
                              " result is : single " +
                              singles.RenderAny() +
                              " multiple " +
                              multiples.RenderAny();

                Assert.AreEqual(patternTests[i][1], singles.RenderAny(), outText);
                Assert.AreEqual(patternTests[i][2], multiples.RenderAny(), outText);
            }
        }