public EntityMetadataQueryHandler(object entity, IDocumentStorage storage, IDocumentMapping mapping) { _id = storage.Identity(entity); _storage = storage; _mapping = mapping; var fieldIndex = 0; _fields = new Dictionary <string, int> { { DocumentMapping.VersionColumn, fieldIndex++ }, { DocumentMapping.LastModifiedColumn, fieldIndex++ }, { DocumentMapping.DotNetTypeColumn, fieldIndex++ } }; var queryableDocument = _mapping.ToQueryableDocument(); if (queryableDocument.SelectFields().Contains(DocumentMapping.DocumentTypeColumn)) { _fields.Add(DocumentMapping.DocumentTypeColumn, fieldIndex++); } if (queryableDocument.DeleteStyle == DeleteStyle.SoftDelete) { _fields.Add(DocumentMapping.DeletedColumn, fieldIndex++); _fields.Add(DocumentMapping.DeletedAtColumn, fieldIndex++); } if (_mapping.TenancyStyle == TenancyStyle.Conjoined) { _fields.Add(TenantIdColumn.Name, fieldIndex); } }
private IWhereFragment findWhereFragment <T>(Expression <Func <T, bool> > @where, IDocumentMapping mapping) { QueryModel queryModel; using (var session = _store.QuerySession()) { queryModel = session.Query <T>().Where(@where).As <MartenQueryable <T> >().ToQueryModel(); } var wheres = queryModel.BodyClauses.OfType <WhereClause>().ToArray(); if (wheres.Length == 0) { throw new InvalidOperationException(); } var whereFragment = _store.Parser.ParseWhereFragment(mapping.ToQueryableDocument(), wheres.First().Predicate); mapping.ToQueryableDocument().FilterDocuments(queryModel, whereFragment); return(whereFragment); }