public object Fill(ReleatedQuery config, object parent, IEnumerable <object> matchDatas, IValueSetter valueSetter) { var data = matchDatas.FirstOrDefault(); var fieldCount = config.FillFields.Count(); var dValueCount = config.DefaultValues.Count(); if (data == null) { for (var i = 0; i < fieldCount; i++) { var field = config.FillFields.ElementAt(i); if (i >= dValueCount) { break; } var val = config.DefaultValues.ElementAt(i); valueSetter.SetField(parent, val, field); } return(null); } for (var i = 0; i < fieldCount; i++) { var field = config.FillFields.ElementAt(i); var val = ValueGetter.GetValue(field, data).Data; valueSetter.SetField(parent, val, field); } return(null); }
protected override object DoQuery(Context context) { var handlerConfig = context.HandlerConfig; var queryConfigs = context.Configs; var queryParam = context.Params; IValueSetter valueSetter = handlerConfig.Create(); object outData = valueSetter.CreateInstance(); context.Data = outData; IDictionary <string, object> contentData = new ExpandoObject(); IValueSetter contentSetter = ValueSetterCreater.Create(contentData); foreach (var queryConfig in queryConfigs) { IQueryHandler queryHandler = QueryHandlerFactory.GetQueryHandler(queryConfig.QueryType); IConditionQueryHandler conditionQueryHandler = queryHandler as IConditionQueryHandler; var subContext = new Context(context) { Data = contentData, Configs = new QueryConfig[] { queryConfig } }; if (conditionQueryHandler != null) { var isContinue = conditionQueryHandler.Continue(subContext); if (isContinue == false) { if (conditionQueryHandler.WhetheStop(subContext)) { return(outData); } continue; } } context.Childs.Add(subContext); var data = queryHandler.Query(subContext); contentSetter.SetFieldByConfig(contentData, data, queryConfig); if (conditionQueryHandler != null) { var result = conditionQueryHandler.WhetheResultStop(subContext, data); if (result == true) { return(outData); } } if (queryConfig.IngoreFill == true) { continue; } valueSetter.SetField(queryConfig.Filed, data); } return(outData); }
public object Fill(ReleatedQuery config, object parent, IEnumerable <object> matchDatas, IValueSetter valueSetter) { var data = matchDatas.FirstOrDefault(); valueSetter.SetField(parent, data, config.Filed); return(data); }
public static void TriggeDefaultValues(UpdateContext updateContext, object data, UpdateConfig config, IDictionary <string, string> cols, IValueSetter valueSetter, IEnumerable <string> keys = null) { return; var valueKeys = keys.ToArray(); ICollection <string> exceptKeys = new List <string>(); foreach (var col in cols) { if (valueKeys.Contains(col.Value)) { continue; } exceptKeys.Add(col.Key); } if (exceptKeys.Any() == false) { return; } var rules = SqlEnginerConfig.GetMatchRules(config.Connection, config.Table, ActionType.Insert).OrderBy(r => r.RangeType).ToArray(); foreach (var key in exceptKeys) { if (key.StartsWith(SqlKeyWorld.ParamStart)) { continue; } foreach (var rule in rules) { var column = rule.Columns.FirstOrDefault(c => c.Name.Equals(key, StringComparison.OrdinalIgnoreCase)); if (column == null) { continue; } var colValue = GetColumnValue(config.Connection, config.Table, column, data); valueSetter.SetField(data, colValue, cols[key]); break; } } }
protected override object DoUpdate(UpdateContext context, UpdateConfig config, IEnumerable <object> datas, object complexData) { var sql = config.Sql; var ingoreKey = config.Config[IngoreKey].ToSingleData <bool>(); var cols = GetCols(config); var key = GetKeyName(config, cols); IValueSetter valueSetter = ValueSetterCreater.Create(datas.First()); //1.自定义SQl一条条插入 //2.未包含Key又没有忽略产生Key说明是要数据库自动生成 if (!string.IsNullOrEmpty(sql) || (!cols.ContainsKey(key) && !ingoreKey)) { if (string.IsNullOrEmpty(sql)) { config.Sql = DBHelper.BuildInsertSql(cols, config.Table, SqlKeyWorld.ComplexDataObjectStart); } config.ReturnId = true; var keys = valueSetter.GetFields(datas.First()); foreach (var data in datas) { context.ContentParams.ReplaceOrInsert(SqlKeyWorld.ComplexData, data); UpdateTrigger.TriggeDefaultValues(context, data, config, cols, valueSetter, keys); UpdateTrigger.TriggeValuesChecked(context, data, config, cols, ActionType.Insert, valueSetter, keys); var result = SqlExcuter.ExcuteTrann(context); long id = 0; if (result is long || result is int) { id = long.Parse(result.ToString()); valueSetter.SetField(data, id, key); } ExcuteSubUpdate(context, config, data); } return(datas.Count()); } return(InsertOnOneTime(context, config, cols, datas, valueSetter)); }
public object Fill(ReleatedQuery config, object parent, IEnumerable <object> matchDatas, IValueSetter valueSetter) { valueSetter.SetField(parent, matchDatas, config.Filed); return(matchDatas); }