コード例 #1
1
ファイル: BinaryCriteria.cs プロジェクト: receptuna/Serenity
 public override void ToString(StringBuilder sb, IQueryWithParams query)
 {
     if (this.op == CriteriaOperator.Like ||
         this.op == CriteriaOperator.NotLike)
     {
         var valueCriteria = this.right as ValueCriteria;
         if (query.Dialect.IsCaseSensitive() &&
             !ReferenceEquals(null, valueCriteria) &&
             valueCriteria.Value is string)
         {
             sb.Append("UPPER(");
             this.left.ToString(sb, query);
             sb.Append(this.op == CriteriaOperator.Like ? ") LIKE UPPER(" : ") NOT LIKE UPPER(");
             this.right.ToString(sb, query);
             sb.Append(")");
         }
         else
         {
             this.left.ToString(sb, query);
             sb.Append(this.op == CriteriaOperator.Like ? " LIKE " : " NOT LIKE ");
             this.right.ToString(sb, query);
         }
     }
     else
     {
         this.left.ToString(sb, query);
         sb.Append(opText[(int)this.op - (int)CriteriaOperator.AND]);
         this.right.ToString(sb, query);
     }
 }
コード例 #2
0
        public string ToString(IQueryWithParams query)
        {
            var sb = new StringBuilder(256);

            ToString(sb, query);
            return(sb.ToString());
        }
コード例 #3
0
        public static string Case(this IQueryWithParams query, Action <CaseBuilder> builder)
        {
            var cb = new CaseBuilder();

            builder(cb);
            return(cb.ToString(query));
        }
コード例 #4
0
 /// <summary>
 /// Converts the criteria to string in a string builder,
 /// while adding its params to the target query.
 /// </summary>
 /// <param name="sb">The string builder.</param>
 /// <param name="query">The target query.</param>
 public override void ToString(StringBuilder sb, IQueryWithParams query)
 {
     if (this.op == CriteriaOperator.Like ||
         this.op == CriteriaOperator.NotLike)
     {
         var valueCriteria = this.right as ValueCriteria;
         if (query.Dialect.IsLikeCaseSensitive &&
             !ReferenceEquals(null, valueCriteria) &&
             valueCriteria.Value is string)
         {
             sb.Append("UPPER(");
             this.left.ToString(sb, query);
             sb.Append(this.op == CriteriaOperator.Like ? ") LIKE UPPER(" : ") NOT LIKE UPPER(");
             this.right.ToString(sb, query);
             sb.Append(")");
         }
         else
         {
             this.left.ToString(sb, query);
             sb.Append(this.op == CriteriaOperator.Like ? " LIKE " : " NOT LIKE ");
             this.right.ToString(sb, query);
         }
     }
     else
     {
         sb.Append('(');
         this.left.ToString(sb, query);
         sb.Append(opText[(int)this.op - (int)CriteriaOperator.AND]);
         this.right.ToString(sb, query);
         sb.Append(')');
     }
 }
コード例 #5
0
        private Parameter AddParam(IQueryWithParams query, object value)
        {
            var param = query.AutoParam();

            query.AddParam(param.Name, value);
            return(param);
        }
コード例 #6
0
ファイル: ValueCriteria.cs プロジェクト: mhsabur/Serenity
        public override void ToString(StringBuilder sb, IQueryWithParams query)
        {
            var enumerable = value as IEnumerable;

            if (enumerable != null && !(value is string))
            {
                int i = 0;
                sb.Append('(');
                foreach (var k in enumerable)
                {
                    var param = query.AutoParam();
                    query.AddParam(param.Name, k);
                    if (i++ > 0)
                    {
                        sb.Append(',');
                    }
                    sb.Append(param.Name);
                }
                sb.Append(')');
            }
            else
            {
                var param = query.AutoParam();
                query.AddParam(param.Name, this.value);
                sb.Append(param.Name);
            }
        }
コード例 #7
0
        public override void ToString(StringBuilder sb, IQueryWithParams query)
        {
            switch (this.op)
            {
            case CriteriaOperator.Paren:
                sb.Append('(');
                this.operand.ToString(sb, query);
                sb.Append(')');
                break;

            case CriteriaOperator.Not:
                sb.Append("NOT (");
                this.operand.ToString(sb, query);
                sb.Append(')');
                break;

            case CriteriaOperator.IsNull:
                this.operand.ToString(sb, query);
                sb.Append(" IS NULL");
                break;

            case CriteriaOperator.IsNotNull:
                this.operand.ToString(sb, query);
                sb.Append(" IS NOT NULL");
                break;

            case CriteriaOperator.Exists:
                sb.Append("EXISTS (");
                this.operand.ToString(sb, query);
                sb.Append(')');
                break;
            }
        }
コード例 #8
0
ファイル: UnaryCriteria.cs プロジェクト: votrongdao/Serenity
        public override void ToString(StringBuilder sb, IQueryWithParams query)
        {
            switch (this.op)
            {
                case CriteriaOperator.Paren:
                    sb.Append('(');
                    this.operand.ToString(sb, query);
                    sb.Append(')');
                    break;

                case CriteriaOperator.Not:
                    sb.Append("NOT (");
                    this.operand.ToString(sb, query);
                    sb.Append(')');
                    break;

                case CriteriaOperator.IsNull:
                    this.operand.ToString(sb, query);
                    sb.Append(" IS NULL");
                    break;

                case CriteriaOperator.IsNotNull:
                    this.operand.ToString(sb, query);
                    sb.Append(" IS NOT NULL");
                    break;

                case CriteriaOperator.Exists:
                    sb.Append("EXISTS (");
                    this.operand.ToString(sb, query);
                    sb.Append(')');
                    break;
            }
        }
コード例 #9
0
            public string ToString(IQueryWithParams query)
            {
                StringBuilder sb = new StringBuilder();

                sb.Append("CASE ");

                if (when.Count == 0)
                {
                    throw new InvalidOperationException("There should be at least one WHEN/THEN pair.");
                }

                if (when.Count != then.Count)
                {
                    throw new InvalidOperationException("WHEN/THEN pairs doesn't match.");
                }

                for (var i = 0; i < when.Count; i++)
                {
                    sb.Append(" WHEN ");
                    when[i].ToString(sb, query);
                    sb.Append(" THEN ");
                    var value = then[i];
                    if (value is BaseCriteria)
                    {
                        ((BaseCriteria)value).ToString(sb, query);
                    }
                    else if (value is IQueryWithParams)
                    {
                        sb.Append(((IQueryWithParams)value).ToString());
                    }
                    else
                    {
                        new ValueCriteria(value).ToString(sb, query);
                    }
                }

                if (!Object.ReferenceEquals(null, elseValue))
                {
                    sb.Append(" ELSE ");

                    if (elseValue is BaseCriteria)
                    {
                        ((BaseCriteria)elseValue).ToString(sb, query);
                    }
                    else if (elseValue is IQueryWithParams)
                    {
                        sb.Append(((IQueryWithParams)elseValue).ToString());
                    }
                    else
                    {
                        new ValueCriteria(elseValue).ToString(sb, query);
                    }
                }

                sb.Append(" END");

                return(sb.ToString());
            }
コード例 #10
0
        public override void ToString(StringBuilder sb, IQueryWithParams query)
        {
            var enumerable = value as IEnumerable;

            if (enumerable != null && !(value is string))
            {
                var c = 0;
                foreach (var k in enumerable)
                {
                    c++;
                }

                int i = 0;
                sb.Append('(');
                foreach (var k in enumerable)
                {
                    if (i++ > 0)
                    {
                        sb.Append(',');
                    }

                    if (c > 10)
                    {
                        if (k is int ||
                            k is short ||
                            k is uint ||
                            k is long ||
                            k is byte)
                        {
                            sb.Append(k.ToString());
                            continue;
                        }
                    }
                    var param = query.AutoParam();
                    query.AddParam(param.Name, k);
                    sb.Append(param.Name);
                }
                sb.Append(')');
            }
            else
            {
                var param = query.AutoParam();
                query.AddParam(param.Name, this.value);
                sb.Append(param.Name);
            }
        }
コード例 #11
0
        public override void ToString(StringBuilder sb, IQueryWithParams query)
        {
            switch (this.op)
            {
            case CriteriaOperator.Paren:
                sb.Append('(');
                this.operand.ToString(sb, query);
                sb.Append(')');
                break;

            case CriteriaOperator.Not:
                sb.Append("NOT (");
                this.operand.ToString(sb, query);
                sb.Append(')');
                break;

            case CriteriaOperator.IsNull:
                this.operand.ToString(sb, query);
                sb.Append(" IS NULL");
                break;

            case CriteriaOperator.IsNotNull:
                this.operand.ToString(sb, query);
                sb.Append(" IS NOT NULL");
                break;

            case CriteriaOperator.Exists:
                sb.Append("EXISTS ");
                var tempsb = new StringBuilder();
                this.operand.ToString(tempsb, query);
                var str = tempsb.ToString().Trim();
                if (!str.StartsWith("("))
                {
                    sb.Append("(");
                }
                sb.Append(str);
                if (!str.StartsWith("("))
                {
                    sb.Append(')');
                }
                break;
            }
        }
コード例 #12
0
        public override void ToString(StringBuilder sb, IQueryWithParams query)
        {
            var enumerable = value as IEnumerable;

            if (enumerable != null && !(value is string))
            {
                var c = 0;
                foreach (var k in enumerable)
                {
                    c++;
                }

                int i = 0;
                sb.Append('(');
                foreach (var k in enumerable)
                {
                    if (i++ > 0)
                    {
                        sb.Append(',');
                    }

                    if (c > 10)
                    {
                        if (IsIntegerType(k))
                        {
                            sb.Append(k.ToString());
                            continue;
                        }
                        else if (k is Enum)
                        {
                            sb.Append(Convert.ToInt64(k).ToString());
                            continue;
                        }
                    }
                    sb.Append(AddParam(query, k).Name);
                }
                sb.Append(')');
            }
            else
            {
                sb.Append(AddParam(query, this.value).Name);
            }
        }
コード例 #13
0
ファイル: ValueCriteria.cs プロジェクト: votrongdao/Serenity
        public override void ToString(StringBuilder sb, IQueryWithParams query)
        {
            var enumerable = value as IEnumerable;
            if (enumerable != null && !(value is string))
            {
                var c = 0;
                foreach (var k in enumerable)
                    c++;

                int i = 0;
                sb.Append('(');
                foreach (var k in enumerable)
                {
                    if (i++ > 0)
                        sb.Append(',');

                    if (c > 10)
                    {
                        if (k is int ||
                            k is short ||
                            k is uint ||
                            k is long ||
                            k is byte)
                        {
                            sb.Append(k.ToString());
                            continue;
                        }
                    }
                    var param = query.AutoParam();
                    query.AddParam(param.Name, k);
                    sb.Append(param.Name);
                }
                sb.Append(')');
            }
            else
            {
                var param = query.AutoParam();
                query.AddParam(param.Name, this.value);
                sb.Append(param.Name);
            }
        }
コード例 #14
0
        public static string Coalesce(this IQueryWithParams query, params object[] values)
        {
            if (values == null || values.Length == 0)
            {
                throw new ArgumentNullException("values");
            }

            StringBuilder sb = new StringBuilder("COALESCE(");

            for (var i = 0; i < values.Length; i++)
            {
                if (i > 0)
                {
                    sb.Append(", ");
                }

                var value = values[i];
                if (value is ICriteria)
                {
                    ((ICriteria)value).ToString(sb, query);
                }
                else if (value is IQueryWithParams)
                {
                    sb.Append(((IQueryWithParams)value).ToString());
                }
                else if (value is IField)
                {
                    sb.Append(((IField)value).Expression);
                }
                else
                {
                    var param = query.AutoParam();
                    query.AddParam(param.Name, value);
                    sb.Append(param.Name);
                }
            }

            sb.Append(")");

            return(sb.ToString());
        }
コード例 #15
0
 /// <summary>
 /// Converts the criteria to string in a string builder,
 /// while adding its params to the target query.
 /// </summary>
 /// <param name="sb">The string builder.</param>
 /// <param name="query">The target query.</param>
 public override void ToString(StringBuilder sb, IQueryWithParams query)
 {
     if (op == CriteriaOperator.Like ||
         op == CriteriaOperator.NotLike)
     {
         if (query.Dialect.IsLikeCaseSensitive &&
             right is ValueCriteria valueCriteria &&
             valueCriteria.Value is string)
         {
             sb.Append("UPPER(");
             left.ToString(sb, query);
             sb.Append(op == CriteriaOperator.Like ? ") LIKE UPPER(" : ") NOT LIKE UPPER(");
             right.ToString(sb, query);
             sb.Append(")");
         }
         else
         {
             left.ToString(sb, query);
             sb.Append(op == CriteriaOperator.Like ? " LIKE " : " NOT LIKE ");
             right.ToString(sb, query);
         }
     }
コード例 #16
0
        public override void ToString(StringBuilder sb, IQueryWithParams query)
        {
            var enumerable = value as IEnumerable;
            if (enumerable != null && !(value is string))
            {
                var c = 0;
                foreach (var k in enumerable)
                    c++;

                int i = 0;
                sb.Append('(');
                foreach (var k in enumerable)
                {
                    if (i++ > 0)
                        sb.Append(',');

                    if (c > 10)
                    {
                        if (IsIntegerType(k))
                        {
                            sb.Append(k.ToString());
                            continue;
                        }
                        else if (k is Enum)
                        {
                            sb.Append(Convert.ToInt64(k).ToString());
                            continue;
                        }
                    }
                    sb.Append(AddParam(query, k).Name);
                }
                sb.Append(')');
            }
            else
            {
                sb.Append(AddParam(query, this.value).Name);
            }
        }
コード例 #17
0
ファイル: Sql.cs プロジェクト: lalonardoni/Serenity
            /// <summary>
            /// Converts to string.
            /// </summary>
            /// <param name="query">The query.</param>
            /// <returns>
            /// A <see cref="string" /> that represents this instance.
            /// </returns>
            /// <exception cref="InvalidOperationException">
            /// There should be at least one WHEN/THEN pair.
            /// or
            /// WHEN/THEN pairs doesn't match.
            /// </exception>
            public string ToString(IQueryWithParams query)
            {
                StringBuilder sb = new StringBuilder();

                sb.Append("CASE ");

                if (when.Count == 0)
                {
                    throw new InvalidOperationException("There should be at least one WHEN/THEN pair.");
                }

                if (when.Count != then.Count)
                {
                    throw new InvalidOperationException("WHEN/THEN pairs doesn't match.");
                }

                for (var i = 0; i < when.Count; i++)
                {
                    sb.Append(" WHEN ");
                    when[i].ToString(sb, query);
                    sb.Append(" THEN ");
                    var value = then[i];
                    if (value is ICriteria crit)
                    {
                        crit.ToString(sb, query);
                    }
                    else if (value is IQueryWithParams qprm)
                    {
                        sb.Append(qprm.ToString());
                    }
                    else if (value is IField fld)
                    {
                        sb.Append(fld.Expression);
                    }
                    else
                    {
                        var param = query.AutoParam();
                        query.AddParam(param.Name, value);
                        sb.Append(param.Name);
                    }
                }

                if (elseValue is object)
                {
                    sb.Append(" ELSE ");

                    if (elseValue is ICriteria crit)
                    {
                        crit.ToString(sb, query);
                    }
                    else if (elseValue is IQueryWithParams qprm)
                    {
                        sb.Append(qprm.ToString());
                    }
                    else if (elseValue is IField fld)
                    {
                        sb.Append(fld.Expression);
                    }
                    else
                    {
                        var param = query.AutoParam();
                        query.AddParam(param.Name, elseValue);
                        sb.Append(param.Name);
                    }
                }

                sb.Append(" END");

                return(sb.ToString());
            }
コード例 #18
0
 /// <summary>
 /// Converts the criteria to string.
 /// </summary>
 /// <param name="sb">The string builder.</param>
 /// <param name="query">The query.</param>
 public override void ToString(StringBuilder sb, IQueryWithParams query)
 {
     sb.Append(name);
 }
コード例 #19
0
ファイル: Sql.cs プロジェクト: CodeFork/Serenity
            public string ToString(IQueryWithParams query)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("CASE ");

                if (when.Count == 0)
                    throw new InvalidOperationException("There should be at least one WHEN/THEN pair.");

                if (when.Count != then.Count)
                    throw new InvalidOperationException("WHEN/THEN pairs doesn't match.");

                for (var i = 0; i < when.Count; i++)
                {
                    sb.Append(" WHEN ");
                    when[i].ToString(sb, query);
                    sb.Append(" THEN ");
                    var value = then[i];
                    if (value is ICriteria)
                        ((ICriteria)value).ToString(sb, query);
                    else if (value is IQueryWithParams)
                        sb.Append(((IQueryWithParams) value).ToString());
                    else if (value is IField)
                        sb.Append(((IField) value).Expression);
                    else
                    {
                        var param = query.AutoParam();
                        query.AddParam(param.Name, value);
                        sb.Append(param.Name);
                    }
                }

                if (!Object.ReferenceEquals(null, elseValue))
                {
                    sb.Append(" ELSE ");

                    if (elseValue is ICriteria)
                        ((ICriteria)elseValue).ToString(sb, query);
                    else if (elseValue is IQueryWithParams)
                        sb.Append(((IQueryWithParams)elseValue).ToString());
                    else if (elseValue is IField)
                        sb.Append(((IField)elseValue).Expression);
                    else
                    {
                        var param = query.AutoParam();
                        query.AddParam(param.Name, elseValue);
                        sb.Append(param.Name);
                    }
                }

                sb.Append(" END");

                return sb.ToString();
            }
コード例 #20
0
ファイル: Criteria.cs プロジェクト: yuanqinghua/Serenity
 /// <summary>
 /// Converts the criteria to its string representation while
 /// adding its parameters to the target query.
 /// </summary>
 /// <param name="sb">The string builder.</param>
 /// <param name="query">The target query to add params into.</param>
 public override void ToString(StringBuilder sb, IQueryWithParams query)
 {
     sb.Append(this.expression);
 }
コード例 #21
0
ファイル: ParamCriteria.cs プロジェクト: VictorTomaili/Sanity
 public override void ToString(StringBuilder sb, IQueryWithParams query)
 {
     sb.Append(this.name);
 }
コード例 #22
0
 public virtual void ToString(StringBuilder sb, IQueryWithParams query)
 {
     throw new NotImplementedException();
 }
コード例 #23
0
 private Parameter AddParam(IQueryWithParams query, object value)
 {
     var param = query.AutoParam();
     query.AddParam(param.Name, value);
     return param;
 }