예제 #1
0
        /// <summary>
        /// Validates the query sentence.
        /// </summary>
        /// <param name="sentence">The sentence.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns></returns>
        private Domain.Entities.ValidationResult ValidateQuerySentence(Query sentence, Configuration configuration)
        {
            QueryValidator validator = new QueryValidator(configuration.MatrixDimension);

            FluentValidation.Results.ValidationResult results = validator.Validate(sentence);
            return(GetValidationResultResponse(results));
        }
        public async Task <QueryResponse> Handle(SearchQuery request, CancellationToken cancellationToken)
        {
            var validator        = new QueryValidator();
            var validationResult = await validator.ValidateAsync(request);

            if (!validationResult.IsValid)
            {
                var vm = request.Adapt <ViewModel>();
                return(new ModelWithErrors <ViewModel>(vm, validationResult));
            }

            var searchResults = await _standardsAndFrameworksCache.SearchStandards(request.Search);

            return(new ViewModel()
            {
                Search = request.Search,
                SearchWasDone = true,
                Results = searchResults
                          .Select(s => new ViewModelResult()
                {
                    ApprenticeshipTitle = s.StandardName,
                    NotionalNVQLevelv2 = s.NotionalNVQLevelv2,
                    OtherBodyApprovalRequired = s.OtherBodyApprovalRequired,
                    StandardCode = s.StandardCode,
                    StandardVersion = s.Version
                })
                          .ToList()
            });
        }
예제 #3
0
        public void ValidateQuery_ShouldReturnTrue(string queryToValidate)
        {
            QueryValidator validator = new QueryValidator();
            bool           result    = validator.ValidateQuery(queryToValidate);

            Assert.True(result, $"{queryToValidate} should return true");
        }
예제 #4
0
        public void ValidateQuery_SelectSuchThat_InvalidQueries(string queryToValidate)
        {
            QueryValidator validator = new QueryValidator();
            var            result    = validator.ValidateQuery(queryToValidate);

            Assert.True(result);
        }
예제 #5
0
        public byte[] Run(byte[] file)
        {
            var reader = new JsonReader(file);
            var writer = new JsonWriter();

            if (QueryValidator.IsAggregateQuery(_query))
            {
                ProcessAggregate(ref reader, ref writer);
            }
            else
            {
                var recordsProcessed = 0;
                var limit            = _query.Limit.Match(x => x.Limit, _ => int.MaxValue);

                while (ProcessRecord(ref reader, ref writer, ref recordsProcessed))
                {
                    if (recordsProcessed >= limit)
                    {
                        break;
                    }
                }
            }

            return(writer.ToUtf8ByteArray());
        }
예제 #6
0
        public void SelectValidator_ShouldReturnTrue_WhenValidSelectWith_PlusAnd(string queryToValidate)
        {
            QueryValidator queryValidator = new QueryValidator();
            bool           result         = queryValidator.ValidateQuery(queryToValidate);

            Assert.True(result);
        }
예제 #7
0
        public void QueryValidator_ShouldHaveRules()
        {
            var queryValidator = new QueryValidator();

            queryValidator.ShouldHaveValidationErrorFor(v => v.Person, null as Person);
            queryValidator.ShouldHaveChildValidator(v => v.Person, typeof(EmployeeValidator));
        }
예제 #8
0
        public void ValidateWith_ShouldReturnTrue(string queryToValidate)
        {
            QueryValidator validator = new QueryValidator();
            bool           result    = validator.ValidateQuery(queryToValidate);

            Assert.True(result);
        }
예제 #9
0
        public void GetProducts_NullOrEmptyOrWhitespaceContent(string content)
        {
            IQueryValidator validator = new QueryValidator(new string[] { });

            var results = validator.GetProducts(content, 1);

            Assert.IsNull(results);
        }
예제 #10
0
        public void ValidateQuery_ShouldReturnTrue_WhenTheSameVariablesDefinedWithLowerAndUpperCase()
        {
            // Can we declare lower and uppercase? (Compare with how PipeTester works)
            QueryValidator validator = new QueryValidator();
            bool           result    = validator.ValidateQuery("Procedure p; While P; Select P");

            Assert.True(result);
        }
예제 #11
0
        public void GetProducts_ProductNotInProductsList()
        {
            IQueryValidator validator = new QueryValidator(new string[] { "prok", "tegj" });

            var results = validator.GetProducts("glob pish Silver", 1);

            Assert.IsNull(results);
        }
예제 #12
0
            public async Task <Response> Handle(Query request, CancellationToken cancellationToken)
            {
                var validator = new QueryValidator();
                await validator.ValidateAndThrowAsync(request, cancellationToken : cancellationToken);

                return(new Response {
                    TimeSheet = await _timeSheetService.GetTimeSheetById(request.TimeSheetId)
                });
            }
예제 #13
0
 public QueryExecuter(ISchema schema, int cacheSize)
 {
     _schema         = schema ?? throw new ArgumentNullException(nameof(schema));
     _queryValidator = new QueryValidator(schema);
     _queryCache     = new Cache <QueryInfo>(cacheSize);
     _operationCache = new Cache <OperationExecuter>(cacheSize * 10);
     _useCache       = cacheSize > 0;
     CacheSize       = cacheSize;
 }
예제 #14
0
        public void ValidateSelectBoolean_ShouldReturnFalse_WhenModifiesIsAmbiguous()
        {
            // Use of underscore must not lead to ambiguities. For example, the following query should be rejected
            // as incorrect as it is not clear if underscore refers to a statement or to a procedure
            QueryValidator validator = new QueryValidator();
            bool           result    = validator.ValidateQuery("select boolean such that Modifies (_, \"x\")");

            Assert.False(result);
        }
        public async Task <ActionResult> SuggestPlace(string text)
        {
            if (!QueryValidator.ValidatePlaceSuggestionQuery(text))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            return(Json(await _placesService.SearchAsync(text, true)));
        }
예제 #16
0
        public JsonLinesEvaluator(Query query)
        {
            var validator = new QueryValidator();

            validator.Validate(query);
            validator.ThrowIfErrors();

            _query        = query;
            _recordWriter = new JsonRecordWriter(query.From, query.Select);
        }
예제 #17
0
        public void ValidateQuery_ShouldReturnFalse_WhenNotExistingDeclarationIsUsed(string queryToValidate)
        {
            // arrange
            QueryValidator validator = new QueryValidator();
            // act
            Action act = () => validator.ValidateQuery(queryToValidate);

            // assert
            Assert.Throws <InvalidQueryException>(act);
        }
예제 #18
0
        public void ValidateQuery_ShouldReturnFalse_WhenTheSameVariablesAreDefined()
        {
            // arrange
            QueryValidator validator = new QueryValidator();
            // act
            Action act = () => validator.ValidateQuery("Procedure p; While p; Select p");

            // assert
            Assert.Throws <InvalidQueryException>(act);
        }
예제 #19
0
        public void GetProducts_ValidProducts()
        {
            IQueryValidator validator = new QueryValidator(new string[] { "glob", "Silver", "pish", "Gold" });

            var results = validator.GetProducts("glob pish Silver", 1);

            Assert.IsNotNull(results);

            IEnumerable <string> output = new[] { "glob", "pish", "Silver" };

            CollectionAssert.AreEqual(output, results);
        }
예제 #20
0
        public void TestEndDateSoonerThanBeginDateShouldReturnTrue()
        {
            var theme      = "pruebaDates";
            var begin_date = "20180907";
            var end_date   = "20180903";

            var queryValidator = new QueryValidator();

            listOfExceptions = queryValidator.ValidateData(theme, begin_date, end_date);

            Assert.IsTrue(listOfExceptions.HasWrongDatesException(), "Should have a WrongDatesException");
        }
예제 #21
0
        public void TestEmptyParametersShouldReturnTrue()
        {
            var theme      = String.Empty;
            var begin_date = String.Empty;
            var end_date   = String.Empty;

            var queryValidator = new QueryValidator();

            listOfExceptions = queryValidator.ValidateData(theme, begin_date, end_date);

            Assert.IsTrue(listOfExceptions.HasEmptyDataException(), "Should have an empty data exception");
        }
예제 #22
0
        public static string ProcessQuery(string query)
        {
            try
            {
                QueryValidator queryValidator = new QueryValidator();
                bool           isQueryValid   = queryValidator.ValidateQuery(query);
            }
            catch (Exception e)
            {
                Console.WriteLine("none");
            }

            return("OK");
        }
예제 #23
0
        public static string ProcessQuery(string query)
        {
            try
            {
                QueryValidator queryValidator = new QueryValidator();
                bool           isQueryValid   = queryValidator.ValidateQuery(query);
            }
            catch (Exception e)
            {
                //return $"#{e.Message} - {e.GetType()}";
                Console.WriteLine("none");
                //return "none";
            }

            return("OK");
        }
예제 #24
0
        public IHttpActionResult GetInternal(string systemFilter = null, string userFilter = null, string sort = null, string time = null, string offset = null, string mode = null, int page = 1, int limit = 10)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var skip = GetSkip(page + 1, limit);

            if (skip > MAXIMUM_SKIP)
            {
                return(Ok(new object[0]));
            }

            var validationResult = QueryValidator.Validate(userFilter);

            if (!validationResult.IsValid)
            {
                return(BadRequest(validationResult.Message));
            }

            if (String.IsNullOrEmpty(systemFilter))
            {
                systemFilter = GetAssociatedOrganizationsFilter(_organizationRepository, validationResult.UsesPremiumFeatures, HasOrganizationOrProjectFilter(userFilter));
            }

            var sortBy   = GetSort(sort);
            var timeInfo = GetTimeInfo(time, offset);
            var options  = new PagingOptions {
                Page = page, Limit = limit
            };
            var events = _repository.GetByFilter(systemFilter, userFilter, sortBy.Item1, sortBy.Item2, timeInfo.Field, timeInfo.UtcRange.Start, timeInfo.UtcRange.End, options);

            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.InvariantCultureIgnoreCase))
            {
                return(OkWithResourceLinks(events.Select(e => {
                    var summaryData = _formattingPluginManager.GetEventSummaryData(e);
                    return new EventSummaryModel {
                        TemplateKey = summaryData.TemplateKey,
                        Id = e.Id,
                        Date = e.Date,
                        Data = summaryData.Data
                    };
                }).ToList(), options.HasMore, page));
            }

            return(OkWithResourceLinks(events, options.HasMore && !NextPageExceedsSkipLimit(page, limit), page));
        }
예제 #25
0
        public IHttpActionResult FrequentInternal(string systemFilter = null, string userFilter = null, string time = null, string offset = null, string mode = null, int page = 1, int limit = 10)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var skip = GetSkip(page, limit);

            if (skip > MAXIMUM_SKIP)
            {
                return(Ok(new object[0]));
            }

            var validationResult = QueryValidator.Validate(userFilter);

            if (!validationResult.IsValid)
            {
                return(BadRequest(validationResult.Message));
            }

            if (String.IsNullOrEmpty(systemFilter))
            {
                systemFilter = GetAssociatedOrganizationsFilter(_organizationRepository, validationResult.UsesPremiumFeatures, HasOrganizationOrProjectFilter(userFilter));
            }

            var timeInfo = GetTimeInfo(time, offset);
            var terms    = _eventStats.GetTermsStats(timeInfo.UtcRange.Start, timeInfo.UtcRange.End, "stack_id", systemFilter, userFilter, timeInfo.Offset, GetSkip(page + 1, limit) + 1).Terms;

            if (terms.Count == 0)
            {
                return(Ok(new object[0]));
            }

            var stackIds = terms.Skip(skip).Take(limit + 1).Select(t => t.Term).ToArray();
            var stacks   = _stackRepository.GetByIds(stackIds).Select(s => s.ApplyOffset(timeInfo.Offset)).ToList();

            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.InvariantCultureIgnoreCase))
            {
                var summaries = GetStackSummaries(stacks, terms);
                return(OkWithResourceLinks(GetStackSummaries(stacks, terms).Take(limit).ToList(), summaries.Count > limit, page));
            }

            return(OkWithResourceLinks(stacks.Take(limit).ToList(), stacks.Count > limit, page));
        }
예제 #26
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "sites/state")] Query message,
            [CosmosDB(ConnectionStringSetting = "CosmosDBConnectionString")] DocumentClient client,
            ILogger log)
        {
            // Validate input
            var validationResult = new QueryValidator().Validate(message);

            if (!validationResult.IsValid)
            {
                return(new BadRequestObjectResult(validationResult.Errors.Select(e => new {
                    Field = e.PropertyName,
                    Error = e.ErrorMessage
                })));
            }

            log.LogInformation("Finding points at the requested distance.");

            //Query the database to find the parking bays
            Uri collectionUri = UriFactory.CreateDocumentCollectionUri("parkingdb", "sitesstate");
            // The distance is in meters according to https://stackoverflow.com/questions/54453190/what-units-does-st-distance-return
            var distance = message.Distance ?? 1000;
            // From http://dontcodetired.com/blog/post/Reading-Azure-Cosmos-DB-Data-In-Azure-Functions and
            // https://docs.microsoft.com/en-us/sandbox/functions-recipes/cosmos-db?tabs=csharp
            IDocumentQuery <SiteState> query = client.CreateDocumentQuery <SiteState>(collectionUri,
                                                                                      // new FeedOptions() { EnableCrossPartitionQuery = true })
                                                                                      //https://dontpaniclabs.com/blog/post/2017/09/07/getting-started-azure-cosmos-db-part-4-partition-keys/
                                                                                      //https://www.lytzen.name/2016/12/06/find-docs-with-no-partitionkey-in-azure.html
                                                                                      new FeedOptions()
            {
                PartitionKey = new PartitionKey(null)
            })                                                              //Undefined.Value) })
                                               .Where(siteState => siteState.RecordState != SiteState.EntityState.Deleted &&
                                                      siteState.Location.Distance(new Point(message.Longitude.Value, message.Latitude.Value)) < distance)
                                               .AsDocumentQuery();

            // More of the SDK https://joonasw.net/view/exploring-cosmos-db-sdk-v3

            var result = await query.ToListAsync();

            return(new OkObjectResult(result));
        }
예제 #27
0
        public IHttpActionResult GetInternal(string systemFilter, string userFilter = null, string time = null, string offset = null)
        {
            var timeInfo = GetTimeInfo(time, offset);

            var validationResult = QueryValidator.Validate(userFilter);

            if (!validationResult.IsValid)
            {
                return(BadRequest(validationResult.Message));
            }

            if (String.IsNullOrEmpty(systemFilter))
            {
                systemFilter = GetAssociatedOrganizationsFilter(_organizationRepository, validationResult.UsesPremiumFeatures, HasOrganizationOrProjectFilter(userFilter));
            }

            var result = _stats.GetOccurrenceStats(timeInfo.UtcRange.Start, timeInfo.UtcRange.End, systemFilter, userFilter, timeInfo.Offset);

            return(Ok(result));
        }
예제 #28
0
        private static void ExecuteSearchQuery(string userInput)
        {
            var queryValidator = new QueryValidator();

            try
            {
                queryValidator.Validate(userInput);
                var queryGenerator = new StudentQueryGenerator();
                PrintFoundData(StudentRepository.Find(queryGenerator.Generate(userInput)));
            }
            catch (QueryNotMatchException ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }
            catch (ParseException ex)
            {
                Console.WriteLine("The query generator is key sensitive, please use the properties listed previously.");
                Console.ReadKey();
            }
        }
예제 #29
0
        public IHttpActionResult GetInternal(string systemFilter, string userFilter = null, string sort = null, string time = null, string offset = null, string mode = null, int page = 1, int limit = 10)
        {
            page  = GetPage(page);
            limit = GetLimit(limit);
            var skip = GetSkip(page + 1, limit);

            if (skip > MAXIMUM_SKIP)
            {
                return(Ok(new object[0]));
            }

            var validationResult = QueryValidator.Validate(userFilter);

            if (!validationResult.IsValid)
            {
                return(BadRequest(validationResult.Message));
            }

            if (String.IsNullOrEmpty(systemFilter))
            {
                systemFilter = GetAssociatedOrganizationsFilter(_organizationRepository, validationResult.UsesPremiumFeatures, HasOrganizationOrProjectFilter(userFilter), "last");
            }

            var sortBy   = GetSort(sort);
            var timeInfo = GetTimeInfo(time, offset);
            var options  = new PagingOptions {
                Page = page, Limit = limit
            };
            var stacks = _repository.GetByFilter(systemFilter, userFilter, sortBy.Item1, sortBy.Item2, timeInfo.Field, timeInfo.UtcRange.Start, timeInfo.UtcRange.End, options).Select(s => s.ApplyOffset(timeInfo.Offset)).ToList();

            if (!String.IsNullOrEmpty(mode) && String.Equals(mode, "summary", StringComparison.InvariantCultureIgnoreCase))
            {
                return(OkWithResourceLinks(GetStackSummaries(stacks, timeInfo.Offset, timeInfo.UtcRange.UtcStart, timeInfo.UtcRange.UtcEnd), options.HasMore, page));
            }

            return(OkWithResourceLinks(stacks, options.HasMore && !NextPageExceedsSkipLimit(page, limit), page));
        }
예제 #30
0
        public IHttpActionResult GetById(string id, string filter = null, string time = null, string offset = null)
        {
            var model = GetModel(id);

            if (model == null)
            {
                return(NotFound());
            }

            var timeInfo         = GetTimeInfo(time, offset);
            var validationResult = QueryValidator.Validate(filter);

            if (!validationResult.IsValid)
            {
                return(BadRequest(validationResult.Message));
            }

            var systemFilter = GetAssociatedOrganizationsFilter(_organizationRepository, validationResult.UsesPremiumFeatures, HasOrganizationOrProjectFilter(filter));

            return(OkWithLinks(model,
                               GetEntityResourceLink(_repository.GetPreviousEventId(model, systemFilter, filter, timeInfo.UtcRange.Start, timeInfo.UtcRange.End), "previous"),
                               GetEntityResourceLink(_repository.GetNextEventId(model, systemFilter, filter, timeInfo.UtcRange.Start, timeInfo.UtcRange.End), "next"),
                               GetEntityResourceLink <Stack>(model.StackId, "parent")));
        }
예제 #31
0
 public QueryableFilterAttribute(QueryValidator queryValidator)
 {
     this._queryValidator = queryValidator;
 }
 public QueryableAttribute()
 {
     _queryValidator = QueryValidator.Instance;
 }