Esempio n. 1
0
        /// <summary>
        /// Adds a single condition to a <see cref="TermEngineBuilder{T, TTermOption}"/>.
        /// <param name="builder"></param>
        /// <param name="matchQuery">An async predicate to apply when the term is parsed.</param>
        /// </summary>
        public static QueryUnaryEngineBuilder <T> OneCondition <T>(this TermEngineBuilder <T, QueryTermOption <T> > builder, Func <string, IQuery <T>, QueryExecutionContext <T>, ValueTask <IQuery <T> > > matchQuery) where T : class
        {
            var operatorBuilder = new QueryUnaryEngineBuilder <T>(builder.Name, matchQuery);

            builder.SetOperator(operatorBuilder);

            return(operatorBuilder);
        }
Esempio n. 2
0
        /// <summary>
        /// Adds a condition which supports many operations to a <see cref="TermEngineBuilder{T, TTermOption}"/>
        /// <param name="builder"></param>
        /// <param name="matchQuery">The predicate to apply when the term is parsed with an AND or OR operator.</param>
        /// <param name="notMatchQuery">The predicate to apply when the term is parsed with a NOT operator.</param>
        /// </summary>
        public static QueryBooleanEngineBuilder <T> ManyCondition <T>(
            this TermEngineBuilder <T, QueryTermOption <T> > builder,
            Func <string, IQuery <T>, IQuery <T> > matchQuery,
            Func <string, IQuery <T>, IQuery <T> > notMatchQuery) where T : class
        {
            ValueTask <IQuery <T> > valueMatch(string q, IQuery <T> val, QueryExecutionContext <T> ctx) => new(matchQuery(q, val));
            ValueTask <IQuery <T> > valueNotMatch(string q, IQuery <T> val, QueryExecutionContext <T> ctx) => new(notMatchQuery(q, val));

            return(builder.ManyCondition(valueMatch, valueNotMatch));
        }
Esempio n. 3
0
        public QueryEngineBuilder <T> SetTermParser(TermEngineBuilder <T, QueryTermOption <T> > builder)
        {
            _termBuilders[builder.Name] = builder;

            return(this);
        }
Esempio n. 4
0
        /// <summary>
        /// Adds a single condition to a <see cref="TermEngineBuilder{T, TTermOption}"/>.
        /// <param name="builder"></param>.
        /// <param name="matchQuery">The predicate to apply when the term is parsed.</param>
        /// </summary>
        public static QueryUnaryEngineBuilder <T> OneCondition <T>(this TermEngineBuilder <T, QueryTermOption <T> > builder, Func <string, IQuery <T>, IQuery <T> > matchQuery) where T : class
        {
            ValueTask <IQuery <T> > valueQuery(string q, IQuery <T> val, QueryExecutionContext <T> ctx) => new(matchQuery(q, val));

            return(builder.OneCondition(valueQuery));
        }