Exemple #1
0
        protected virtual Expression VisitMemberAccess(MemberExpression m, StringBuilder sb, QueryParameter data = null)
        {
            if (m.Expression == null)
            {
                this.VisitConstant(Expression.Constant(Expression.Lambda(m).Compile().DynamicInvoke(null)), sb, data);
                return(m);
            }

            switch (m.Expression.NodeType)
            {
            case ExpressionType.Parameter:
                sb.Append(DataMapper.EscapeName(DataMapper.GetColumnName(typeof(T), m.Member.Name)));
                break;

            case ExpressionType.Constant:
                if (m.Member.MemberType == MemberTypes.Field)
                {
                    AddParameter(sb, m.Member.Name, ((FieldInfo)m.Member).GetValue(((ConstantExpression)m.Expression).Value), ((FieldInfo)m.Member).FieldType, data);
                }
                else
                {
                    AddParameter(sb, m.Member.Name, ((PropertyInfo)m.Member).GetValue(((ConstantExpression)m.Expression).Value), ((PropertyInfo)m.Member).PropertyType, data);
                }
                break;

            case ExpressionType.MemberAccess:
                this.VisitConstant(Expression.Constant(Expression.Lambda(m).Compile().DynamicInvoke(null)), sb, data);
                break;

            default:
                throw new NotSupportedException(string.Format("The member '{0}' is not supported", m.Member.Name));
            }
            return(m);
        }
Exemple #2
0
        public void GenerateUpdateExpression()
        {
            StringBuilder columnStr = new StringBuilder();
            StringBuilder whereStr  = new StringBuilder();

            int i = 0;

            foreach (ColumnMapping column in Columns)
            {
                if (column.IsPk || column.IsPartitionKey)
                {
                    if (whereStr.Length > 0)
                    {
                        whereStr.Append(" AND ");
                    }

                    whereStr.Append(String.Format("{0} = {1}", DataMapper.EscapeName(column.ColumnName), DataMapper.ParamName(i++)));
                }
                else
                {
                    columnStr.Append(String.Format("{0} = {1},", DataMapper.EscapeName(column.ColumnName), DataMapper.ParamName(i++)));
                }
            }

            this.UpdateExpression = String.Format("UPDATE {0} SET {1} WHERE {2};", DataMapper.EscapeName(this.TableName),
                                                  columnStr.ToString().TrimEnd(new char[] { ',' }), whereStr.ToString());
        }
Exemple #3
0
        public QueryBuilder <T> OrderBy <TKey>(Expression <Func <T, TKey> > keySelector)
        {
            if (this.OrderByStr.Length > 0)
            {
                this.OrderByStr.Append(", ");
            }

            this.OrderByStr.Append(DataMapper.EscapeName(DataMapper.GetColumnName(typeof(T), ((MemberExpression)keySelector.Body).Member.Name)));
            return(this);
        }
Exemple #4
0
        public void GenerateSelectExpression()
        {
            StringBuilder columnStr = new StringBuilder();
            StringBuilder whereStr  = new StringBuilder();

            foreach (ColumnMapping column in Columns)
            {
                columnStr.Append(String.Format("{0},", DataMapper.EscapeName(column.ColumnName)));
            }

            this.SelectExpression = String.Format("SELECT {0} FROM {1}", columnStr.ToString().TrimEnd(new char[] { ',' }), DataMapper.EscapeName(this.TableName));
        }
Exemple #5
0
        public virtual QueryBuilder <T> ById(object id)
        {
            if (Mapping.Columns.Where(c => c.IsPk).Count() > 1)
            {
                throw new NotSupportedException("QueryBuilder.ById is not supported for tables with multiple PK columns.");
            }

            ColumnMapping pk = Mapping.Columns.FirstOrDefault(c => c.IsPk);

            WhereStr.Append(DataMapper.EscapeName(pk.ColumnName)).Append(" = ");
            AddParameter(WhereStr, "pk", id, id.GetType());

            return(this);
        }
Exemple #6
0
        public virtual QueryBuilder <T> Update(string propertyName, object value)
        {
            this.isUpdate = true;

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

            this.UpdateStr.Append(String.Format("{0} = ", DataMapper.EscapeName(DataMapper.GetColumnName(typeof(T), propertyName))));

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

            return(this);
        }
Exemple #7
0
        public virtual QueryBuilder <T> Update <TKey>(string propertyName, Expression <Func <T, TKey> > expr)
        {
            this.isUpdate = true;

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

            this.UpdateStr.Append(String.Format("{0} = ", DataMapper.EscapeName(DataMapper.GetColumnName(typeof(T), propertyName))));

            this.Visit(expr, this.UpdateStr);

            return(this);
        }
Exemple #8
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);
        }
Exemple #9
0
        public void GenerateDeleteExpression()
        {
            StringBuilder whereStr = new StringBuilder();

            int i = 0;

            foreach (ColumnMapping column in Columns.Where(c => c.IsPk))
            {
                if (whereStr.Length > 0)
                {
                    whereStr.Append(" AND ");
                }

                whereStr.Append(String.Format("{0} = {1}", DataMapper.EscapeName(column.ColumnName), DataMapper.ParamName(i++)));
            }

            this.DeleteExpression = String.Format("DELETE FROM {0} WHERE {1};", DataMapper.EscapeName(this.TableName), whereStr.ToString());
        }
Exemple #10
0
        public void GenerateGetExpression()
        {
            StringBuilder whereStr = new StringBuilder();

            int i = 0;

            foreach (ColumnMapping column in Columns)
            {
                if (column.IsPk || column.IsPartitionKey)
                {
                    if (whereStr.Length > 0)
                    {
                        whereStr.Append(" AND ");
                    }

                    whereStr.Append(String.Format("{0} = {1}", DataMapper.EscapeName(column.ColumnName), DataMapper.ParamName(column.IsPk ? String.Format("_id{0}", i++) : "ts")));
                }
            }

            this.GetExpression = String.Format("{0} WHERE {1}", this.SelectExpression, whereStr.ToString());
        }
Exemple #11
0
        public void GenerateInsertExpression()
        {
            StringBuilder columnStr = new StringBuilder();
            StringBuilder valueStr  = new StringBuilder();

            int i = 0;

            foreach (ColumnMapping column in Columns)
            {
                if (SessionFactory.Provider == DataProvider.MySql && column.IsAutoGenerated)
                {
                    continue;
                }

                columnStr.Append(String.Format("{0},", DataMapper.EscapeName(column.ColumnName)));
                valueStr.Append(String.Format("{0},", DataMapper.ParamName(i++)));
            }

            this.InsertExpression = String.Format("INSERT INTO {0} ({1}) VALUES ({2});", DataMapper.EscapeName(this.TableName),
                                                  columnStr.ToString().TrimEnd(new char[] { ',' }), valueStr.ToString().TrimEnd(new char[] { ',' }));
        }
Exemple #12
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());
        }
Exemple #13
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)));
 }