public void VerifyThatContainerConstructsString() { var container = new WhereQueryContainer() { Comparer = "=", Property = typeof(Thing).GetProperty("ThingType"), Value = new List <object>() { "someVal12", "someval3", 4, DateTime.UtcNow } }; var container2 = new WhereQueryContainer() { Comparer = "=", Property = typeof(Thing).GetProperty("ThingType"), Value = new List <object>() { DateTime.UtcNow } }; Console.WriteLine(container.GetSqlString()); }
/// <summary> /// Processes the request to get the correct set up for this container. /// </summary> /// <param name="request"> /// The nancy Request to process. /// </param> /// <param name="entityType"> /// The entity Type. /// </param> public void Process(Request request, Type entityType) { // process query parameters var limit = request.Query["limit"]; var page = request.Query["page"]; var order = request.Query["order"]; var desc = request.Query["desc"]; var count = request.Query["count"]; int pageNumber, limitNumber; bool countExpected; this.IsPaginated = int.TryParse(page, out pageNumber); this.IsLimited = int.TryParse(limit, out limitNumber); var isCountProvided = bool.TryParse(count, out countExpected); if (isCountProvided) { this.IsCountExpected = countExpected; } if (this.IsPaginated) { this.PageNumber = pageNumber; if (!this.IsLimited) { this.Limit = DefaultLimit; } else { this.Limit = limitNumber; } this.Offset = (this.PageNumber - 1) * this.Limit; } var primaryKey = !(Activator.CreateInstance(entityType) is IEntityObject instance) ? "Uuid" : instance.PrimaryKey; this.OrderProperty = entityType.GetProperty(primaryKey); this.IsDescending = true; if (desc != null) { // parse descending bool descBool; var canDescParse = bool.TryParse(desc.ToString(), out descBool); if (canDescParse) { this.IsDescending = descBool; } } // get the ordering property if (!string.IsNullOrEmpty(order)) { var orderString = order.ToString() as string; var overrideOrderProperty = entityType.GetProperty(orderString.ToTitleCase()); if (overrideOrderProperty != null) { this.OrderProperty = overrideOrderProperty; this.IsOrdered = true; } } // get filtering properties var map = EntityResolverMap.TypeToPropertyResolverMap[entityType]; foreach (var property in map) { var val = request.Query[property.Key]; if (val != null) { var valueString = val.ToString() as string; if (valueString == null) { continue; } var whereContainer = new WhereQueryContainer { Comparer = "=", Property = entityType.GetProperty( property.Key.ToTitleCase()) }; // split by ; var values = valueString.Split(new[] { ';' }); foreach (var value in values) { // parse the value into correct type var typeConverter = TypeDescriptor.GetConverter(property.Value); var parsedValue = typeConverter.ConvertFromString(value); whereContainer.Value.Add(parsedValue); } this.FilterList.Add(whereContainer); } } }
public void VerifyThatQueryContainersCanBeJoinedByORAND() { var template = new User(); DatabaseSession.Instance.Connector.CreateTableWithColumns(template); var user1 = new User() { Uuid = Guid.NewGuid(), Usergroup_Id = 4, Name = "Name1" }; user1.Save(); var user2 = new User() { Uuid = Guid.NewGuid(), Usergroup_Id = 5, Name = "Name2" }; user2.Save(); var whereQuery1 = new WhereQueryContainer() { Comparer = "=", Property = typeof(User).GetProperty("Name"), Value = new List <object>() { "Name1" } }; var whereQuery2 = new WhereQueryContainer() { Comparer = "=", Property = typeof(User).GetProperty("Usergroup_Id"), Value = new List <object>() { 5 } }; Assert.AreEqual(0, User.Where(new List <IWhereQueryContainer>() { whereQuery1, whereQuery2 }, true).Count); Assert.AreEqual(2, User.Where(new List <IWhereQueryContainer>() { whereQuery1, whereQuery2 }, false).Count); Assert.AreEqual(0, User.CountWhere(new List <IWhereQueryContainer>() { whereQuery1, whereQuery2 }, true)); Assert.AreEqual(2, User.CountWhere(new List <IWhereQueryContainer>() { whereQuery1, whereQuery2 }, false)); }