Exemplo n.º 1
0
        protected virtual void AddParameter(StringBuilder sb, string name, object value, Type type, QueryParameter data = null)
        {
            // Is this an enumerable type that needs to be split into separate variables?
            bool isEnumerable = typeof(IEnumerable).IsAssignableFrom(type) && type != typeof(String);

            if (isEnumerable)
            {
                sb.Append("(");
            }

            if (isEnumerable && value != null)
            {
                // If the value is enumerable
                int i = 0;
                foreach (object val in (IEnumerable)value)
                {
                    string paramName = String.IsNullOrEmpty(name) ? DataMapper.ParamName(Parameters.Count, true) : DataMapper.ParamName(String.Format("{0}{1}", name, i));

                    if (++i > 1)
                    {
                        sb.Append(",");
                    }

                    sb.Append(paramName);
                    Parameters.Add(paramName, new QueryParameter {
                        Value = val
                    });
                }
            }
            else
            {
                if (data != null && value != null && !String.IsNullOrEmpty(data.AppendStart) && value.GetType() == typeof(String))
                {
                    value = String.Format("{0}{1}", data.AppendStart, value);
                }

                if (data != null && value != null && !String.IsNullOrEmpty(data.AppendEnd) && value.GetType() == typeof(String))
                {
                    value = String.Format("{0}{1}", value, data.AppendEnd);
                }

                string paramName = String.IsNullOrEmpty(name) ? DataMapper.ParamName(Parameters.Count, true) : DataMapper.ParamName(name);
                sb.Append(paramName);

                if (data == null)
                {
                    data = new QueryParameter {
                        Value = value
                    }
                }
                ;
                else
                {
                    data.Value = value;
                }

                Parameters.Add(paramName, data);
            }

            if (isEnumerable)
            {
                sb.Append(")");
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Replace a parameter when a compiled query is executed.
        /// </summary>
        /// <param name="number"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        protected QueryBuilder <T> ReplaceParameter(string name, object value)
        {
            if (value is IEnumerable && value.GetType() != typeof(String))
            {
                StringBuilder sb = new StringBuilder();
                int           i  = 0;
                foreach (object val in (IEnumerable)value)
                {
                    string paramName = DataMapper.ParamName(String.Format("{0}{1}", name, i++));

                    if (i > 1)
                    {
                        sb.Append(",");
                    }

                    sb.Append(paramName);

                    // Add or replace the new parameter.
                    if (Parameters.ContainsKey(paramName))
                    {
                        Parameters[paramName].Value = val;
                    }
                    else
                    {
                        Parameters.Add(paramName, new QueryParameter {
                            Value = val
                        });
                    }
                }

                string baseParamName = DataMapper.ParamName(name);

                if (Parameters.ContainsKey(baseParamName))
                {
                    // Replace the single parameter in the WHERE and UPDATE clauses with the parameter list.
                    this.WhereStr.Replace(baseParamName, sb.ToString());
                    this.UpdateStr.Replace(baseParamName, sb.ToString());

                    // Remove the single placeholder parameter.
                    Parameters.Remove(baseParamName);
                }
            }
            else
            {
                string paramName = DataMapper.ParamName(name);

                if (Parameters.ContainsKey(paramName))
                {
                    QueryParameter parameter = Parameters[paramName];

                    if (value != null && !String.IsNullOrEmpty(parameter.AppendStart) && value.GetType() == typeof(String))
                    {
                        value = String.Format("{0}{1}", parameter.AppendStart, value);
                    }

                    if (value != null && !String.IsNullOrEmpty(parameter.AppendEnd) && value.GetType() == typeof(String))
                    {
                        value = String.Format("{0}{1}", value, parameter.AppendEnd);
                    }

                    parameter.Value = value;
                }
            }

            return(this);
        }
Exemplo n.º 3
0
 public QueryBuilder()
 {
     Mapping        = DataMapper.GetTableMapping(typeof(T));
     this.SelectStr = Mapping.SelectExpression;
 }
Exemplo n.º 4
0
        public override string ToString()
        {
            StringBuilder query = new StringBuilder((this.isUpdate) ? String.Format("UPDATE {0}", DataMapper.EscapeName(this.Mapping.TableName)) : this.SelectStr);

            if (this.UpdateStr.Length > 0)
            {
                query.Append(" SET ").Append(this.UpdateStr.ToString());
            }

            if (this.WhereStr.Length > 0)
            {
                query.Append(" WHERE ").Append(this.WhereStr.ToString());
            }

            if (this.OrderByStr.Length > 0)
            {
                query.Append(" ORDER BY ").Append(this.OrderByStr.ToString());
            }

            if (this.SkipRows > 0)
            {
                query.Append(" OFFSET ").Append(this.SkipRows);
            }

            if (this.Limit > 0)
            {
                query.Append(" LIMIT ").Append(this.Limit);
            }

            return(query.ToString());
        }
Exemplo n.º 5
0
 public virtual int Count()
 {
     this.SelectStr = String.Format("SELECT COUNT(*) FROM {0}", DataMapper.EscapeName(Mapping.TableName));
     return(Convert.ToInt32(DataMapper.SelectScalar(SessionFactory.GetCurrentSession(typeof(T)), this)));
 }
Exemplo n.º 6
0
 public virtual int ExecuteNonQuery()
 {
     return(DataMapper.NonQuery(SessionFactory.GetCurrentSession(typeof(T)), this));
 }
Exemplo n.º 7
0
        public virtual QueryBuilder <T> Increment <TKey>(Expression <Func <T, TKey> > keySelector, object amount)
        {
            this.isUpdate = true;

            if (this.UpdateStr.Length > 0)
            {
                this.UpdateStr.Append(", ");
            }

            this.UpdateStr.Append(String.Format("{0} = {0} + ", DataMapper.EscapeName(DataMapper.GetColumnName(typeof(T), ((MemberExpression)keySelector.Body).Member.Name))));

            this.AddParameter(this.UpdateStr, null, amount, amount.GetType());

            return(this);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Gets the database session key for the specified entity type.
        /// </summary>
        /// <param name="entityType"></param>
        /// <returns></returns>
        internal static string GetSessionKey(Type entityType)
        {
            TableMapping mapping = DataMapper.GetTableMapping(entityType);

            return((mapping == null) ? null : mapping.Key);
        }