Exemple #1
0
        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();
        }
Exemple #2
0
        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();
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        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();
        }
Exemple #5
0
        /// <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));
        }
Exemple #7
0
        public void BetweenFilterTest()
        {
            var filter = new BetweenFilter <int>("filterName", 1, 10);

            Assert.AreEqual("filterName::bt(1,10)", filter.ToString());
        }