public void SetOrderBy(KeyValuePair <string, bool>[] columns)
        {
            if (columns == null || columns.Length == 0)
            {
                orderBy = null;
                return;
            }

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < columns.Length; ++i)
            {
                SqlQueryUtils.AppendColumnName(sb, columns[i].Key);

                if (columns[i].Value)
                {
                    sb.Append(" DESC");
                }

                if (i < columns.Length - 1)
                {
                    sb.Append(',');
                }
            }
            orderBy = sb.ToString();
        }
        public ExpressionClip Replace(string subString, string replaceString)
        {
            Check.Require(!string.IsNullOrEmpty(subString), "subString could not be null or empty!");
            Check.Require(!string.IsNullOrEmpty(replaceString), "replaceString could not be null or empty!");

            ExpressionClip expr = ExpressionFactory.CreateCloneExpression(this);
            StringBuilder  sb   = new StringBuilder();

            sb.Append("REPLACE(");
            SqlQueryUtils.AppendColumnName(sb, this.Sql);
            sb.Append(',');
            string paramName = MakeUniqueParamNameWithoutPrefixToken();

            sb.Append(paramName);
            sb.Append(',');
            string paramName2 = MakeUniqueParamNameWithoutPrefixToken();

            sb.Append(paramName2);
            sb.Append(')');

            expr.sql    = sb;
            expr.dbType = DbType.Int32;
            expr.parameters.Add(paramName, new KeyValuePair <DbType, object>(this.dbType, subString));
            expr.Parameters.Add(paramName2, new KeyValuePair <DbType, object>(this.dbType, replaceString));

            return(expr);
        }
        public DbCommand CreateSelectCommand(WhereClip where, string[] columns)
        {
            Check.Require(((object)where) != null && where.From != null, "expr and expr.From could not be null!");
            Check.Require(columns != null && columns.Length > 0, "columns could not be null or empty!");

            DbCommand cmd = fac.CreateCommand();

            cmd.CommandType = CommandType.Text;

            StringBuilder sb = new StringBuilder("SELECT ");

            for (int i = 0; i < columns.Length; ++i)
            {
                SqlQueryUtils.AppendColumnName(sb, columns[i]);

                if (i < columns.Length - 1)
                {
                    sb.Append(',');
                }
            }
            sb.Append(" FROM ");
            sb.Append(where.ToString());

            AddExpressionParameters(where, cmd);

            cmd.CommandText = SqlQueryUtils.ReplaceDatabaseTokens(sb.ToString(), leftToken, rightToken, paramPrefixToken, wildcharToken, wildsinglecharToken);
            PrepareCommand(cmd);
            return(cmd);
        }
        public static string ValidColumnName(string columnName)
        {
            Check.Require(columnName != null, "columnName could not be null!");

            StringBuilder sb = new StringBuilder();

            SqlQueryUtils.AppendColumnName(sb, columnName);
            return(sb.ToString());
        }
 protected void InitColumnExpression(string columnName, DbType type)
 {
     if (this.sql.Length > 0)
     {
         this.sql = new StringBuilder();
     }
     SqlQueryUtils.AppendColumnName(this.sql, columnName);
     this.DbType = type;
 }
        private static string Func(string funcName, string columnName)
        {
            Check.Require(!string.IsNullOrEmpty(funcName), "funcName could not be null or empty!");
            Check.Require(!string.IsNullOrEmpty(columnName), "columnName could not be null or empty!");

            StringBuilder sb = new StringBuilder(funcName);

            sb.Append("(");
            SqlQueryUtils.AppendColumnName(sb, columnName);
            sb.Append(')');
            return(sb.ToString());
        }
        public static string DatePart(string columnName, DatePartType partType)
        {
            Check.Require(!string.IsNullOrEmpty(columnName), "columnName could not be null or empty!");

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

            sb.Append(partType.ToString());
            sb.Append(',');
            SqlQueryUtils.AppendColumnName(sb, columnName);
            sb.Append(')');
            return(sb.ToString());
        }
        public static string Count(string columnName, bool isDistinct)
        {
            Check.Require(!string.IsNullOrEmpty(columnName), "columnName could not be null or empty!");

            StringBuilder sb = new StringBuilder();

            sb.Append("COUNT(");
            if (isDistinct)
            {
                sb.Append("DISTINCT ");
            }
            SqlQueryUtils.AppendColumnName(sb, columnName);
            sb.Append(')');
            return(sb.ToString());
        }
        //public static string SubString(string columnName, int start)
        //{
        //    Check.Require(!string.IsNullOrEmpty(columnName), "columnName could not be null or empty!");
        //    Check.Require(start >= 0, "start must >= 0!");

        //    StringBuilder sb = new StringBuilder("SUBSTRING(");
        //    SqlQueryUtils.AppendColumnName(sb, columnName);
        //    sb.Append(',');
        //    sb.Append(start + 1);
        //    sb.Append(",LEN(");
        //    SqlQueryUtils.AppendColumnName(sb, columnName);
        //    sb.Append(')');
        //    sb.Append(')');
        //    return sb.ToString();
        //}

        public static string SubString(string columnName, int start, int length)
        {
            Check.Require(!string.IsNullOrEmpty(columnName), "columnName could not be null or empty!");
            Check.Require(start >= 0, "start must >= 0!");
            Check.Require(length >= 0, "length must = 0!");

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

            SqlQueryUtils.AppendColumnName(sb, columnName);
            sb.Append(',');
            sb.Append(start + 1);
            sb.Append(',');
            sb.Append(length);
            sb.Append(')');
            return(sb.ToString());
        }
        public void SetGroupBy(string[] columns)
        {
            if (columns == null || columns.Length == 0)
            {
                groupBy = null;
                return;
            }

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < columns.Length; ++i)
            {
                SqlQueryUtils.AppendColumnName(sb, columns[i]);

                if (i < columns.Length - 1)
                {
                    sb.Append(',');
                }
            }
            groupBy = sb.ToString();
        }
        public ExpressionClip SubString(int start)
        {
            Check.Require(start >= 0, "start must >= 0!");

            ExpressionClip expr      = ExpressionFactory.CreateCloneExpression(this);
            ExpressionClip cloneExpr = ExpressionFactory.CreateCloneExpression(this);
            StringBuilder  sb        = new StringBuilder("SUBSTRING(");

            SqlQueryUtils.AppendColumnName(sb, this.Sql);
            sb.Append(',');
            sb.Append(start + 1);
            sb.Append(",LEN(");
            SqlQueryUtils.AppendColumnName(sb, cloneExpr.Sql);
            sb.Append(')');
            sb.Append(')');

            expr.sql = sb;
            SqlQueryUtils.AddParameters(expr.parameters, cloneExpr);

            return(expr);
        }