Example #1
0
        /// <summary>
        /// 将表达式翻译为相应的连接条件
        /// </summary>
        /// <param name="binary">表达式</param>
        /// <param name="relationType">关系类型</param>
        private void GetJoin(BinaryExpression binary, PredicateType predicateType, JoinRelation joinRelation)
        {
            Check.IfNullOrZero(binary);

            var leftMember  = (MemberExpression)binary.Left;
            var rightMember = (MemberExpression)binary.Right;

            //表达式左右两边都不为常量时例如 xx.Id==yy.Id
            if (binary.Left.NodeType != ExpressionType.Constant && binary.Right.NodeType != ExpressionType.Constant)
            {
                var leftAliasName  = ExtractMember(leftMember);
                var rightAliasName = ExtractMember(rightMember);

                var relationTemplate = _options.TemplateBase.CreatePredicate(predicateType, $"{rightAliasName}.{rightMember.Member.Name}", $"{leftAliasName}.{leftMember.Member.Name}");
                AssignmentPredicateType(joinRelation, relationTemplate);
            }
            else if (binary.Left.NodeType == ExpressionType.Constant) //表达式左边为常量
            {
                var rightAliasName = ExtractMember(rightMember);
                var constant       = (ConstantExpression)binary.Left;
                var value          = Boolean.TryParse(constant.Value.ToString(), out var result) ? (result ? 1 : 0).ToString() : constant.Value;
                AssignmentPredicateType(joinRelation, _options.TemplateBase.CreatePredicate(predicateType, value + "", $"{rightAliasName}.{rightMember.Member.Name}"));
            }
            else if (binary.Right.NodeType == ExpressionType.Constant) //表达式的右边为常量
            {
                var leftAliasName = ExtractMember(leftMember);
                var constant      = (ConstantExpression)binary.Right;
                var value         = Boolean.TryParse(constant.Value.ToString(), out var result) ? (result ? 1 : 0).ToString() : constant.Value;
                AssignmentPredicateType(joinRelation, _options.TemplateBase.CreatePredicate(predicateType, $"{leftAliasName}.{leftMember.Member.Name}", value + ""));
            }
        }
Example #2
0
        /// <summary>
        /// 创建谓词语句
        /// </summary>
        /// <param name="binary"></param>
        /// <param name="predicateType"></param>
        /// <param name="joinRelation"></param>
        private void CreatePredicate(BinaryExpression binary, PredicateType predicateType, JoinRelation joinRelation)
        {
            Check.IfNullOrZero(binary);
            var binaryExp = binary;

            if (joinRelation != JoinRelation.NONE)
            {
                GetJoin(binaryExp, predicateType, joinRelation);
            }
            else
            {
                _predicateTypeStack.Push(predicateType);

                //当表达式的左边和右边同时不为常量或者只有左边为常量的话,则从左到右解析表达式,否则从右到左解析表达式
                if ((binary.Left.NodeType != ExpressionType.Constant && binary.Right.NodeType != ExpressionType.Constant) || binary.Left.NodeType != ExpressionType.Constant)
                {
                    InternalProcess(binaryExp.Left, joinRelation);
                    InternalProcess(binaryExp.Right, joinRelation);
                }
                else
                {
                    InternalProcess(binaryExp.Right, joinRelation);
                    InternalProcess(binaryExp.Left, joinRelation);
                }
            }
        }
        public static int Arity(this PredicateType predType)
        {
            switch (predType)
            {
            case PredicateType.Equal:
                return(2);

            case PredicateType.GreaterThan:
                return(2);

            case PredicateType.GreaterThanOrEqual:
                return(2);

            case PredicateType.LessThan:
                return(2);

            case PredicateType.LessThanOrEqual:
                return(2);

            case PredicateType.NotEqual:
                return(2);

            case PredicateType.IsTrue:
                return(1);

            case PredicateType.IsFalse:
                return(1);

            default:
                throw AssertionHelper.Fail();
            }
        }
Example #4
0
        public static bool TextMatches(string textFilter, string textAoe, PredicateType predicateType, TextMode textMode)
        {
            if (string.IsNullOrWhiteSpace(textFilter) || string.IsNullOrWhiteSpace(textAoe))
            {
                return(false);
            }

            string caseTextFilter;
            string caseTextAoe;

            if (textMode == TextMode.CaseInsensitive)
            {
                caseTextFilter = textFilter.ToLower();
                caseTextAoe    = textAoe.ToLower();
            }
            else
            {
                caseTextFilter = textFilter;
                caseTextAoe    = textAoe;
            }

            switch (predicateType)
            {
            case PredicateType.FullMatch:
                return(string.Equals(caseTextFilter, caseTextAoe));

            case PredicateType.Contains:
                return(caseTextAoe.Contains(caseTextFilter));

            case PredicateType.AllWords:
                return(AllWords(caseTextAoe, caseTextFilter));
            }

            return(false);
        }
        public override int GetHashCode()
        {
            int hash = 1;

            if (Type.Length != 0)
            {
                hash ^= Type.GetHashCode();
            }
            hash ^= subject_.GetHashCode();
            if (PredicateType.Length != 0)
            {
                hash ^= PredicateType.GetHashCode();
            }
            if (predicateCase_ == PredicateOneofCase.Provenance)
            {
                hash ^= Provenance.GetHashCode();
            }
            if (predicateCase_ == PredicateOneofCase.SlsaProvenance)
            {
                hash ^= SlsaProvenance.GetHashCode();
            }
            hash ^= (int)predicateCase_;
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Example #6
0
 /// <summary>
 /// Constructor for all non IN list predicates.
 /// </summary>
 /// <param name="type">The predicate type.</param>
 /// <param name="column">The column to which the predicate applies.</param>
 /// <param name="lower">
 /// The lower bound serialized value if this is a Range predicate,
 /// or the equality value if this is an Equality predicate.
 /// </param>
 /// <param name="upper">The upper bound serialized value if this is a Range predicate.</param>
 public KuduPredicate(PredicateType type, ColumnSchema column, byte[]?lower, byte[]?upper)
 {
     Type   = type;
     Column = column;
     Lower  = lower;
     Upper  = upper;
 }
        /// <summary>
        /// Compare
        /// </summary>
        /// <param name="il"></param>
        /// <param name="pred"></param>
        /// <returns></returns>
        public static ILGenerator Cmp(this ILGenerator il, PredicateType pred)
        {
            switch (pred)
            {
            case PredicateType.Equal:
                return(il.Ceq());

            case PredicateType.GreaterThan:
                return(il.Cgt());

            case PredicateType.GreaterThanOrEqual:
                return(il.Cge());

            case PredicateType.LessThan:
                return(il.Clt());

            case PredicateType.LessThanOrEqual:
                return(il.Cle());

            case PredicateType.NotEqual:
                return(il.Cne());

            case PredicateType.IsFalse:
                return(il.Cfalse());

            case PredicateType.IsTrue:
                return(il.Ctrue());

            default:
                throw new ArgumentException(@"Invalid Predicate Type", "pred");
            }
        }
        public static String ToSymbol(this PredicateType predType)
        {
            switch (predType)
            {
            case PredicateType.Equal:
                return("==");

            case PredicateType.GreaterThan:
                return(">");

            case PredicateType.GreaterThanOrEqual:
                return(">=");

            case PredicateType.LessThan:
                return("<");

            case PredicateType.LessThanOrEqual:
                return("<=");

            case PredicateType.NotEqual:
                return("!=");

            case PredicateType.IsTrue:
                return("true");

            case PredicateType.IsFalse:
                return("false");

            default:
                throw new ArgumentOutOfRangeException("predType");
            }
        }
        public static OperatorType ToOperatorType(this PredicateType predType)
        {
            switch (predType)
            {
            case PredicateType.Equal:
                return(OperatorType.Equal);

            case PredicateType.GreaterThan:
                return(OperatorType.GreaterThan);

            case PredicateType.GreaterThanOrEqual:
                return(OperatorType.GreaterThanOrEqual);

            case PredicateType.LessThan:
                return(OperatorType.LessThan);

            case PredicateType.LessThanOrEqual:
                return(OperatorType.LessThanOrEqual);

            case PredicateType.NotEqual:
                return(OperatorType.NotEqual);

            default:
                throw AssertionHelper.Fail();
            }
        }
Example #10
0
 internal static BooleanComparisonType GetComparisonType(PredicateType predicateType)
 {
     if (predicateType == PredicateType.eq)
     {
         return(BooleanComparisonType.Equals);
     }
     if (predicateType == PredicateType.neq)
     {
         return(BooleanComparisonType.NotEqualToExclamation);
     }
     if (predicateType == PredicateType.lt)
     {
         return(BooleanComparisonType.LessThan);
     }
     if (predicateType == PredicateType.lte)
     {
         return(BooleanComparisonType.LessThanOrEqualTo);
     }
     if (predicateType == PredicateType.gt)
     {
         return(BooleanComparisonType.GreaterThan);
     }
     if (predicateType == PredicateType.gte)
     {
         return(BooleanComparisonType.GreaterThanOrEqualTo);
     }
     throw new Exception("Error: GetComparisonTypeFromPredicateType");
 }
Example #11
0
        public static Predicate <SYMBOL> operator~(Predicate <SYMBOL> predicate)
        {
            PredicateType type = (predicate.Type == PredicateType.In) ?
                                 PredicateType.NotIn : PredicateType.In;

            return(new Predicate <SYMBOL>(type, new Set <SYMBOL>(predicate.Set)));
        }
Example #12
0
        public static IPredicateToken Create(
            PredicateType type,
            IEntityMapper mapper,
            MethodCallExpression expression)
        {
            switch (type)
            {
            case PredicateType.Where:
                return(new WhereToken(expression, mapper));

            case PredicateType.GroupBy:
                return(new GroupByToken(expression, mapper));

            case PredicateType.OrderBy:
                return(new OrderByToken(expression, mapper));

            case PredicateType.OrderByDescending:
                return(new OrderByToken(expression, mapper, descending: true));

            case PredicateType.Take:
                return(new TakeToken(expression, mapper));

            case PredicateType.First:
                return(new FirstToken(expression, mapper));

            default:
                throw new InvalidOperationException(
                          $"Predicate {type} does not exists");
            }
        }
Example #13
0
        public static ILGenerator cmp(this ILGenerator il, PredicateType pred)
        {
            switch (pred)
            {
            case PredicateType.Equal:
                return(il.ceq());

            case PredicateType.GreaterThan:
                return(il.cgt());

            case PredicateType.GreaterThanOrEqual:
                return(il.cge());

            case PredicateType.LessThan:
                return(il.clt());

            case PredicateType.LessThanOrEqual:
                return(il.cle());

            case PredicateType.NotEqual:
                return(il.cne());

            case PredicateType.IsFalse:
                return(il.cne());

            case PredicateType.IsTrue:
                return(il.cne());

            default:
                throw AssertionHelper.Fail();
            }
        }
Example #14
0
        internal override String CreatePredicate(PredicateType predicateType, String left, String right)
        {
            Check.IfNullOrZero(predicateType);
            Check.IfNullOrZero(left);
            Check.IfNullOrZero(right);

            return(String.Format(PredicateMapper[predicateType], left, right));
        }
Example #15
0
 public Predicate(PredicateType type, params object[] values)
 {
     Values = new List <object>();
     foreach (var value in values)
     {
         Values.Add(value);
     }
     PredicateType = type;
 }
Example #16
0
 public Predicate(PredicateType type, params object[] values)
 {
     if (values != null)
     {
         Value  = values[0];
         Values = values.ToList();
     }
     PredicateType = type;
 }
 private static TypeScheme <PredicateType> Generalise(PredicateType predicateType)
 => new TypeScheme <PredicateType>(
     predicateType
     .Params
     .SelectMany(t => t.Variables())
     .Distinct()
     .ToImmutableArray(),
     predicateType
     );
Example #18
0
 public static bool parsePredicate(string url, out predicates pred, out PredicateType type) //, out Dictionary<string, byte> urlValues) {
 {
     pred = predicates.no; type = PredicateType.no;
     if (!string2Pred.TryGetValue(url, out pred))
     {
         return(false);
     }
     type = predicateTypes[pred];
     //if (type == PredicateType.UriValuesProps) urlValues = ConstMan.enumValueMap[url];
     return(true);
 }
Example #19
0
 ///<summary>
 ///Get the PredicateType based on the FilterPredicates.
 ///</summary>
 ///<returns>
 ///Return the PredicateType as symbol based on FilterPredicates.
 ///</returns>
 private string GetPredicateType(PredicateType predicate)
 {
     if (predicate == PredicateType.And || predicate == PredicateType.AndAlso)
     {
         return("&&");
     }
     else
     {
         return("||");
     }
 }
Example #20
0
 public Predicate <SYMBOL> Simplify(Predicate <SYMBOL> predicate)
 {
     if (predicate.Set.Count > (Alphabet - predicate.Set).Count)
     {
         PredicateType type = (predicate.Type == PredicateType.In) ?
                              PredicateType.NotIn : PredicateType.In;
         return(new Predicate <SYMBOL>(type, Alphabet - predicate.Set));
     }
     else
     {
         return(predicate);
     }
 }
Example #21
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="predicateType"></param>
 /// <returns></returns>
 internal static string GetPredicateMethodName(PredicateType predicateType)
 {
     return(predicateType == PredicateType.Update
         ? "UpdateWhen(...)"
         : predicateType == PredicateType.Delete ?
            "DeleteWhen(...)"
         : predicateType == PredicateType.Where ?
            "Where(...)"
         : predicateType == PredicateType.And ?
            "And(...)"
         : predicateType == PredicateType.Or ?
            "Or(...)"
         : string.Empty);
 }
Example #22
0
        private static bool IsCompatible(SqlSelectStatement result, PredicateType predicateType)
        {
            switch (predicateType)
            {
            case PredicateType.Distinct:
                return(result.Select.Top == null &&
                       result.Select.Skip == null &&
                       result.OrderBy.IsEmpty);

            case PredicateType.Filter:
                return(result.Select.IsEmpty &&
                       result.Where.IsEmpty &&
                       result.GroupBy.IsEmpty &&
                       result.Select.Top == null &&
                       result.Select.Skip == null);

            case PredicateType.GroupBy:
                return(result.Select.IsEmpty &&
                       result.GroupBy.IsEmpty &&
                       result.OrderBy.IsEmpty &&
                       result.Select.Top == null &&
                       result.Select.Skip == null &&
                       !result.Select.IsDistinct);

            case PredicateType.Limit:
            case PredicateType.Element:
                return(result.Select.Top == null);

            case PredicateType.Project:
                return(result.Select.IsEmpty &&
                       result.GroupBy.IsEmpty &&
                       !result.Select.IsDistinct);

            case PredicateType.Skip:
                return(result.Select.IsEmpty &&
                       result.Select.Skip == null &&
                       result.GroupBy.IsEmpty &&
                       result.OrderBy.IsEmpty &&
                       !result.Select.IsDistinct);

            case PredicateType.Sort:
                return(result.Select.IsEmpty &&
                       result.GroupBy.IsEmpty &&
                       result.OrderBy.IsEmpty &&
                       !result.Select.IsDistinct);

            default:
                throw new InvalidOperationException(String.Empty);
            }
        }
Example #23
0
        /// <summary>
        /// Fa il performe di un queryable tramite reflection
        /// Serve per la deserializzazione delle query sql in queryable
        /// </summary>
        /// <param name="source">query</param>
        /// <param name="property">proprietà sulla quale fare il confronto</param>
        /// <param name="predicateType">Tipo di confronto da fare</param>
        /// <param name="value">valore dell'espressione di confronto</param>
        /// <returns>La query aggiornata</returns>
        public static IQueryable Where(this IQueryable source, string property, PredicateType predicateType, object value)
        {
            var type = source.GetType();
            ParameterExpression param                   = Expression.Parameter(source.GetType(), "specificQueryable");
            Expression          sourceExpression        = Expression.Constant(source);
            Expression          propertyExpression      = Expression.Constant(property);
            Expression          predicateTypeExpression = Expression.Constant(predicateType);
            Expression          valueExpression         = Expression.Convert(Expression.Constant(value), typeof(object));
            var methodInfo = typeof(IQueryablesExtension).GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance)
                             .FirstOrDefault(mi => mi.Name == "Where" && mi.IsGenericMethod)?.MakeGenericMethod(source.ElementType);

            var methodExpression = Expression.Call(null, methodInfo, sourceExpression, propertyExpression, predicateTypeExpression, valueExpression);

            //var methodException = Expression.Call(null, "Wherea", new Type[] { source.ElementType }, sourceExpression, propertyExpression, predicateTypeExpression, valueExpression);
            return(Expression.Lambda <Func <IQueryable> >(methodExpression).Compile().Invoke());
        }
Example #24
0
        public void AddOrUpdateSingleRootPredicate(SentenceElement candidate, PredicateType type)
        {
            var existingPredicate = All.
                FindAll(x => x.PredicateType == PredicateType.Predicate || x.PredicateType == PredicateType.Phantom).
                FindAll(x => x.Id == candidate?.Id);

            if (existingPredicate.Count > 0) return;
            Log.InfoFormat($"Актуализация: добаляем новое корневое сказуемое: Id = {candidate.Id}; Text = {candidate.Text}");

            Items.Add(new List<PredicatePartHelperObject>()
            {
                new PredicatePartHelperObject(
                    candidate.GUID, candidate.Text, candidate.Id, candidate.Order, -1,
                    PredicateType.Predicate.ToString(), -1, 0, PredicatePartType.Root.ToString(), string.Empty,
                    false)
            }
            );
        }
Example #25
0
        public static string ToSQL(this PredicateType condition)
        {
            switch (condition)
            {
            case PredicateType.LessThan: return("<");

            case PredicateType.GreaterThan: return(">");

            case PredicateType.Equal: return("=");

            case PredicateType.NotEqual: return("<>");

            case PredicateType.GreaterThanEqual: return(">=");

            case PredicateType.LessThanEqual: return("<=");

            default: throw new ArgumentException(nameof(condition));
            }
        }
 /// <summary>
 /// Generate the FiletrPredicates for StronglyTyped
 /// </summary>
 /// <param name="value"></param>
 /// <param name="filterType"></param>
 /// <param name="predType"></param>
 /// <returns></returns>
 private FilterPredicate GetFilterPredicates(object value, FilterType filterType, PredicateType predType)
 {
     return(new FilterPredicate()
     {
         FilterBehavior = FilterBehavior.StronglyTyped,
         FilterType = filterType,
         FilterValue = value,
         IsCaseSensitive = false,
         PredicateType = predType
     });
 }
Example #27
0
 internal UnaryPredicate(PredicateType predicateType, TypeUsage resultType, Predicate argument)
     : base(predicateType, resultType)
 {
     _argument = argument;
 }
 /// <summary>
 /// Compare
 /// </summary>
 /// <param name="il"></param>
 /// <param name="pred"></param>
 /// <returns></returns>
 public static ILGenerator Cmp(this ILGenerator il, PredicateType pred)
 {
     switch (pred)
     {
         case PredicateType.Equal:
             return il.Ceq();
         case PredicateType.GreaterThan:
             return il.Cgt();
         case PredicateType.GreaterThanOrEqual:
             return il.Cge();
         case PredicateType.LessThan:
             return il.Clt();
         case PredicateType.LessThanOrEqual:
             return il.Cle();
         case PredicateType.NotEqual:
             return il.Cne();
         case PredicateType.IsFalse:
             return il.Cfalse();
         case PredicateType.IsTrue:
             return il.Ctrue();
         default:
             throw new ArgumentException(@"Invalid Predicate Type", "pred");
     }
 }
Example #29
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="mappingName">Dto name to create the query</param>
 /// <param name="filterValue">Value to filter</param>
 /// <param name="predicateType">Specify if the predicate is and/or/not</param>
 public QueryFilter(string mappingName, object filterValue, PredicateType predicateType)
 {
     this.mappingName   = mappingName;
     this.filterValue   = filterValue;
     this.predicateType = predicateType;
 }
 public Predicate(PredicateType predicateType, string value)
 {
     PredicateType = predicateType;
     Value = value;
 }
        /// <summary>
        /// Gets the type of the predicate.
        /// </summary>
        /// <param name="filterType">Type of the filter.</param>
        /// <returns></returns>
        internal static PredicateType GetPredicateType(String filterType)
        {
            PredicateType predicate = (PredicateType)Enum.Parse(typeof(PredicateType), filterType, true);

            return(predicate);
        }
Example #32
0
 public static ILGenerator cmp(this ILGenerator il, PredicateType pred)
 {
     switch (pred)
     {
         case PredicateType.Equal:
             return il.ceq();
         case PredicateType.GreaterThan:
             return il.cgt();
         case PredicateType.GreaterThanOrEqual:
             return il.cge();
         case PredicateType.LessThan:
             return il.clt();
         case PredicateType.LessThanOrEqual:
             return il.cle();
         case PredicateType.NotEqual:
             return il.cne();
         case PredicateType.IsFalse:
             return il.cne();
         case PredicateType.IsTrue:
             return il.cne();
         default:
             throw AssertionHelper.Fail();
     }
 }
Example #33
0
 /// <summary>
 /// 创建谓词关系
 /// </summary>
 /// <param name="predicateType">关系的类型</param>
 /// <param name="left">左语句</param>
 /// <param name="right">右语句</param>
 /// <returns></returns>
 internal abstract String CreatePredicate(PredicateType predicateType, String left, String right);
Example #34
0
 void IPredicate.AddPredicate(PredicateType predicateType, DbNode sentence)
 {
     _predicates.Add(new Predicate(this, predicateType, true, LogicalOperator.And, (ISemantic)sentence));
 }