protected static string GetKeyName(UpdateConfig config, IDictionary <string, string> cols) { var key = config.Key; if (!string.IsNullOrEmpty(key)) { return(key); } if (cols.ContainsKey(SqlKeyWorld.Id)) { return(SqlKeyWorld.Id); } if (cols.ContainsKey(LowerId)) { return(LowerId); } var keyColumn = TableColumnQueryHandler.QueryColumns(config).FirstOrDefault(c => c.IsKey); if (keyColumn != null) { return(keyColumn.ColName); } return(string.Empty); }
protected IDictionary <string, string> GetCols(UpdateConfig config) { IDictionary <string, string> cols = new Dictionary <string, string>(); var fields = config.Fields; if (config.Fields == null) { fields = TableColumnQueryHandler.QueryColumns(config).Select(c => c.ColName).ToArray(); } foreach (var field in fields) { if (field.IndexOf(SqlKeyWorld.Split) <= 0) { cols.Add(field, field); continue; } var fArray = field.Split(SqlKeyWorld.Split); cols.Add(fArray[0], fArray[1]); } return(cols); }
private object InsertOnOneTime(UpdateContext context, UpdateConfig config, IDictionary <string, string> cols, IEnumerable <object> datas, IValueSetter valueSetter) { StringBuilder sb = new StringBuilder(); var columnInfos = TableColumnQueryHandler.QueryColumns(config).Where(c => cols.Keys.Contains(c.ColName) && DBHelper.SpecailColumn(c)).ToArray(); sb.AppendLine($"insert into {config.Table} ({string.Join(SqlKeyWorld.Split1, cols.Keys)}) values "); var len = datas.Count(); var keys = valueSetter.GetFields(datas.First()); for (var i = 0; i < len; i++) { var data = datas.ElementAt(i); context.ContentParams.ReplaceOrInsert(SqlKeyWorld.ComplexData, data); UpdateTrigger.TriggeDefaultValues(context, data, config, cols, valueSetter, keys); UpdateTrigger.TriggeValuesChecked(context, data, config, cols, ActionType.Insert, valueSetter, keys); sb.AppendLine(string.Intern("(")); var colVals = cols.Select(c => DBHelper.BuildColVal(c, valueSetter, data, columnInfos)); sb.Append(string.Join(SqlKeyWorld.Split1, colVals)); sb.Append(string.Intern(")")); if (i != len - 1) { sb.Append(SqlKeyWorld.Split1); } } config.Sql = sb.ToString(); object result = SqlExcuter.ExcuteTrann(context); foreach (var data in datas) { ExcuteSubUpdate(context, config, data); } return(result); }
private object UpdateOnOneTime(UpdateContext context, UpdateConfig config, IDictionary <string, string> cols, IEnumerable <object> datas, IValueSetter valueSetter, string key) { var columnInfos = TableColumnQueryHandler.QueryColumns(config).Where(c => cols.Keys.Contains(c.ColName) && DBHelper.SpecailColumn(c)).ToArray(); StringBuilder sb = new StringBuilder(); var len = datas.Count(); var keys = valueSetter.GetFields(datas.First()); var page = len / PerCount; if (page % PerCount != 0) { page++; } if (page == 0 && len > 0) { page = 1; } var cCount = cols.Count(); for (var p = 0; p < page; p++) { var currentIndex = p * PerCount; ICollection <object> ids = new List <object>(); IDictionary <string, StringBuilder> dictSbs = new Dictionary <string, StringBuilder>(); for (var i = currentIndex; i < currentIndex + PerCount; i++) { if (i >= len) { break; } var data = datas.ElementAt(i); context.ContentParams.ReplaceOrInsert(SqlKeyWorld.ComplexData, data); UpdateTrigger.TriggeValuesChecked(context, data, config, cols, ActionType.Update, valueSetter, keys); var id = valueSetter.GetValue(data, key); ids.Add(id); for (var c = 0; c < cCount; c++) { var col = cols.ElementAt(c); if (col.Key.Equals(key, StringComparison.OrdinalIgnoreCase)) { continue; } StringBuilder colSb; if (!dictSbs.TryGetValue(col.Key, out colSb)) { colSb = new StringBuilder(); dictSbs.Add(col.Key, colSb); } colSb.Append($" WHEN '{id}' THEN {DBHelper.BuildColVal(col, valueSetter, data, columnInfos)} "); } } if (ids.Any() == false) { break; } sb.AppendFormat(DBHelper.UpdateFormatter, config.Table); var index = 0; foreach (var colSb in dictSbs) { sb.Append(string.Concat("`", colSb.Key, "` = CASE `", key, "` ")); sb.Append(colSb.Value.ToString()); sb.Append(End); index++; if (index < cCount) { sb.Append(SqlKeyWorld.Split3); } } sb.Append($"{DBHelper.Where}{key} {SqlKeyWorld.In} ({string.Join(SqlKeyWorld.Split1, ids)});"); } config.Sql = sb.ToString(); object result = SqlExcuter.ExcuteTrann(context); foreach (var data in datas) { ExcuteSubUpdate(context, config, data); } return(result); }