diff --git a/Raven.Client.Lightweight/Connection/Async/AsyncServerClient.cs b/Raven.Client.Lightweight/Connection/Async/AsyncServerClient.cs index bb51812b5b61..b215d5ade0dd 100644 --- a/Raven.Client.Lightweight/Connection/Async/AsyncServerClient.cs +++ b/Raven.Client.Lightweight/Connection/Async/AsyncServerClient.cs @@ -233,7 +233,7 @@ private void AddOperationHeaders(HttpWebRequest webRequest) public IAsyncDatabaseCommands ForDatabase(string database) { var databaseUrl = url; - var indexOfDatabases = databaseUrl.IndexOf("/databases/"); + var indexOfDatabases = databaseUrl.IndexOf("/databases/", StringComparison.Ordinal); if (indexOfDatabases != -1) databaseUrl = databaseUrl.Substring(0, indexOfDatabases); if (databaseUrl.EndsWith("/") == false) @@ -248,7 +248,7 @@ public IAsyncDatabaseCommands ForDatabase(string database) /// public IAsyncDatabaseCommands GetRootDatabase() { - var indexOfDatabases = url.IndexOf("/databases/"); + var indexOfDatabases = url.IndexOf("/databases/", StringComparison.Ordinal); if (indexOfDatabases == -1) return this; diff --git a/Raven.Client.Lightweight/Connection/ServerClient.cs b/Raven.Client.Lightweight/Connection/ServerClient.cs index ba6274aeeb4c..59621a81458d 100644 --- a/Raven.Client.Lightweight/Connection/ServerClient.cs +++ b/Raven.Client.Lightweight/Connection/ServerClient.cs @@ -960,7 +960,7 @@ public IDatabaseCommands With(ICredentials credentialsForSession) public IDatabaseCommands ForDatabase(string database) { var databaseUrl = url; - var indexOfDatabases = databaseUrl.IndexOf("/databases/"); + var indexOfDatabases = databaseUrl.IndexOf("/databases/", StringComparison.Ordinal); if (indexOfDatabases != -1) databaseUrl = databaseUrl.Substring(0, indexOfDatabases); if (databaseUrl.EndsWith("/") == false) @@ -975,7 +975,7 @@ public IDatabaseCommands ForDatabase(string database) /// public IDatabaseCommands GetRootDatabase() { - var indexOfDatabases = url.IndexOf("/databases/"); + var indexOfDatabases = url.IndexOf("/databases/", StringComparison.Ordinal); if (indexOfDatabases == -1) return this; diff --git a/Raven.Client.Lightweight/Document/DocumentConvention.cs b/Raven.Client.Lightweight/Document/DocumentConvention.cs index 8227076186f4..faeab851c79a 100644 --- a/Raven.Client.Lightweight/Document/DocumentConvention.cs +++ b/Raven.Client.Lightweight/Document/DocumentConvention.cs @@ -162,9 +162,9 @@ public static string DefaultTypeTagName(Type t) if(t.IsGenericType) { var name = t.GetGenericTypeDefinition().Name; - if(name.Contains("`")) + if(name.Contains('`')) { - name = name.Substring(0, name.IndexOf("`")); + name = name.Substring(0, name.IndexOf('`')); } var sb = new StringBuilder(Inflector.Pluralize(name)); foreach (var argument in t.GetGenericArguments()) diff --git a/Raven.Client.Silverlight/Connection/Async/AsyncServerClient.cs b/Raven.Client.Silverlight/Connection/Async/AsyncServerClient.cs index 99f2e1417c81..93422440f47d 100644 --- a/Raven.Client.Silverlight/Connection/Async/AsyncServerClient.cs +++ b/Raven.Client.Silverlight/Connection/Async/AsyncServerClient.cs @@ -85,7 +85,7 @@ public HttpJsonRequest CreateRequest(string relativeUrl, string method) public IAsyncDatabaseCommands ForDatabase(string database) { var databaseUrl = url; - var indexOfDatabases = databaseUrl.IndexOf("/databases/"); + var indexOfDatabases = databaseUrl.IndexOf("/databases/", StringComparison.Ordinal); if (indexOfDatabases != -1) databaseUrl = databaseUrl.Substring(0, indexOfDatabases); if (databaseUrl.EndsWith("/") == false) @@ -112,7 +112,7 @@ public IAsyncDatabaseCommands With(ICredentials credentialsForSession) /// public IAsyncDatabaseCommands GetRootDatabase() { - var indexOfDatabases = url.IndexOf("/databases/"); + var indexOfDatabases = url.IndexOf("/databases/", StringComparison.Ordinal); if (indexOfDatabases == -1) return this; diff --git a/Raven.Database/Linq/AbstractViewGenerator.cs b/Raven.Database/Linq/AbstractViewGenerator.cs index 068ec0194416..a9b22479bc77 100644 --- a/Raven.Database/Linq/AbstractViewGenerator.cs +++ b/Raven.Database/Linq/AbstractViewGenerator.cs @@ -73,7 +73,7 @@ public bool HasWhereClause { if(hasWhereClause == null) { - hasWhereClause = ViewText.IndexOf("where", StringComparison.InvariantCultureIgnoreCase) > -1; + hasWhereClause = ViewText.IndexOf("where", StringComparison.OrdinalIgnoreCase) > -1; } return hasWhereClause.Value; } diff --git a/Raven.Database/Server/HttpServer.cs b/Raven.Database/Server/HttpServer.cs index c329b00da2d8..ae8e587dbef5 100644 --- a/Raven.Database/Server/HttpServer.cs +++ b/Raven.Database/Server/HttpServer.cs @@ -605,12 +605,12 @@ private static void AddHttpCompressionIfClientCanAcceptIt(IHttpContext ctx) // gzip must be first, because chrome has an issue accepting deflate data // when sending it json text - if ((acceptEncoding.IndexOf("gzip", StringComparison.InvariantCultureIgnoreCase) != -1)) + if ((acceptEncoding.IndexOf("gzip", StringComparison.OrdinalIgnoreCase) != -1)) { ctx.SetResponseFilter(s => new GZipStream(s, CompressionMode.Compress, true)); ctx.Response.AddHeader("Content-Encoding", "gzip"); } - else if (acceptEncoding.IndexOf("deflate", StringComparison.InvariantCultureIgnoreCase) != -1) + else if (acceptEncoding.IndexOf("deflate", StringComparison.OrdinalIgnoreCase) != -1) { ctx.SetResponseFilter(s => new DeflateStream(s, CompressionMode.Compress, true)); ctx.Response.AddHeader("Content-Encoding", "deflate"); diff --git a/Raven.Database/Storage/IndexDefinitionStorage.cs b/Raven.Database/Storage/IndexDefinitionStorage.cs index d04d06733268..4b6a67fb5210 100644 --- a/Raven.Database/Storage/IndexDefinitionStorage.cs +++ b/Raven.Database/Storage/IndexDefinitionStorage.cs @@ -239,7 +239,7 @@ public static void ResolveAnalyzers(IndexDefinition indexDefinition) { // Stick Lucene.Net's namespace to all analyzer aliases that are missing a namespace var analyzerNames = (from analyzer in indexDefinition.Analyzers - where analyzer.Value.IndexOf(".") == -1 + where analyzer.Value.IndexOf('.') == -1 select analyzer).ToArray(); // Only do this for analyzer that actually exist; we do this here to be able to throw a correct error later on diff --git a/Raven.Studio/Features/Query/ExecuteQueryCommand.cs b/Raven.Studio/Features/Query/ExecuteQueryCommand.cs index e2d58bbdf4c8..d41de3b06d7d 100644 --- a/Raven.Studio/Features/Query/ExecuteQueryCommand.cs +++ b/Raven.Studio/Features/Query/ExecuteQueryCommand.cs @@ -30,7 +30,7 @@ public ExecuteQueryCommand(QueryModel model, IAsyncDatabaseCommands databaseComm this.databaseCommands = databaseCommands; } - public override void Execute(object parameter) + public override void Execute(object _) { query = model.Query.Value; ClearRecentQuery(); @@ -101,7 +101,8 @@ private void SuggestResults() foreach (var fieldAndTerm in QueryEditor.GetCurrentFieldsAndTerms(model.Query.Value)) { databaseCommands.SuggestAsync(model.IndexName, new SuggestionQuery {Field = fieldAndTerm.Field, Term = fieldAndTerm.Term, MaxSuggestions = 10}) - .ContinueOnSuccessInTheUIThread(result => model.Suggestions.AddRange(result.Suggestions.Select(term => new FieldAndTerm(fieldAndTerm.Field, term)))); + .ContinueOnSuccessInTheUIThread(result => model.Suggestions.AddRange( + result.Suggestions.Select(term => new FieldAndTerm(fieldAndTerm.Field, fieldAndTerm.Term){SuggestedTerm = term}))); } } } diff --git a/Raven.Studio/Features/Query/FieldAndTerm.cs b/Raven.Studio/Features/Query/FieldAndTerm.cs index b09f387a7dbd..600a24aa9950 100644 --- a/Raven.Studio/Features/Query/FieldAndTerm.cs +++ b/Raven.Studio/Features/Query/FieldAndTerm.cs @@ -10,5 +10,6 @@ public FieldAndTerm(string field, string term) public string Field { get; set; } public string Term { get; set; } + public string SuggestedTerm { get; set; } } } \ No newline at end of file diff --git a/Raven.Studio/Features/Query/QueryView.xaml b/Raven.Studio/Features/Query/QueryView.xaml index 170cae6c0763..f0ba123b4837 100644 --- a/Raven.Studio/Features/Query/QueryView.xaml +++ b/Raven.Studio/Features/Query/QueryView.xaml @@ -194,16 +194,14 @@ - - + + - + diff --git a/Raven.Studio/Models/HomeModel.cs b/Raven.Studio/Models/HomeModel.cs index d130c48dcfb5..06acf30c1a17 100644 --- a/Raven.Studio/Models/HomeModel.cs +++ b/Raven.Studio/Models/HomeModel.cs @@ -84,7 +84,21 @@ public CreateSampleDataCommand(HomeModel model, IAsyncDatabaseCommands databaseC public override void Execute(object parameter) { - + var enumerator = CreateSampleData().GetEnumerator(); + if (enumerator.MoveNext() == false) + return; + ProcessTasks(enumerator); + } + + private static Task ProcessTasks(IEnumerator enumerator) + { + return enumerator.Current.ContinueWith(task => + { + task.Wait();//would throw on error + if (enumerator.MoveNext() == false) + return task; + return ProcessTasks(enumerator); + }).Unwrap(); } private IEnumerable CreateSampleData() @@ -105,26 +119,26 @@ private IEnumerable CreateSampleData() var ravenJObject = index.Value("definition"); var putDoc = databaseCommands .PutIndexAsync(indexName, - ravenJObject.JsonDeserialization(), - true); + ravenJObject.JsonDeserialization(), + true); yield return putDoc; } var batch = databaseCommands.BatchAsync( musicStoreData.Value("Docs").OfType().Select( doc => - { - var metadata = doc.Value("@metadata"); - doc.Remove("@metadata"); - return new PutCommandData - { - Document = doc, - Metadata = metadata, - Key = metadata.Value("@id"), - }; - }).ToArray() + { + var metadata = doc.Value("@metadata"); + doc.Remove("@metadata"); + return new PutCommandData + { + Document = doc, + Metadata = metadata, + Key = metadata.Value("@id"), + }; + }).ToArray() ); - + yield return batch; model.IsGeneratingSampleData = false; @@ -132,7 +146,7 @@ private IEnumerable CreateSampleData() } } -#endregion + #endregion } } \ No newline at end of file diff --git a/Raven.Studio/Models/QueryModel.cs b/Raven.Studio/Models/QueryModel.cs index 7c4c26642680..cf0a2bfe225e 100644 --- a/Raven.Studio/Models/QueryModel.cs +++ b/Raven.Studio/Models/QueryModel.cs @@ -273,5 +273,32 @@ public string ViewTitle } public BindableCollection Suggestions { get; private set; } + public ICommand RepairTermInQuery + { + get { return new RepairTermInQueryCommand(this); } + } + + private class RepairTermInQueryCommand : Command + { + private readonly QueryModel model; + private FieldAndTerm fieldAndTerm; + + public RepairTermInQueryCommand(QueryModel model) + { + this.model = model; + } + + public override bool CanExecute(object parameter) + { + fieldAndTerm = parameter as FieldAndTerm; + return fieldAndTerm != null; + } + + public override void Execute(object parameter) + { + model.Query.Value = model.Query.Value.Replace(fieldAndTerm.Term, fieldAndTerm.SuggestedTerm); + model.Execute.Execute(null); + } + } } } \ No newline at end of file diff --git a/Raven.Tests/IndexQueryUrl.cs b/Raven.Tests/IndexQueryUrl.cs index 4359b65f0da1..61fbd7cb2d97 100644 --- a/Raven.Tests/IndexQueryUrl.cs +++ b/Raven.Tests/IndexQueryUrl.cs @@ -150,7 +150,7 @@ private static IndexQuery EncodeAndDecodeIndexQuery(IndexQuery query) // indexQueryUrl is in the form "/path?querystring#anchor" - string indexQueryQuerystring = indexQueryUrl.Substring(indexQueryUrl.IndexOf("?")+1); + string indexQueryQuerystring = indexQueryUrl.Substring(indexQueryUrl.IndexOf('?') + 1); int indexOfPoint = indexQueryQuerystring.IndexOf('#'); if (indexOfPoint != -1)