コード例 #1
0
        public Parser <TSchema, LayoutMatch <TLayout> > CreateQuery(LayoutParserOptions options, IQueryBuilder <TSchema> queryBuilder)
        {
            Parser <TSchema, TEntity> parser = queryBuilder.Select <TEntity>();
            var listParser = _required ? parser.OneOrMore() : parser.ZeroOrMore();

            return(new EntityListLayoutParser <TLayout, TSchema, TEntity>(listParser, this));
        }
コード例 #2
0
        public Parser <TSchema, LayoutMatch <TLayout> > CreateQuery(LayoutParserOptions options, IQueryBuilder <TSchema> queryBuilder)
        {
            Parser <TSchema, T> parser = _layout.CreateParser(options, queryBuilder);
            var listParser             = _required ? parser.OneOrMore() : parser.ZeroOrMore();

            return(new LayoutListLayoutParser <TLayout, TSchema, T>(listParser, this));
        }
コード例 #3
0
 /// <summary>
 /// Create a query using the document to infer the schema type, which is not specifically tied to the document, but easy to discover.
 /// It's better to create a query using <see cref="Query{TSchema}.Create{T}"/> in advance, but really no difference.
 /// </summary>
 /// <param name="entityResult">A parsed text</param>
 /// <param name="parserFactory"></param>
 /// <param name="options"></param>
 /// <typeparam name="T">The query result type</typeparam>
 /// <typeparam name="TSchema">The schema type</typeparam>
 /// <returns></returns>
 public static Parser <TSchema, T> CreateQuery <TSchema, T>(this EntityResult <TSchema> entityResult, ILayoutParserFactory <T, TSchema> parserFactory,
                                                            LayoutParserOptions options = LayoutParserOptions.None)
     where TSchema : Entity
     where T : Layout
 {
     return(Query <TSchema> .Create(qb => parserFactory.CreateParser(options, qb)));
 }
コード例 #4
0
        public IQueryParser <TSchema, T> Layout <T>(LayoutParserOptions options = LayoutParserOptions.None)
            where T : Layout
        {
            if (_schema.TryGetLayout(out ILayoutParserFactory <T, TSchema> layout))
            {
                return(new EntityQueryParser <TSchema, T>(layout.CreateParser(options, this)));
            }

            throw new LayoutMissingException($"The layout was not found: {TypeCache<T>.ShortName}");
        }
コード例 #5
0
        public IParser <TSchema, LayoutMatch <TLayout> > CreateQuery(LayoutParserOptions options, IQueryBuilder <TSchema> queryBuilder)
        {
            IParser <TSchema, T> parser = _layout.CreateParser(options, queryBuilder);

            if (_required == false)
            {
                parser = parser.Optional();
            }

            return(new LayoutLayoutParser <TLayout, TSchema, T>(parser, this));
        }
コード例 #6
0
        public Parser <TSchema, LayoutMatch <TLayout> > CreateQuery(LayoutParserOptions options, IQueryBuilder <TSchema> queryBuilder)
        {
            Parser <TSchema, TEntity> parser = queryBuilder.Select <TEntity>();

            if (_required == false)
            {
                parser = parser.Optional();
            }

            return(new EntityLayoutParser <TLayout, TSchema, TEntity>(parser, this));
        }
コード例 #7
0
        /// <summary>
        /// Parse the parsed input from the beginning, create a new cursor, building the query on the fly
        /// </summary>
        /// <param name="entityResult"></param>
        /// <param name="selector">The layout selector</param>
        /// <param name="options"></param>
        /// <typeparam name="TSchema"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <returns></returns>
        public static Result <Cursor <TSchema>, TResult> Query <TSchema, TResult>(this EntityResult <TSchema> entityResult, QueryLayoutSelector <TSchema, TResult> selector,
                                                                                  LayoutParserOptions options = LayoutParserOptions.None)
            where TSchema : Entity
            where TResult : Layout
        {
            ILayoutParserFactory <TResult, TSchema> layout;

            if (!entityResult.Schema.TryGetLayout(out layout))
            {
                throw new ArgumentException($"The layout was not found: {TypeCache<TResult>.ShortName}");
            }

            IParser <TSchema, TResult> query = entityResult.CreateQuery(q => layout.CreateParser(options, q));

            var cursor = entityResult.GetCursor();

            return(query.Parse(cursor));
        }
コード例 #8
0
        public Parser <TSchema, TLayout> CreateParser(LayoutParserOptions options, IQueryBuilder <TSchema> queryBuilder)
        {
            var queries = _properties.Select(property => property.CreateQuery(options, queryBuilder)).ToArray();

            return(new LayoutParser <TLayout, TSchema>(_factory, queries));
        }