Esempio n. 1
0
        public static ISelector <T> BuildSelector <T>(this IDocumentSchema schema, IQueryableDocument mapping, QueryModel query)
        {
            var selectable = query.AllResultOperators().OfType <ISelectableOperator>().FirstOrDefault();

            if (selectable != null)
            {
                return(selectable.BuildSelector <T>(schema, mapping));
            }

            if (query.SelectClause.Selector.Type == query.SourceType())
            {
                if (typeof(T) == typeof(string))
                {
                    return((ISelector <T>) new JsonSelector());
                }

                // I'm so ashamed of this hack, but "simplest thing that works"
                if (typeof(T) == typeof(IEvent))
                {
                    return(mapping.As <EventQueryMapping>().Selector.As <ISelector <T> >());
                }

                var resolver = schema.ResolverFor <T>();
                return(new WholeDocumentSelector <T>(mapping, resolver));
            }


            var visitor = new SelectorParser(query);

            visitor.Visit(query.SelectClause.Selector);

            return(visitor.ToSelector <T>(schema, mapping));
        }
Esempio n. 2
0
        private Task <T> load <T>(object id) where T : class
        {
            if (_identityMap.Has <T>(id))
            {
                return(Task.FromResult(_identityMap.Retrieve <T>(id)));
            }

            var mapping = _schema.MappingFor(typeof(T)).ToQueryableDocument();

            return(AddItem(new LoadByIdHandler <T>(_schema.ResolverFor <T>(), mapping, id)));
        }
Esempio n. 3
0
        public static ISelector <T> ChooseSelector <T>(string dataLocator, IDocumentSchema schema, IQueryableDocument mapping, QueryModel query, SelectManyQuery subQuery, IIncludeJoin[] joins)
        {
            // I'm so ashamed of this hack, but "simplest thing that works"
            if (typeof(T) == typeof(IEvent))
            {
                return(mapping.As <EventQueryMapping>().Selector.As <ISelector <T> >());
            }

            var selectable = query.AllResultOperators().OfType <ISelectableOperator>().FirstOrDefault();

            if (selectable != null)
            {
                return(selectable.BuildSelector <T>(dataLocator, schema, mapping));
            }


            if (subQuery != null)
            {
                return(subQuery.ToSelector <T>(schema.StoreOptions.Serializer(), joins));
            }

            if (query.SelectClause.Selector.Type == query.SourceType())
            {
                if (typeof(T) == typeof(string))
                {
                    return((ISelector <T>) new JsonSelector());
                }

                if (typeof(T) != query.SourceType())
                {
                    // TODO -- going to have to come back to this one.
                    // think this is related to hierarchical documents
                    return(null);
                }

                var resolver = schema.ResolverFor <T>();

                return(new WholeDocumentSelector <T>(mapping, resolver));
            }


            var visitor = new SelectorParser(query);

            visitor.Visit(query.SelectClause.Selector);

            return(visitor.ToSelector <T>(dataLocator, schema, mapping));
        }
Esempio n. 4
0
        public static ISelector <T> BuildSelector <T>(this IDocumentSchema schema, IQueryableDocument mapping, QueryModel query)
        {
            if (query.SelectClause.Selector.Type == query.SourceType())
            {
                if (typeof(T) == typeof(string))
                {
                    return((ISelector <T>) new JsonSelector());
                }

                var resolver = schema.ResolverFor <T>();
                return(new WholeDocumentSelector <T>(mapping, resolver));
            }

            var visitor = new SelectorParser(query);

            visitor.Visit(query.SelectClause.Selector);

            return(visitor.ToSelector <T>(mapping));
        }
Esempio n. 5
0
 public ISelector <TSearched> WrapSelector <TSearched>(IDocumentSchema schema, ISelector <TSearched> inner)
 {
     return(new IncludeSelector <TSearched, T>(TableAlias, _mapping, _callback, inner, schema.ResolverFor <T>()));
 }