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);
        }
Пример #4
0
        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;
                }
            }
        }
Пример #5
0
        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));
        }
Пример #6
0
 public object Fill(ReleatedQuery config, object parent, IEnumerable <object> matchDatas, IValueSetter valueSetter)
 {
     valueSetter.SetField(parent, matchDatas, config.Filed);
     return(matchDatas);
 }