public Task <IList <IScreen> > RunQuery(DatabaseReference databaseReference, IQueryHistoryProvider queryHistoryProvider, string query) { var result = new List <IScreen>(); if (string.IsNullOrWhiteSpace(query)) { return(Task.FromResult <IList <IScreen> >(result)); } var rawQueries = RemoveQueryComments(query) .Split(new[] { "db.", "DB." }, StringSplitOptions.RemoveEmptyEntries) .Select(q => $"db.{q.Trim()}") .ToList(); var resultCount = 0; foreach (var rawQuery in rawQueries) { resultCount++; try { var resultViewModel = IoC.Get <QueryResultViewModel>(); IList <BsonValue> results; using (resultViewModel.StartTime()) { results = databaseReference.RunCommand(rawQuery); } resultViewModel.SetResult( $"Result {resultCount}", rawQuery, new QueryResult(results, UserDefinedCultureFormat.Default)); result.Add(resultViewModel); } catch (Exception e) { var title = $"Query {resultCount} Error"; var exceptionScreen = new ExceptionScreenViewModel(title, $"Error on Query {resultCount}:\n'{rawQuery}'", e); result.Add(exceptionScreen); } } var queryHistory = new RawQueryHistory { QueryHandlerName = Name, RawQuery = query.Trim(), DatabaseLocation = databaseReference.Location, DatabaseVersion = databaseReference.DatabaseVersion, CreatedAt = DateTime.UtcNow, LastRunAt = DateTime.UtcNow, }; queryHistoryProvider.Upsert(queryHistory); return(Task.FromResult <IList <IScreen> >(result)); }
private void RunQuery(string query) { ActiveItem = null; Items.Clear(); if (string.IsNullOrWhiteSpace(query)) { return; } var rawQueries = query .Split(new[] { "db.", "DB." }, StringSplitOptions.RemoveEmptyEntries) .Select(q => $"db.{q.Trim()}") .ToList(); var resultCount = 0; foreach (var rawQuery in rawQueries) { resultCount++; try { var results = CurrentDatabase.LiteDatabase.Engine.Run(rawQuery); var resultViewModel = IoC.Get <QueryResultViewModel>(); resultViewModel.SetResult( $"Result {resultCount}", rawQuery, new QueryResult(results)); Items.Add(resultViewModel); } catch (Exception e) { var title = $"Query {resultCount} Error"; var exceptionScreen = new ExceptionScreenViewModel(title, $"Error on Query {resultCount}:\n'{rawQuery}'", e); Items.Add(exceptionScreen); } } ActiveItem = Items.FirstOrDefault(); }