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); }
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); }
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() ) ; }