Пример #1
0
        protected virtual string CompileBasicStringCondition(SqlResult ctx, BasicStringCondition x)
        {
            var column = Wrap(x.Column);

            var value = Resolve(ctx, x.Value) as string;

            if (value == null)
            {
                throw new ArgumentException("Expecting a non nullable string");
            }

            var method = x.Operator;

            if (new[] { "starts", "ends", "contains", "like" }.Contains(x.Operator))
            {
                method = "LIKE";

                switch (x.Operator)
                {
                case "starts":
                    value = $"{value}%";
                    break;

                case "ends":
                    value = $"%{value}";
                    break;

                case "contains":
                    value = $"%{value}%";
                    break;
                }
            }

            string sql;


            if (!x.CaseSensitive)
            {
                column = CompileLower(column);
                value  = value.ToLowerInvariant();
            }

            if (x.Value is UnsafeLiteral)
            {
                sql = $"{column} {checkOperator(method)} {value}";
            }
            else
            {
                sql = $"{column} {checkOperator(method)} {Parameter(ctx, value)}";
            }

            if (!string.IsNullOrEmpty(x.EscapeCharacter))
            {
                sql = $"{sql} ESCAPE '{x.EscapeCharacter}'";
            }

            return(x.IsNot ? $"NOT ({sql})" : sql);
        }
Пример #2
0
        protected virtual string CompileBasicStringCondition(SqlResult ctx, BasicStringCondition x)
        {
            var column = Wrap(x.Column);

            var value = x.Value as string;

            if (value == null)
            {
                throw new ArgumentException("The value should be a non null value of type string");
            }

            if (!x.CaseSensitive)
            {
                x.Value = value.ToLower();
                column  = CompileLower(column);
            }

            var method = x.Operator;

            if (new[] { "starts", "ends", "contains", "like" }.Contains(x.Operator))
            {
                method = "LIKE";

                if (x.Operator == "starts")
                {
                    x.Value = x.Value + "%";
                }
                else if (x.Operator == "ends")
                {
                    x.Value = "%" + x.Value;
                }
                else if (x.Operator == "contains")
                {
                    x.Value = "%" + x.Value + "%";
                }
                else
                {
                    x.Value = x.Value;
                }
            }

            var sql = column + " " + method + " " + Parameter(ctx, x.Value);

            if (x.IsNot)
            {
                return($"NOT ({sql})");
            }

            return(sql);
        }
Пример #3
0
        private static void AppendSearchCondition(BasicStringCondition x, ref string value, ref string method)
        {
            method = "LIKE";

            if (x.Operator == "starts")
            {
                value = $"{value}%";
            }
            else if (x.Operator == "ends")
            {
                value = $"%{value}";
            }
            else if (x.Operator == "contains")
            {
                value = $"%{value}%";
            }
        }
Пример #4
0
        protected virtual string CompileBasicStringCondition(BasicStringCondition x)
        {
            var column = Wrap(x.Column);

            if (!x.CaseSensitive)
            {
                x.Value = x.Value.ToLower();
                column  = CompileLower(column);
            }

            var method = x.Operator;

            if (new[] { "starts", "ends", "contains", "like" }.Contains(x.Operator))
            {
                method = "LIKE";

                if (x.Operator == "starts")
                {
                    x.Value = x.Value + "%";
                }
                else if (x.Operator == "ends")
                {
                    x.Value = "%" + x.Value;
                }
                else if (x.Operator == "contains")
                {
                    x.Value = "%" + x.Value + "%";
                }
                else
                {
                    x.Value = x.Value;
                }
            }

            var sql = column + " " + method + " " + Parameter(x.Value);

            if (x.IsNot)
            {
                return($"NOT ({sql})");
            }

            return(sql);
        }
Пример #5
0
        private string BuildSQLQuery(SqlResult context, BasicStringCondition x, ref string value, ref string column, string method)
        {
            string sql;

            if (!x.CaseSensitive)
            {
                column = CompileLower(column);
                value  = value.ToLowerInvariant();
            }

            if (x.Value is UnsafeLiteral)
            {
                sql = $"{column} {checkOperator(method)} {value}";
            }
            else
            {
                sql = $"{column} {checkOperator(method)} {Parameter(context, value)}";
            }

            return(sql);
        }
Пример #6
0
        protected virtual string CompileBasicStringCondition(SqlResult context, BasicStringCondition x)
        {
            if (!(Resolve(context, x.Value) is string value))
            {
                throw new ArgumentException("Expecting a non nullable string");
            }

            string[] basicStringConditions = new[] { "starts", "ends", "contains", "like" };
            string   column = wrapper.Wrap(x.Column);
            string   method = x.Operator;

            if (basicStringConditions.Contains(x.Operator))
            {
                AppendSearchCondition(x, ref value, ref method);
            }

            string sql;

            sql = BuildSQLQuery(context, x, ref value, ref column, method);

            return(x.IsNot ? $"NOT ({sql})" : sql);
        }