private void PopulateTerm(string field, CompletionSession session, IEditorView view, string termPrefix)
        {
            if (termPrefix.StartsWith("\""))
            {
                termPrefix = termPrefix.Substring(1);
            }

            if (termPrefix.EndsWith("\""))
            {
                termPrefix = termPrefix.Substring(0, termPrefix.Length - 1);
            }

            if (fieldTermsDictionary.ContainsKey(field) == false)
            {
                return;
            }

            var           termsDictionary = fieldTermsDictionary[field];
            List <string> terms;

            if (termsDictionary.ContainsKey(termPrefix))
            {
                terms = termsDictionary[termPrefix];
            }
            else
            {
                terms = new List <string>();
                termsDictionary[termPrefix] = terms;

                QueryIndexAutoComplete.GetTermsForFieldAsync(indexName, field, terms, termPrefix)
                .ContinueOnSuccessInTheUIThread(() =>
                {
                    PopulateTerm(field, session, view, termPrefix);
                    var completionItem = session.Items.FirstOrDefault();
                    if (completionItem != null)
                    {
                        session.Selection = new CompletionSelection(completionItem, CompletionSelectionState.Partial);
                        session.Open(view);
                    }
                });
            }

            foreach (var term in terms)
            {
                var maybeQuotedTerm = term.IndexOfAny(new[] { ' ', '\t' }) == -1 ? term : "\"" + term + "\"";
                session.Items.Add(new CompletionItem
                {
                    Text = term,
                    ImageSourceProvider = new CommonImageSourceProvider(CommonImage.ConstantPublic),
                    AutoCompletePreText = maybeQuotedTerm,
                });
            }
        }
Beispiel #2
0
        public override void LoadModelParameters(string parameters)
        {
            var urlParser = new UrlParser(parameters);

            UpdateAvailableIndexes();
            ClearCurrentQuery();

            if (urlParser.GetQueryParam("mode") == "dynamic")
            {
                var collection = urlParser.GetQueryParam("collection");

                IsDynamicQuery = true;
                DatabaseCommands.GetTermsAsync("Raven/DocumentsByEntityName", "Tag", "", 100)
                    .ContinueOnSuccessInTheUIThread(collections =>
                    {
                        DynamicOptions.Match(new[] { "AllDocs" }.Concat(collections).ToArray());

                        string selectedOption = null;
                        if (!string.IsNullOrEmpty(collection))
                            selectedOption = DynamicOptions.FirstOrDefault(s => s.Equals(collection));

                        if (selectedOption == null)
                            selectedOption = DynamicOptions[0];

                        DynamicSelectedOption = selectedOption;
                        DocumentsResult.SetChangesObservable(null);
                    });

                return;
            }

            IsDynamicQuery = false;
            var newIndexName = urlParser.Path.Trim('/');

            if (string.IsNullOrEmpty(newIndexName))
            {
                if (AvailableIndexes.Any())
                {
                    NavigateToIndexQuery(AvailableIndexes.FirstOrDefault());
                    return;
                }
            }

            IndexName = newIndexName;

	        if (Database.Value.Statistics.Value.Errors.Any(error => error.Index == IndexName))
	        {
		        QueryErrorMessage.Value = "The index " + IndexName + " has errors";
		        IsErrorVisible.Value = true;
	        }

	        DatabaseCommands.GetIndexAsync(IndexName)
                .ContinueOnUIThread(task =>
                {
                    if (task.IsFaulted || task.Result == null)
                    {
                        if (AvailableIndexes.Any())
                        {

                            NavigateToIndexQuery(AvailableIndexes.FirstOrDefault());
                        }
                        else
                        {
                            NavigateToIndexesList();
                        }
                        return;
                    }

                    var fields = task.Result.Fields;
                    QueryIndexAutoComplete = new QueryIndexAutoComplete(fields, IndexName, QueryDocument);

	                var regex1 = new Regex(@"(?:SpatialIndex\.Generate|SpatialGenerate)");
	                var regex2 = new Regex(@"(?:SpatialIndex\.Generate|SpatialGenerate)\(@?\""([^\""]+)\""");

	                var strs = task.Result.Maps.ToList();
					if (task.Result.Reduce != null)
						strs.Add(task.Result.Reduce);
					
					var legacyFields = new HashSet<string>();
					foreach (var map in task.Result.Maps)
					{
						var count = regex1.Matches(map).Count;
						var matches = regex2.Matches(map).Cast<Match>().Select(x => x.Groups[1].Value).ToList();
						if (matches.Count < count)
							legacyFields.Add(Constants.DefaultSpatialFieldName);

						matches.ForEach(x => legacyFields.Add(x));
					}

					var spatialFields = task.Result.SpatialIndexes
						.Select(x => new SpatialQueryField
						{
							Name = x.Key,
							IsGeographical = x.Value.Type == SpatialFieldType.Geography,
							Units = x.Value.Units
						})
						.ToList();

					legacyFields.ForEach(x => spatialFields.Add(new SpatialQueryField
						{
							Name = x,
							IsGeographical = true,
							Units = SpatialUnits.Kilometers
						}));

					UpdateSpatialFields(spatialFields);

                    HasTransform = !string.IsNullOrEmpty(task.Result.TransformResults);

                    DocumentsResult.SetChangesObservable(
                        d => d.IndexChanges
                                 .Where(n =>n.Name.Equals(indexName,StringComparison.InvariantCulture))
                                 .Select(m => Unit.Default));
		
                    SetSortByOptions(fields);
                    RestoreHistory();
                }).Catch();


        }
Beispiel #3
0
	    private void BeginUpdateFieldsAndSortOptions(string collection)
	    {
		    DatabaseCommands.QueryAsync("Raven/DocumentsByEntityName",
		                                new IndexQuery {Query = "Tag:" + collection, Start = 0, PageSize = 1}, null)
		                    .ContinueOnSuccessInTheUIThread(result =>
		                    {
			                    if (result.Results.Count > 0)
			                    {
				                    var fields =
					                    DocumentHelpers.GetPropertiesFromJObjects(result.Results, includeNestedProperties: true,
					                                                              includeMetadata: false,
					                                                              excludeParentPropertyNames: true)
					                                   .ToList();

				                    SetSortByOptions(fields);
				                    QueryIndexAutoComplete = new QueryIndexAutoComplete(fields);
				                    RestoreHistory();
			                    }
		                    });
	    }
Beispiel #4
0
		public override void LoadModelParameters(string parameters)
		{
			var urlParser = new UrlParser(parameters);

			if (urlParser.GetQueryParam("mode") == "dynamic")
			{
				IsDynamicQuery = true;
				DatabaseCommands.GetTermsAsync("Raven/DocumentsByEntityName", "Tag", "", 100)
					.ContinueOnSuccess(collections => DynamicOptions.Match(new[] { "AllDocs" }.Concat(collections).ToArray()));
				return;
			}

			IndexName = urlParser.Path.Trim('/');

			DatabaseCommands.GetIndexAsync(IndexName)
				.ContinueOnSuccessInTheUIThread(definition =>
				{
					if (definition == null)
					{
						IndexDefinitionModel.HandleIndexNotFound(IndexName);
						return;
					}
					var fields = definition.Fields;
					QueryIndexAutoComplete = new QueryIndexAutoComplete(IndexName, Query, fields);
					
					const string spatialindexGenerate = "SpatialIndex.Generate";
					IsSpatialQuerySupported =
						definition.Maps.Any(x => x.Contains(spatialindexGenerate)) ||
						(definition.Reduce != null && definition.Reduce.Contains(spatialindexGenerate));

					SetSortByOptions(fields);
					Execute.Execute(string.Empty);
				}).Catch();
		}
Beispiel #5
0
	    private void UpdateQueryAutoComplete()
	    {
	        if (PatchOn != PatchOnOptions.Index || string.IsNullOrEmpty(SelectedItem))
	        {
	            return;
	        }

            ApplicationModel.Database.Value.AsyncDatabaseCommands.GetIndexAsync(SelectedItem)
                .ContinueOnUIThread(task =>
                {
                    if (task.IsFaulted || task.Result == null)
                    {
                        return;
                    }

                    var fields = task.Result.Fields;
                    QueryIndexAutoComplete = new QueryIndexAutoComplete(fields, SelectedItem, QueryDoc);
                }).Catch();
	    }
Beispiel #6
0
		public override void LoadModelParameters(string parameters)
		{
			var urlParser = new UrlParser(parameters);

		    ExecutionElapsedTime.Value = TimeSpan.Zero;
            GroupByField.Value = "";
            ValueCalculations.Clear();

			UpdateAvailableIndexes();

			var newIndexName = urlParser.Path.Trim('/');

			if (string.IsNullOrEmpty(newIndexName))
			{
				if (AvailableIndexes.Any())
				{
					NavigateToIndexReport(AvailableIndexes.FirstOrDefault());
					return;
				}
			}

			IndexName = newIndexName;

			DatabaseCommands.GetIndexAsync(IndexName)
				.ContinueOnUIThread(task =>
				{
                    if (task.IsFaulted || task.Result == null)
                    {
                        if (AvailableIndexes.Any())
                        {
                            NavigateToIndexReport(AvailableIndexes.FirstOrDefault());
                        }
                        else
                        {
                            NavigateToIndexesList();
                        }

                        return;
                    }

				    var fields = task.Result.Fields;

				    IndexFields.Match(fields);
				    QueryIndexAutoComplete = new QueryIndexAutoComplete(fields, IndexName, FilterDoc);
				}).Catch();
		}
Beispiel #7
0
        public override void LoadModelParameters(string parameters)
        {
            var urlParser = new UrlParser(parameters);

            ClearCurrentQuery();

            if (urlParser.GetQueryParam("mode") == "dynamic")
            {
                var collection = urlParser.GetQueryParam("collection");

                IsDynamicQuery = true;
                DatabaseCommands.GetTermsAsync("Raven/DocumentsByEntityName", "Tag", "", 100)
                    .ContinueOnSuccessInTheUIThread(collections =>
                    {
                        DynamicOptions.Match(new[] { "AllDocs" }.Concat(collections).ToArray());

                        string selectedOption = null;
                        if (!string.IsNullOrEmpty(collection))
                            selectedOption = DynamicOptions.FirstOrDefault(s => s.Equals(collection));

                        if (selectedOption == null)
                            selectedOption = DynamicOptions[0];

                        DynamicSelectedOption = selectedOption;
                        DocumentsResult.SetChangesObservable(null);
                    });

                return;
            }

            IsDynamicQuery = false;
            IndexName = urlParser.Path.Trim('/');

            DatabaseCommands.GetIndexAsync(IndexName)
                .ContinueOnUIThread(task =>
                {
                    if (task.IsFaulted || task.Result == null)
                    {
                        IndexDefinitionModel.HandleIndexNotFound(IndexName);
                        return;
                    }
                    var fields = task.Result.Fields;
                    QueryIndexAutoComplete = new QueryIndexAutoComplete(fields, IndexName, QueryDocument);

                    const string spatialindexGenerateLegacy = "SpatialIndex.Generate";
					const string spatialindexGenerate = "SpatialGenerate";

                    IsSpatialQuerySupported =
						task.Result.Maps.Any(x => x.Contains(spatialindexGenerate) || x.Contains(spatialindexGenerateLegacy)) ||
						(task.Result.Reduce != null && (task.Result.Reduce.Contains(spatialindexGenerate) || task.Result.Reduce.Contains(spatialindexGenerateLegacy)));
                    HasTransform = !string.IsNullOrEmpty(task.Result.TransformResults);

                    DocumentsResult.SetChangesObservable(
                        d => d.IndexChanges
                                 .Where(n =>n.Name.Equals(indexName,StringComparison.InvariantCulture))
                                 .Select(m => Unit.Default));
		
                    SetSortByOptions(fields);
                    RestoreHistory();
                }).Catch();
        }