public async Task <DocumentQueryResult> ExecuteQuery(string indexName, IndexQueryServerSide query, StringValues includes, long?existingResultEtag, OperationCancelToken token) { DocumentQueryResult result; var sw = Stopwatch.StartNew(); if (DynamicQueryRunner.IsDynamicIndex(indexName)) { var runner = new DynamicQueryRunner(_database.IndexStore, _database.TransformerStore, _database.DocumentsStorage, _documentsContext, token); result = await runner.Execute(indexName, query, existingResultEtag); result.DurationMilliseconds = (long)sw.Elapsed.TotalMilliseconds; return(result); } var index = GetIndex(indexName); if (existingResultEtag.HasValue) { var etag = index.GetIndexEtag(); if (etag == existingResultEtag) { return(DocumentQueryResult.NotModifiedResult); } } result = await index.Query(query, _documentsContext, token); result.DurationMilliseconds = (long)sw.Elapsed.TotalMilliseconds; return(result); }
public DocumentDatabase(InMemoryRavenConfiguration configuration) { Configuration = configuration; configuration.Container.SatisfyImportsOnce(this); workContext = new WorkContext { IndexUpdateTriggers = IndexUpdateTriggers, ReadTriggers = ReadTriggers }; dynamicQueryRunner = new DynamicQueryRunner(this); suggestionQueryRunner = new SuggestionQueryRunner(this); TransactionalStorage = configuration.CreateTransactionalStorage(workContext.HandleWorkNotifications); configuration.Container.SatisfyImportsOnce(TransactionalStorage); bool newDb; try { newDb = TransactionalStorage.Initialize(this); } catch (Exception) { TransactionalStorage.Dispose(); throw; } TransactionalStorage.Batch(actions => currentEtagBase = actions.General.GetNextIdentityValue("Raven/Etag")); IndexDefinitionStorage = new IndexDefinitionStorage( configuration, TransactionalStorage, configuration.DataDirectory, configuration.Container.GetExportedValues<AbstractViewGenerator>(), Extensions); IndexStorage = new IndexStorage(IndexDefinitionStorage, configuration); workContext.IndexStorage = IndexStorage; workContext.TransactionaStorage = TransactionalStorage; workContext.IndexDefinitionStorage = IndexDefinitionStorage; try { InitializeTriggers(); ExecuteStartupTasks(); } catch (Exception) { Dispose(); throw; } if (!newDb) return; OnNewlyCreatedDatabase(); }
public GraphQueryPlan(IndexQueryServerSide query, QueryOperationContext context, long?resultEtag, OperationCancelToken token, DocumentDatabase database) { _database = database; _query = query; _context = context; _resultEtag = resultEtag; _token = token; _dynamicQueryRunner = new DynamicQueryRunner(database); }
public List <DynamicQueryToIndexMatcher.Explanation> ExplainDynamicIndexSelection(string indexName, IndexQueryServerSide indexQuery) { if (DynamicQueryRunner.IsDynamicIndex(indexName) == false) { throw new InvalidOperationException("Explain can only work on dynamic indexes"); } var runner = new DynamicQueryRunner(_database.IndexStore, _database.TransformerStore, _database.DocumentsStorage, _documentsContext, OperationCancelToken.None); return(runner.ExplainIndexSelection(indexName, indexQuery)); }
public List <DynamicQueryToIndexMatcher.Explanation> ExplainDynamicIndexSelection(IndexQueryServerSide query) { if (query.Metadata.IsDynamic == false) { throw new InvalidOperationException("Explain can only work on dynamic indexes"); } var runner = new DynamicQueryRunner(_database.IndexStore, _database, _database.DocumentsStorage, _documentsContext, _database.Configuration, OperationCancelToken.None); return(runner.ExplainIndexSelection(query)); }
public async Task ExecuteStreamQuery(string indexName, IndexQueryServerSide query, HttpResponse response, BlittableJsonTextWriter writer, OperationCancelToken token) { if (DynamicQueryRunner.IsDynamicIndex(indexName)) { var runner = new DynamicQueryRunner(_database.IndexStore, _database.TransformerStore, _database.DocumentsStorage, _documentsContext, token); await runner.ExecuteStream(response, writer, indexName, query).ConfigureAwait(false); } var index = GetIndex(indexName); await index.StreamQuery(response, writer, query, _documentsContext, token); }
public IndexEntriesQueryResult ExecuteIndexEntriesQuery(string indexName, IndexQueryServerSide query, long?existingResultEtag, OperationCancelToken token) { if (DynamicQueryRunner.IsDynamicIndex(indexName)) { var runner = new DynamicQueryRunner(_database.IndexStore, _database.TransformerStore, _database.DocumentsStorage, _documentsContext, token); return(runner.ExecuteIndexEntries(indexName, query, existingResultEtag)); } var index = GetIndex(indexName); if (existingResultEtag.HasValue) { var etag = index.GetIndexEtag(); if (etag == existingResultEtag) { return(IndexEntriesQueryResult.NotModifiedResult); } } return(index.IndexEntries(query, _documentsContext, token)); }
public async Task <IndexEntriesQueryResult> ExecuteIndexEntriesQuery(IndexQueryServerSide query, long?existingResultEtag, OperationCancelToken token) { if (query.Metadata.IsDynamic) { var runner = new DynamicQueryRunner(_database.IndexStore, _database, _database.DocumentsStorage, _documentsContext, _database.Configuration, token); return(await runner.ExecuteIndexEntries(query, existingResultEtag)); } var index = GetIndex(query.Metadata.IndexName); if (existingResultEtag.HasValue) { var etag = index.GetIndexEtag(); if (etag == existingResultEtag) { return(IndexEntriesQueryResult.NotModifiedResult); } } return(index.IndexEntries(query, _documentsContext, token)); }
/// <summary> /// Returns the dynamic query runner /// </summary> /// <param name="serverId">The server id.</param> /// <returns>The dynamic query runner</returns> public QueryRunner GetDynamicQueryRunner(uint serverId) { DynamicQueryRunner.SelectVirtualServerById(serverId); return(DynamicQueryRunner); }
public QueryRunner(DocumentDatabase database) : base(database) { _static = new StaticIndexQueryRunner(database); _dynamic = new DynamicQueryRunner(database); _collection = new CollectionQueryRunner(database); }