コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: DocumentDatabase.cs プロジェクト: vinone/ravendb
        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();
        }
コード例 #3
0
 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);
 }
コード例 #4
0
        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));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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));
        }
コード例 #9
0
 /// <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);
 }
コード例 #10
0
 public QueryRunner(DocumentDatabase database) : base(database)
 {
     _static     = new StaticIndexQueryRunner(database);
     _dynamic    = new DynamicQueryRunner(database);
     _collection = new CollectionQueryRunner(database);
 }