예제 #1
0
        public bool Evaluate(object column1Value, object column2Value)
        {
            var value1 = Column1 == null ? Value1 : column1Value;
            var value2 = Column2 == null ? Value2 : column2Value;

            if (Operator == ECompare.IsIn && Value2.GetType().IsArray)
            {
                foreach (var value in (IEnumerable)Value2)
                {
                    var compare = Compare(CompareDataType, value1, value);
                    if (compare == ECompareResult.Equal)
                    {
                        return(true);
                    }
                }
                return(false);
            }

            if (Operator == ECompare.IsNull)
            {
                return(value1 == null || value1 is DBNull);
            }

            if (Operator == ECompare.IsNotNull)
            {
                return(value1 != null && !(value1 is DBNull));
            }

            var compareResult = Compare(CompareDataType, value1, value2);

            switch (Operator)
            {
            case ECompare.IsEqual:
                return(compareResult == ECompareResult.Equal);

            case ECompare.GreaterThan:
                return(compareResult == ECompareResult.Greater);

            case ECompare.GreaterThanEqual:
                return(compareResult == ECompareResult.Greater || compareResult == ECompareResult.Equal);

            case ECompare.LessThan:
                return(compareResult == ECompareResult.Less);

            case ECompare.LessThanEqual:
                return(compareResult == ECompareResult.Less || compareResult == ECompareResult.Equal);

            case ECompare.NotEqual:
                return(compareResult != ECompareResult.Equal);

            case ECompare.IsIn:
                return(compareResult == ECompareResult.Equal);

            default:
                throw new QueryException($"The {Operator} is not currently supported in the query evaluation.");
            }
        }
예제 #2
0
        /// <summary>
        ///     <para>Default call for atributtes by the Service Proxy before the methody body.</para>
        /// </summary>
        /// <param name="method">
        ///     <para>Method .</para>
        /// </param>
        /// <param name="il">
        ///     <para>Il from  assembly to override the method.</para>
        /// </param>
        /// <returns>
        ///     <para>true if can execute method</para>
        /// </returns>
        public override bool MtnBeforeExecution(MethodInfo method, ILHelper il)
        {
            const BindingFlags bindFlag =
                BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;

            var name = "MtnAfterPermission" + Guid.NewGuid();

            // for security reasons set to int.MinValue
            if (Value1 == null)
            {
                Value1 = int.MinValue;
            }
            if (Value2 == null)
            {
                Value2 = int.MinValue;
            }
            if (Value3 == null)
            {
                Value3 = int.MinValue;
            }
            if (Value4 == null)
            {
                Value4 = int.MinValue;
            }

            // create local variables
            il
            .CreateLocalVar("Mtn.IsPermitted", typeof(bool), false)
            .CreateLocalVar("Mtn.PermissionParameter1", Value1.GetType(), true)
            .CreateLocalVar("Mtn.PermissionParameter2", Value2.GetType(), true)
            .CreateLocalVar("Mtn.PermissionParameter3", Value3.GetType(), true)
            .CreateLocalVar("Mtn.PermissionParameter4", Value4.GetType(), true);

            // load Value1
            il
            .LoadVar("Mtn.PermissionParameter1")
            .LoadObject(Value1)
            .Box(Value1.GetType())
            .SetVar("Mtn.PermissionParameter1");

            // load Value2
            il
            .LoadObject(Value2)
            .Box(Value2.GetType())
            .SetVar("Mtn.PermissionParameter2");

            // load Value3
            il
            .LoadObject(Value3)
            .Box(Value3.GetType())
            .SetVar("Mtn.PermissionParameter3");

            // load Value4
            il
            .LoadObject(Value4)
            .Box(Value4.GetType())
            .SetVar("Mtn.PermissionParameter4");

            // put all variables in stack
            il
            .LoadVar("Mtn.PermissionParameter1")
            .UnboxAny(typeof(object))
            .LoadVar("Mtn.PermissionParameter2")
            .UnboxAny(typeof(object))
            .LoadVar("Mtn.PermissionParameter3")
            .UnboxAny(typeof(object))
            .LoadVar("Mtn.PermissionParameter4")
            .UnboxAny(typeof(object));

            // invoke method
            il
            .InvokeMethod(typeof(Permission), "HasPermission", bindFlag)
            .SetVar("Mtn.IsPermitted")
            .LoadVar("Mtn.IsPermitted")
            .GotoIfNotNullOrTrue(name);

            // if is invalid returns the default value
            il
            .InvokeMethod(typeof(Permission).GetProperty("UnallowedResult").GetGetMethod())
            .SetVar("Mtn.ReturnValue")
            .LoadVar("Mtn.ReturnValue")
            .GotoIfNotNullOrTrue("MtnAfterAll");

            il.MarkLabel(name);
            return(true);
        }