Beispiel #1
0
        bool CompareExpressions(SelectQuery.Predicate.ExprExpr expr1, SelectQuery.Predicate.ExprExpr expr2)
        {
            if (expr1.Operator != expr2.Operator)
            {
                return(false);
            }

            if (expr1.ElementType != expr2.ElementType)
            {
                return(false);
            }

            switch (expr1.ElementType)
            {
            case QueryElementType.ExprExprPredicate:
            {
                return(CompareExpressions(expr1.Expr1, expr2.Expr1) == true &&
                       CompareExpressions(expr1.Expr2, expr2.Expr2) == true ||
                       CompareExpressions(expr1.Expr1, expr2.Expr2) == true &&
                       CompareExpressions(expr1.Expr2, expr2.Expr1) == true);
            }
            }

            return(false);
        }
        protected override void BuildPredicate(ISqlPredicate predicate)
        {
            var newpredicate = predicate;

            if (predicate is SelectQuery.Predicate.Like)
            {
                var p = (SelectQuery.Predicate.Like)predicate;

                var param2 = GetParm(p.Expr2 as IValueContainer, p.Expr1.SystemType);
                if (param2 != null)
                {
                    if (param2 is SqlValue && ((SqlValue)param2).Value == null)
                    {
                        if (p.IsNot)
                        {
                            newpredicate = new SelectQuery.Predicate.ExprExpr(p.Expr1, SelectQuery.Predicate.Operator.NotEqual, p.Expr2);
                        }
                        else
                        {
                            newpredicate = new SelectQuery.Predicate.ExprExpr(p.Expr1, SelectQuery.Predicate.Operator.Equal, p.Expr2);
                        }
                    }
                    else
                    {
                        newpredicate = new SelectQuery.Predicate.Like(p.Expr1, p.IsNot, param2, p.Escape);
                    }
                }
            }
            if (predicate is SelectQuery.Predicate.ExprExpr)
            {
                var p = (SelectQuery.Predicate.ExprExpr)predicate;
                if (p.Expr1 is SqlFunction && ((SqlFunction)p.Expr1).Name == "Date")
                {
                    if (p.Expr2 != null && p.Expr2 is SqlParameter)
                    {
                        var p2 = ((SqlParameter)p.Expr2);
                        p2.DataType = DataType.Date;
                    }
                }
            }

            base.BuildPredicate(newpredicate);
        }
Beispiel #3
0
        static void BuildJoin(
            ExpressionBuilder builder,
            SelectQuery.FromClause.Join join,
            IBuildContext outerKeyContext, Expression outerKeySelector,
            IBuildContext innerKeyContext, Expression innerKeySelector,
            IBuildContext countKeyContext, SelectQuery countSelect)
        {
            var predicate = builder.ConvertObjectComparison(
                ExpressionType.Equal,
                outerKeyContext, outerKeySelector,
                innerKeyContext, innerKeySelector);

            if (predicate == null)
            {
                predicate = new SelectQuery.Predicate.ExprExpr(
                    builder.ConvertToSql(outerKeyContext, outerKeySelector),
                    SelectQuery.Predicate.Operator.Equal,
                    builder.ConvertToSql(innerKeyContext, innerKeySelector));

                predicate = builder.Convert(outerKeyContext, predicate);
            }

            join.JoinedTable.Condition.Conditions.Add(new SelectQuery.Condition(false, predicate));

            predicate = builder.ConvertObjectComparison(
                ExpressionType.Equal,
                outerKeyContext, outerKeySelector,
                countKeyContext, innerKeySelector);

            if (predicate == null)
            {
                predicate = new SelectQuery.Predicate.ExprExpr(
                    builder.ConvertToSql(outerKeyContext, outerKeySelector),
                    SelectQuery.Predicate.Operator.Equal,
                    builder.ConvertToSql(countKeyContext, innerKeySelector));

                predicate = builder.Convert(outerKeyContext, predicate);
            }

            countSelect.Where.SearchCondition.Conditions.Add(new SelectQuery.Condition(false, predicate));
        }
Beispiel #4
0
		static void BuildSubQueryJoin(
			ExpressionBuilder           builder,
			IBuildContext outerKeyContext, Expression  outerKeySelector,
			Expression    innerKeySelector,
			IBuildContext subQueryKeyContext, SelectQuery subQuerySelect)
		{
			var predicate = builder.ConvertObjectComparison(
				ExpressionType.Equal,
				outerKeyContext, outerKeySelector,
				subQueryKeyContext, innerKeySelector);

			if (predicate == null)
			{
				predicate = new SelectQuery.Predicate.ExprExpr(
					builder.ConvertToSql(outerKeyContext, outerKeySelector),
					SelectQuery.Predicate.Operator.Equal,
					builder.ConvertToSql(subQueryKeyContext, innerKeySelector));

				predicate = builder.Convert(outerKeyContext, predicate);
			}

			subQuerySelect.Where.SearchCondition.Conditions.Add(new SelectQuery.Condition(false, predicate));
		}