Esempio n. 1
0
        /// <summary>
        /// Converts a normalized binary expression into the appropriate ParseQuery clause.
        /// </summary>
        private static ParseQuery <T> WhereBinaryExpression <T>(
            this ParseQuery <T> source, Expression <Func <T, bool> > expression, BinaryExpression node)
            where T : ParseObject
        {
            var leftTransformed = new ObjectNormalizer().Visit(node.Left) as MethodCallExpression;

            if (leftTransformed != null && !(IsParseObjectGet(leftTransformed) &&
                                             leftTransformed.Object == expression.Parameters[0]))
            {
                throw new InvalidOperationException(
                          "Where expressions must have one side be a field operation on a ParseObject.");
            }

            if (leftTransformed != null)
            {
                var fieldPath   = GetValue(leftTransformed.Arguments[0]) as string;
                var filterValue = GetValue(node.Right);

                if (filterValue != null && !ParseEncoder.IsValidType(filterValue))
                {
                    throw new InvalidOperationException(
                              "Where clauses must use types compatible with ParseObjects.");
                }

                switch (node.NodeType)
                {
                case ExpressionType.GreaterThan:
                    return(source.WhereGreaterThan(fieldPath, filterValue));

                case ExpressionType.GreaterThanOrEqual:
                    return(source.WhereGreaterThanOrEqualTo(fieldPath, filterValue));

                case ExpressionType.LessThan:
                    return(source.WhereLessThan(fieldPath, filterValue));

                case ExpressionType.LessThanOrEqual:
                    return(source.WhereLessThanOrEqualTo(fieldPath, filterValue));

                case ExpressionType.Equal:
                    return(source.WhereEqualTo(fieldPath, filterValue));

                case ExpressionType.NotEqual:
                    return(source.WhereNotEqualTo(fieldPath, filterValue));

                default:
                    throw new InvalidOperationException(
                              "Where expressions do not support this operator.");
                }
            }

            return(null);
        }
Esempio n. 2
0
        public void TestIsValidType()
        {
            Assert.IsTrue(ParseEncoder.IsValidType(322));
            Assert.IsTrue(ParseEncoder.IsValidType(0.3f));
            Assert.IsTrue(ParseEncoder.IsValidType(new byte[] { 1, 2, 3, 4 }));
            Assert.IsTrue(ParseEncoder.IsValidType("corgi"));
            Assert.IsTrue(ParseEncoder.IsValidType(new ParseObject("Corgi")));
            Assert.IsTrue(ParseEncoder.IsValidType(new ParseACL()));
            Assert.IsTrue(ParseEncoder.IsValidType(new ParseFile("Corgi", new byte[0])));
            Assert.IsTrue(ParseEncoder.IsValidType(new ParseGeoPoint(1, 2)));
            Assert.IsTrue(ParseEncoder.IsValidType(new ParseRelation <ParseObject>(new ParseObject("Corgi"), "corgi")));
            Assert.IsTrue(ParseEncoder.IsValidType(new DateTime()));
            Assert.IsTrue(ParseEncoder.IsValidType(new List <object>()));
            Assert.IsTrue(ParseEncoder.IsValidType(new Dictionary <string, string>()));
            Assert.IsTrue(ParseEncoder.IsValidType(new Dictionary <string, object>()));

            Assert.IsFalse(ParseEncoder.IsValidType(new ParseAddOperation(new List <object>())));
            Assert.IsFalse(ParseEncoder.IsValidType(Task <ParseObject> .FromResult(new ParseObject("Corgi"))));
            Assert.Throws <MissingMethodException>(() => ParseEncoder.IsValidType(new Dictionary <object, object>()));
            Assert.Throws <MissingMethodException>(() => ParseEncoder.IsValidType(new Dictionary <object, string>()));
        }