コード例 #1
0
        public static Common.QueryResult ToCommon(this Domain.Model.QueryResult value, string centralId)
        {
            Common.QueryResult result = new Common.QueryResult();

            result.Count   = value.Count;
            result.Neurons = value.Neurons.Select(n => n.ToCommon(centralId));

            return(result);
        }
コード例 #2
0
ファイル: NeuronRepository.cs プロジェクト: ei8/cortex-graph
        private async Task <Domain.Model.QueryResult> GetAllCore(Guid?centralGuid, NeuronQuery neuronQuery, CancellationToken token = default(CancellationToken))
        {
            Domain.Model.QueryResult result = null;
            NeuronRepository.FillWithDefaults(neuronQuery, this.settingsService);

            result = NeuronRepository.GetNeuronResults(
                centralGuid,
                null,
                this.settingsService.DatabaseName,
                neuronQuery,
                token
                );

            return(result);
        }
コード例 #3
0
ファイル: NeuronRepository.cs プロジェクト: ei8/cortex-graph
        private static Domain.Model.QueryResult GetNeuronResults(Guid?centralGuid, Guid?relativeGuid, string settingName, NeuronQuery neuronQuery, CancellationToken token = default(CancellationToken))
        {
            Domain.Model.QueryResult result = null;

            using (var db = ArangoDatabase.CreateWithSetting(settingName))
            {
                var queryResult = db.CreateStatement <Domain.Model.NeuronResult>(
                    NeuronRepository.CreateQuery(centralGuid, relativeGuid, neuronQuery, out List <QueryParameter> queryParameters),
                    queryParameters,
                    options: new QueryOption()
                {
                    FullCount = true
                }
                    );
                var neurons = queryResult.AsEnumerable().ToArray();

                if (centralGuid.HasValue)
                {
                    neurons.ToList().ForEach(nr => nr.Terminal = nr.Terminal.CloneExcludeSynapticPrefix());
                }

                var fullCount = (int)queryResult.Statistics.Extra.Stats.FullCount;

                if (
                    neuronQuery.Page.Value != 1 &&
                    fullCount == NeuronRepository.CalculateOffset(neuronQuery.Page.Value, neuronQuery.PageSize.Value) &&
                    neurons.Length == 0
                    )
                {
                    throw new ArgumentOutOfRangeException("Specified/Default Page is invalid.");
                }

                result = new Domain.Model.QueryResult()
                {
                    Count   = fullCount,
                    Neurons = neurons
                };
            }

            return(result);
        }
コード例 #4
0
ファイル: NeuronRepository.cs プロジェクト: ei8/cortex-graph
        private async Task <Domain.Model.QueryResult> GetRelativeCore(Guid guid, Guid?centralGuid, NeuronQuery neuronQuery, CancellationToken token = default(CancellationToken))
        {
            Domain.Model.QueryResult result = null;
            NeuronRepository.FillWithDefaults(neuronQuery, this.settingsService);

            using (var db = ArangoDatabase.CreateWithSetting(this.settingsService.DatabaseName))
            {
                AssertionConcern.AssertStateTrue(await Helper.GraphExists(db), Constants.Messages.Error.GraphNotInitialized);

                if (!centralGuid.HasValue)
                {
                    var n = await db.DocumentAsync <Neuron>(guid.ToString());

                    if (
                        n != null && (
                            neuronQuery.NeuronActiveValues.Value.HasFlag(ActiveValues.All) ||
                            (
                                Helper.TryConvert(neuronQuery.NeuronActiveValues.Value, out bool activeValue) &&
                                n.Active == activeValue
                            )
                            )
                        )
                    {
                        var region = n.RegionId != null ? await db.DocumentAsync <Neuron>(n.RegionId) : null;

                        var creationAuthor         = (await db.DocumentAsync <Neuron>(n.CreationAuthorId));
                        var lastModificationAuthor = !string.IsNullOrEmpty(n.LastModificationAuthorId) ?
                                                     (await db.DocumentAsync <Neuron>(n.LastModificationAuthorId)) :
                                                     null;
                        var unifiedLastModificationAuthor = !string.IsNullOrEmpty(n.UnifiedLastModificationAuthorId) ?
                                                            (await db.DocumentAsync <Neuron>(n.UnifiedLastModificationAuthorId)) :
                                                            null;

                        AssertionConcern.AssertStateTrue(creationAuthor != null, string.Format(Constants.Messages.Error.AuthorNeuronNotFound, n.CreationAuthorId));

                        result = new Domain.Model.QueryResult()
                        {
                            Count   = 1,
                            Neurons = new Domain.Model.NeuronResult[] { new Domain.Model.NeuronResult()
                                                                        {
                                                                            Neuron = n,
                                                                            NeuronCreationAuthorTag         = creationAuthor.Tag,
                                                                            NeuronLastModificationAuthorTag = lastModificationAuthor != null ?
                                                                                                              lastModificationAuthor.Tag : string.Empty,
                                                                            NeuronUnifiedLastModificationAuthorTag = unifiedLastModificationAuthor != null ? unifiedLastModificationAuthor.Tag : string.Empty,
                                                                            NeuronRegionTag = region != null ? region.Tag : string.Empty
                                                                        } }
                        };
                    }
                    else
                    {
                        result = new Domain.Model.QueryResult()
                        {
                            Count   = 0,
                            Neurons = new Domain.Model.NeuronResult[0]
                        }
                    };
                }
                else
                {
                    result = NeuronRepository.GetNeuronResults(centralGuid.Value, guid, this.settingsService.DatabaseName, neuronQuery, token);
                }

                // KEEP: circular references will now be allowed 2018/10/24
                // int c = db.Query()
                //    .Traversal<Neuron, Terminal>(EdgePrefix + guid.ToString())
                //    .Depth(1, 999)
                //    .OutBound()
                //    .Graph(NeuronRepository.GraphName)
                //    .Filter(n => n.Vertex.Id == guid.ToString())
                //    .Select(g => g.Vertex.Id)
                //    .ToList()
                //    .Count();
            }

            return(result);
        }