public void TestNearCacheTruncate() { LocalNamedCache localcache = new LocalNamedCache(); INamedCache safecache = CacheFactory.GetCache(CacheName); NearCache nearcache = new NearCache(localcache, safecache, CompositeCacheStrategyType.ListenNone); nearcache.Clear(); Hashtable ht = new Hashtable(); ht.Add("Aleks", 1); ht.Add("Ana", 2); ht.Add("Goran", 3); ht.Add("Ivan", 4); nearcache.InsertAll(ht); IFilter filter = new BetweenFilter(IdentityExtractor.Instance, 2, 10); object[] result = nearcache.GetKeys(filter); Assert.AreEqual(3, result.Length); nearcache.Truncate(); Assert.IsTrue(nearcache.IsActive); Thread.Sleep(2000); result = nearcache.GetKeys(filter); Assert.AreEqual(0, result.Length); nearcache.Release(); Assert.IsFalse(nearcache.IsActive); CacheFactory.Shutdown(); }
public void NearCacheListenNoneGetEntriesTest() { LocalNamedCache localcache = new LocalNamedCache(); INamedCache safecache = CacheFactory.GetCache(CacheName); NearCache nearcache = new NearCache(localcache, safecache, CompositeCacheStrategyType.ListenNone); nearcache.Clear(); Hashtable ht = new Hashtable(); ht.Add("Aleks", 1); ht.Add("Ana", 4); ht.Add("Goran", 3); ht.Add("Ivan", 2); nearcache.InsertAll(ht); IFilter filter = new BetweenFilter(IdentityExtractor.Instance, 2, 10); object[] result = nearcache.GetEntries(filter); Assert.AreEqual(3, result.Length); result = nearcache.GetEntries(filter, IdentityExtractor.Instance); for (int i = 0; i < result.Length; i++) { Assert.AreEqual(i + 2, ((ICacheEntry)result[i]).Value); } CacheFactory.Shutdown(); }
/// <summary> /// Generates the text for a BetweenFilter builder. /// </summary> /// <param name="item">The BetweenFilter builder to generate the text for.</param> protected internal override void VisitBetweenFilter(BetweenFilter item) { Action visitor = () => { item.Value.Accept(forSubCommand()); writer.Write(" "); if (item.Not) { writer.Write("NOT "); } writer.Write("BETWEEN "); item.LowerBound.Accept(forSubCommand()); writer.Write(" AND "); item.UpperBound.Accept(forSubCommand()); }; visitFilter(item, visitor); }
public static void BetweenFilterExporter(BetweenFilter value, JsonWriter writer) { writer.WriteObjectStart(); writer.WritePropertyName("operator"); writer.Write("between"); if (!string.IsNullOrEmpty(value.item)) { writer.WritePropertyName("item"); writer.Write(value.item); } writer.WritePropertyName("value"); writer.WriteArrayStart(); WriteValue(value.value, writer); WriteValue(value.endvalue, writer); writer.WriteArrayEnd(); writer.WriteObjectEnd(); }
/// <summary> /// Builds the actual filter SQL expression <c>[Attribute-Operand] [Operator] [Comparison-Value]</c> for the given /// attribute <paramref name="filter"/>. /// </summary> /// <param name="filter">Attribute filter instance to create the SQL expression for.</param> /// <param name="attributeOperand">Comparison attribute to be used. Depending on the cardinality of the /// to-be-filtered attribute, this will be the inline attribute alias or the attribute alias of the collection /// attribute table.</param> /// <param name="bvNamespace">Namespace used to build bind var names.</param> /// <param name="resultParts">Statement parts for the attribute filter.</param> /// <param name="resultBindVars">Bind variables for the attribute filter.</param> public static void BuildAttributeFilterExpression(IAttributeFilter filter, object attributeOperand, BindVarNamespace bvNamespace, IList <object> resultParts, IList <BindVar> resultBindVars) { Type attributeType = filter.AttributeType.AttributeType; RelationalFilter relationalFilter = filter as RelationalFilter; if (relationalFilter != null) { resultParts.Add(attributeOperand); switch (relationalFilter.Operator) { case RelationalOperator.EQ: resultParts.Add(" = "); break; case RelationalOperator.NEQ: resultParts.Add(" <> "); break; case RelationalOperator.LT: resultParts.Add(" < "); break; case RelationalOperator.LE: resultParts.Add(" <= "); break; case RelationalOperator.GT: resultParts.Add(" > "); break; case RelationalOperator.GE: resultParts.Add(" >= "); break; default: throw new NotImplementedException(string.Format( "Relational filter operator '{0}' isn't supported by the media library", relationalFilter.Operator)); } BindVar bindVar = new BindVar(bvNamespace.CreateNewBindVarName("V"), relationalFilter.FilterValue, attributeType); resultParts.Add("@" + bindVar.Name); resultBindVars.Add(bindVar); return; } LikeFilter likeFilter = filter as LikeFilter; if (likeFilter != null) { if (!likeFilter.CaseSensitive) { resultParts.Add("UPPER("); } resultParts.Add(attributeOperand); if (!likeFilter.CaseSensitive) { resultParts.Add(")"); } resultParts.Add(" LIKE "); BindVar bindVar = new BindVar(bvNamespace.CreateNewBindVarName("V"), likeFilter.Expression, attributeType); if (likeFilter.CaseSensitive) { resultParts.Add("@" + bindVar.Name); } else { resultParts.Add("UPPER(@" + bindVar.Name + ")"); } resultBindVars.Add(bindVar); if (likeFilter.EscapeChar.HasValue) { bindVar = new BindVar(bvNamespace.CreateNewBindVarName("E"), likeFilter.EscapeChar.ToString(), typeof(Char)); resultParts.Add(" ESCAPE @" + bindVar.Name); resultBindVars.Add(bindVar); } return; } BetweenFilter betweenFilter = filter as BetweenFilter; if (betweenFilter != null) { resultParts.Add(attributeOperand); resultParts.Add(" BETWEEN "); BindVar bindVar = new BindVar(bvNamespace.CreateNewBindVarName("V"), betweenFilter.Value1, attributeType); resultParts.Add("@" + bindVar.Name); resultBindVars.Add(bindVar); resultParts.Add(" AND "); bindVar = new BindVar(bvNamespace.CreateNewBindVarName("V"), betweenFilter.Value2, attributeType); resultParts.Add("@" + bindVar.Name); resultBindVars.Add(bindVar); return; } InFilter inFilter = filter as InFilter; if (inFilter != null) { if (inFilter.Values.Count == 0) { resultParts.Add("1 = 2"); // No comparison values means filter is always false return; } int clusterCount = 0; foreach (IList <object> valuesCluster in CollectionUtils.Cluster(inFilter.Values, MAX_IN_VALUES_SIZE)) { if (clusterCount > 0) { resultParts.Add(" OR "); } resultParts.Add(attributeOperand); IList <string> bindVarRefs = new List <string>(MAX_IN_VALUES_SIZE); foreach (object value in valuesCluster) { BindVar bindVar = new BindVar(bvNamespace.CreateNewBindVarName("V"), value, attributeType); bindVarRefs.Add("@" + bindVar.Name); resultBindVars.Add(bindVar); } resultParts.Add(" IN (" + StringUtils.Join(", ", bindVarRefs) + ")"); clusterCount++; } return; } throw new InvalidDataException("Filter type '{0}' isn't supported by the media library", filter.GetType().Name); }
internal static IList <MediaItem> GetMediaItemsByRecordingTime(IOwinContext context, DateTime start, DateTime end, ISet <Guid> necessaryMIATypes, ISet <Guid> optionalMIATypes) { IFilter searchFilter = new BetweenFilter(MediaAspect.ATTR_RECORDINGTIME, start, end); return(Search(context, necessaryMIATypes, optionalMIATypes, searchFilter)); }
public void BetweenFilterTest() { var filter = new BetweenFilter <int>("filterName", 1, 10); Assert.AreEqual("filterName::bt(1,10)", filter.ToString()); }