예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        public virtual string GenerateDelete(IEntityExplain entity, ParameterCollection output)
        {
            var conditions = entity.GetFieldValues(entity.GetKeys());

            if (conditions == null || conditions.Any() == false)
            {
                throw new ArgumentException("该实体对象不包含主键信息,无法执行删除命令。");
            }
            return(_stmBuilder.Delete(entity, conditions, output, SqlOptions.None));
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        public virtual string GenerateInsert(IEntityExplain entity, ParameterCollection output)
        {
            if (entity.AnySetted() == false)
            {
                return(null);
            }

            bool hasIncrement;

            return(GenerateInsert(entity, output, false, out hasIncrement));
        }
예제 #3
0
        public static string IncrementByQuery(this ISqlBuilder builder, IEntityExplain entity, string alias, SqlOptions options)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("metaInfo");
            }
            if (entity.Increment == null)
            {
                throw new ArgumentException("没有自动增长标识");
            }

            return(builder.IncrementByQuery(entity.Increment.IncrementName, alias, options));
        }
예제 #4
0
        private static string TableName(IEntityExplain entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            if (string.IsNullOrEmpty(entity.TableName))
            {
                throw new MapperException("未设置一个有效的TableName。");
            }

            return(entity.TableName);
        }
예제 #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="output"></param>
        /// <returns></returns>
        public virtual string GenerateUpdate(IEntityExplain entity, ParameterCollection output)
        {
            if (entity.AnySetted() == false)
            {
                return(null);
            }

            var fields     = entity.GetSettedFields();
            var conditions = entity.GetFieldValues(entity.GetKeys());

            if (conditions == null || conditions.Any() == false)
            {
                throw new ArgumentException("实体对象缺少主键值。");
            }
            var values = entity.GetFieldValues(fields.Where(x => entity.IsKey(x) == false));

            return(_stmBuilder.Update(entity, values, conditions, output, SqlOptions.None));
        }
예제 #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="output"></param>
        /// <param name="includeIncrement"></param>
        /// <param name="incrementFieldName"></param>
        /// <returns></returns>
        public virtual string GenerateInsertOrUpdate(IEntityExplain entity, ParameterCollection output, bool includeIncrement, out bool hasIncrement, string incrementFieldName = null)
        {
            if (entity.AnySetted() == false)
            {
                hasIncrement = false;
                return(null);
            }
            // 有增量标识的实体对象的特殊处理
            if (entity.Increment != null)
            {
                // 实体对象如果包含主键信息,则只生成update语句,否则只生成insert语句。
                var val = entity[entity.Increment.ColumnName];
                if (val != null && val != DBNull.Value && DbValueCast.Cast <int>(val) >= entity.Increment.StartVal)
                {
                    hasIncrement = false;
                    return(GenerateUpdate(entity, output));
                }
                else
                {
                    return(GenerateInsert(entity, output, includeIncrement, out hasIncrement, incrementFieldName));
                }
            }

            var keys = entity.GetKeys();

            if (keys == null || keys.Length == 0)
            {
                throw new ArgumentException("实体对象缺少主键值。");
            }
            var conditions = entity.GetFieldValues(keys);

            if (conditions == null || conditions.Any() == false)
            {
                throw new ArgumentException("实体对象缺少主键值。");
            }

            var ifConditionSql = _stmBuilder.QueryFormat(null, _stmBuilder.BuildField(keys[0]), _stmBuilder.BuildTableName(entity.TableName), _stmBuilder.Where(conditions, output, SqlOptions.None), null, null, null, SqlOptions.None);
            var ifTrueSql      = GenerateUpdate(entity, output);
            var ifFalseSql     = GenerateInsert(entity, output, includeIncrement, out hasIncrement, incrementFieldName);

            return(_stmBuilder.IfExistsFormat(ifConditionSql, ifTrueSql, ifFalseSql, SqlOptions.None));
        }
예제 #7
0
        public static string Insert(this ISqlBuilder builder, IEntityExplain entity, IDictionary <string, object> fieldValues, ParameterCollection output, SqlOptions options)
        {
            var list = new List <ItemValue <string, string> >();

            foreach (var item in fieldValues)
            {
                if (entity.Increment != null && entity.Increment.ColumnName == item.Key)
                {
                    continue;
                }

                list.Add(new ItemValue <string, string>(item.Key, output.Append("p", item.Value, true).ParameterName));
            }
            if (entity.Increment != null)
            {
                return(builder.InsertFormat(TableName(entity), list, entity.Increment.ColumnName, entity.Increment.IncrementName, options));
            }
            else
            {
                return(builder.InsertFormat(TableName(entity), list, options));
            }
        }
예제 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="output"></param>
        /// <param name="includeIncrement"></param>
        /// <param name="incrementFieldName"> </param>
        /// <returns></returns>
        public virtual string GenerateInsert(IEntityExplain entity, ParameterCollection output, bool includeIncrement, out bool hasIncrement, string incrementFieldName = null)
        {
            if (entity.AnySetted() == false)
            {
                hasIncrement = false;
                return(null);
            }

            var fields = entity.GetSettedFields();
            var values = entity.GetFieldValues(fields);

            if (includeIncrement && entity.Increment != null)
            {
                var sql = new StringBuilder();
                sql.AppendLine(_stmBuilder.Insert(entity, values, output, SqlOptions.None));
                sql.AppendLine(_stmBuilder.IncrementByQuery(entity, incrementFieldName, SqlOptions.None));
                hasIncrement = true;
                return(sql.ToString());
            }
            //
            hasIncrement = false;
            return(_stmBuilder.Insert(entity, values, output, SqlOptions.None));
        }
예제 #9
0
 public static string Update(this ISqlBuilder builder, IEntityExplain entity, IDictionary <string, object> fieldValues, IDictionary <string, object> condition, ParameterCollection output, SqlOptions options)
 {
     return(builder.UpdateFormat(TableName(entity), fieldValues.Select(x => new ItemValue <string, string>(x.Key, output.Append("p", x.Value, true).ParameterName)), builder.Where(condition, output, options), options));
 }
예제 #10
0
 public static string Delete(this ISqlBuilder builder, IEntityExplain entity, IDictionary <string, object> condition, ParameterCollection output, SqlOptions options)
 {
     return(builder.DeleteFormat(TableName(entity), builder.Where(condition, output, options), options));
 }