Exemple #1
0
        public void ToSqlRuleContains()
        {
            var nombres = new[] { "rafa", "hola" };
            Expression <Func <Cliente, string[]> > selectBody = x => Sql.Record(nombres);

            var pars = new SqlExprParams(selectBody.Parameters[0], null, false, "cli", new SqlFromList.ExprStrRawSql[0], ParamMode.None, new SqlParamDic());

            var rules =
                SqlFunctions.AtomRawRule(pars)
                .Concat(
                    SqlFunctions.ExprParamsRules(pars)
                    )
                .Concat(new[] {
                DefaultRewrite.StringFormat
            })
                .Concat(SqlFunctions.stringCalls)
                .Concat(SqlFunctions.sqlCalls)
                .Concat(SqlFunctions.rawAtom)
                .ToList();

            var ret     = ApplyRules(selectBody, rules);
            var rawBody = ((MethodCallExpression)((LambdaExpression)ret).Body).Arguments[0];

            ExprEval.TryEvalExpr <string>(rawBody, out var rawStr);
            var expected = "('rafa', 'hola')";

            Assert.AreEqual(expected, rawStr);
        }
Exemple #2
0
        public void ToSqlRule3()
        {
            Expression <Func <Cliente, bool> > selectBody = x => x.Nombre.Contains("Hola");

            var pars = new SqlExprParams(selectBody.Parameters[0], null, false, "cli", new SqlFromList.ExprStrRawSql[0], ParamMode.None, new SqlParamDic());

            var rules =
                SqlFunctions.rawAtom.Concat(
                    SqlFunctions.ExprParamsRules(pars)
                    )
                .Concat(new[] {
                DefaultRewrite.StringFormat
            })
                .Concat(SqlFunctions.stringCalls)
                .Concat(SqlFunctions.AtomRawRule(pars))
                .ToList();

            var ret     = ApplyRules(selectBody, rules);
            var rawBody = ((MethodCallExpression)((LambdaExpression)ret).Body).Arguments[0];

            ExprEval.TryEvalExpr <string>(rawBody, out var rawStr);
            var expected = "(\"cli\".\"Nombre\" LIKE '%' || 'Hola' || '%')";

            Assert.AreEqual(expected, rawStr);
        }
Exemple #3
0
        public SqlRewriteVisitor(SqlExprParams pars)
        {
            var exprParamRules = SqlFunctions.ExprParamsRules(pars);

            //The order of the rule passes is important to the performance and correctness!

            rules = new List <IEnumerable <RewriteRule> >();
            //Primero quita los invokes
            rules.Add(
                new[]
            {
                DefaultRewrite.InvokeRule(exprParamRules)
            });

            rules.Add(DefaultRewrite.BooleanSimplify);

            rules.Add(
                exprParamRules
                );

            rules.Add(
                SqlFunctions.rawAtom
                .Concat(SqlFunctions.AtomInvokeParam(pars))
                .Concat(
                    new[]
            {
                SqlConst.constToSqlRule,
                DefaultRewrite.StringFormat,
                SqlFunctions.rawCallRule
            }
                    )
                .Concat(SqlOperators.eqNullRule)
                .Concat(SqlOperators.nullableRules)
                .Concat(SqlOperators.unaryRules)
                .Concat(SqlOperators.binaryRules)
                .Concat(SqlStar.starRules)
                .Concat(SqlOperators.compareTo)
                .Concat(SqlFunctions.stringCalls)
                .Concat(SqlFunctions.subqueryExprs)
                .Concat(SqlFunctions.sqlCalls)
                .Concat(SqlFunctions.AtomRawRule(pars))
                .ToList()
                )
            ;
        }
Exemple #4
0
        public void CompareToTest()
        {
            Expression <Func <Cliente, bool> > select = (cli) => cli.Nombre.CompareTo(cli.Apellido) >= 0;
            var pars = new SqlExprParams(select.Parameters[0], null, false, "cli", new SqlFromList.ExprStrRawSql[0], ParamMode.None, new SqlParamDic());


            var rules = SqlFunctions.rawAtom.Concat(
                SqlOperators.compareTo
                )
                        .Concat(
                SqlFunctions.AtomRawRule(pars)
                )
            ;

            var ret      = (LambdaExpression)ApplyRules(select, rules);
            var raw      = ExprEval.EvalExpr <string>(((MethodCallExpression)ret.Body).Arguments[0]).Value;
            var expected = "(\"cli\".\"Nombre\" >= \"cli\".\"Apellido\")";

            Assert.AreEqual(expected, raw);
        }