Пример #1
0
        private QueryFilterParser.QueryContext GetContext(string text)
        {
            var inputStream       = new AntlrInputStream(text);
            var lexer             = new QueryFilterLexer(inputStream);
            var commonTokenStream = new CommonTokenStream(lexer);
            var parser            = new QueryFilterParser(commonTokenStream);

            return(parser.query());
        }
        /// <summary>
        /// In memory implementation of <see cref="ExecuteQuerySegmentedAsync{T}(TableQuery{T}, TableContinuationToken)"/>
        /// </summary>
        public override Task <TableQuerySegment <T> > ExecuteQuerySegmentedAsync <T>(TableQuery <T> query, TableContinuationToken token)
        {
            var inputStream       = new AntlrInputStream(query.FilterString);
            var lexer             = new QueryFilterLexer(inputStream);
            var commonTokenStream = new CommonTokenStream(lexer);
            var parser            = new QueryFilterParser(commonTokenStream);
            var queryContext      = parser.query();
            var resultNode        = new QueryFilterVisitor().Visit(queryContext) as InfixExpressionNode;
            var astVisitor        = new AstVisitor <T>();

            var result = astVisitor.VisitInfix(resultNode, _table);

            var resultList = new List <T>();

            foreach (var key in result.Keys)
            {
                resultList.AddRange(result[key].Select(kvp => kvp.Value).Cast <T>().ToList());
            }

            var resultSegment = TableQueryFactory.Construct(resultList);

            return(Task.FromResult(TableQueryFactory.Construct(resultSegment)));
        }