Beispiel #1
0
        protected override object DoUpdate(UpdateContext context, UpdateConfig config, IEnumerable <object> datas, object complexData)
        {
            var          sql         = config.Sql;
            var          cols        = GetCols(config);
            var          key         = GetKeyName(config, cols);
            IValueSetter valueSetter = ValueSetterCreater.Create(datas.First());

            //1.自定义SQl一条条插入
            if (!string.IsNullOrEmpty(sql) || !string.IsNullOrEmpty(config.Filter))
            {
                if (string.IsNullOrEmpty(sql))
                {
                    config.Sql = DBHelper.BuildUpdateSql(cols, config, key, SqlKeyWorld.ComplexDataObjectStart);
                }

                config.ReturnId = true;
                var keys = valueSetter.GetFields(datas.First());
                foreach (var data in datas)
                {
                    context.ContentParams.ReplaceOrInsert(SqlKeyWorld.ComplexData, data);
                    UpdateTrigger.TriggeValuesChecked(context, data, config, cols, ActionType.Update, valueSetter, keys);
                    SqlExcuter.ExcuteTrann(context);
                    ExcuteSubUpdate(context, config, data);
                }

                return(datas.Count());
            }

            return(UpdateOnOneTime(context, config, cols, datas, valueSetter, key));
        }
Beispiel #2
0
        public void Dispose()
        {
            Surface.UnregisterUpdateTrigger(UpdateTrigger);

            UpdateTrigger.Dispose();
            Surface.Dispose();
        }
Beispiel #3
0
        private void Bench2()
        {
            Stopwatch s1 = new Stopwatch();

            s1.Start();

            for (var run = 0; run < runOptions; run++)
            {
                var           i      = 0;
                int           cIndex = -1;
                UpdateTrigger cTw    = null;

                foreach (IOption <int> d in _fs1.Options())
                {
                    int batchID = i / _fs1.BatchSize;
                    int o       = i % _fs1.BatchSize;

                    if (cIndex != batchID)
                    {
                        cTw    = _fs1.Batches[batchID].Item1;
                        cIndex = batchID;
                    }

                    Inner(batchID, o, d);

                    i++;
                }
            }

            s1.Stop();
            Console.WriteLine("Bench2 = " + s1.Elapsed);
        }
        protected override void ApplyRules(UpdateContext updateContext, UpdateConfig config, IDictionary <string, string> cols)
        {
            var          uParams     = updateContext.Params;
            IValueSetter valueSetter = ValueSetterCreater.Create(uParams);

            UpdateTrigger.TriggeValuesChecked(updateContext, uParams, config, cols, ActionType.Update, valueSetter, uParams.Keys);
        }
Beispiel #5
0
        public bool Initialize(RGBDeviceType loadFilter = RGBDeviceType.All, bool exclusiveAccessIfPossible = false, bool throwExceptions = false)
        {
            IsInitialized = false;

            try
            {
                UpdateTrigger.Stop();

                IList <IRGBDevice> devices = new List <IRGBDevice>();
                UpdateTrigger.ClientGroups = new Dictionary <StreamingHueClient, StreamingGroup>();

                foreach (HueClientDefinition clientDefinition in ClientDefinitions)
                {
                    // Create a temporary for this definition
                    ILocalHueClient client = new LocalHueClient(clientDefinition.Ip);
                    client.Initialize(clientDefinition.AppKey);

                    // Get the entertainment groups, no point continuing without any entertainment groups
                    IReadOnlyList <Group> entertainmentGroups = client.GetEntertainmentGroups().GetAwaiter().GetResult();
                    if (!entertainmentGroups.Any())
                    {
                        continue;
                    }

                    // Get all lights once, all devices can use this list to identify themselves
                    List <Light> lights = client.GetLightsAsync().GetAwaiter().GetResult().ToList();

                    foreach (Group entertainmentGroup in entertainmentGroups.OrderBy(g => int.Parse(g.Id)))
                    {
                        StreamingHueClient streamingClient = new StreamingHueClient(clientDefinition.Ip, clientDefinition.AppKey, clientDefinition.ClientKey);
                        StreamingGroup     streamingGroup  = new StreamingGroup(entertainmentGroup.Locations);
                        streamingClient.Connect(entertainmentGroup.Id).GetAwaiter().GetResult();

                        UpdateTrigger.ClientGroups.Add(streamingClient, streamingGroup);
                        foreach (string lightId in entertainmentGroup.Lights.OrderBy(int.Parse))
                        {
                            HueDeviceInfo deviceInfo = new HueDeviceInfo(entertainmentGroup, lightId, lights);
                            HueDevice     device     = new HueDevice(deviceInfo);
                            device.Initialize(new HueUpdateQueue(UpdateTrigger, lightId, streamingGroup));
                            devices.Add(device);
                        }
                    }
                }

                UpdateTrigger.Start();
                Devices       = new ReadOnlyCollection <IRGBDevice>(devices);
                IsInitialized = true;
            }
            catch
            {
                if (throwExceptions)
                {
                    throw;
                }
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ResourcesViewModel"/> class.
        /// </summary>
        protected UpdateTriggeredTreeItemViewModel()
        {
            var selectedObjectService = ServiceLocator.Resolve <SelectedTreeItemService>();

            selectedObjectService.SelectedTreeItemChanged += OnSelectedObjectChanged;

            UpdateTrigger = new UpdateTrigger {
                UpdateAction = OnTriggerUpdate
            };
        }
Beispiel #7
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (CheckDisabledModel(context))
            {
                return;
            }
            var tagName = Multiline ? "a2-textarea" : "textbox";
            var input   = new TagBuilder(tagName, null, IsInGrid);

            onRender?.Invoke(input);
            MergeAttributes(input, context);
            MergeDisabled(input, context);
            if (Multiline)
            {
                MergeAttributeInt32(input, context, "rows", nameof(Rows), Rows);
            }
            if (Password)
            {
                input.MergeAttribute(":password", "true");
            }
            if (Number)
            {
                input.MergeAttribute(":number", "true");
            }
            if (AutoSize)
            {
                input.MergeAttribute(":auto-size", "true");
            }
            if (UpdateTrigger != UpdateTrigger.Default)
            {
                input.MergeAttribute("update-trigger", UpdateTrigger.ToString().ToLowerInvariant());
            }
            if (SpellCheck != null)
            {
                input.MergeAttribute(":spell-check", SpellCheck.Value.ToString().ToLowerInvariant());
            }
            var enterCmd = GetBindingCommand(nameof(EnterCommand));

            if (enterCmd != null)
            {
                input.MergeAttribute(":enter-command", $"() => {enterCmd.GetCommand(context)}");                 // FUNCTION!!!
            }
            MergeAlign(input, context, Align);
            MergeBindingAttributeString(input, context, "placeholder", nameof(Placeholder), Placeholder);
            MergeValue(input, context);
            input.RenderStart(context);
            RenderAddOns(context);
            input.RenderEnd(context);
        }
        protected override void ApplyRules(UpdateContext updateContext, UpdateConfig config, IDictionary <string, string> cols)
        {
            var          cParams     = updateContext.Params;
            IValueSetter valueSetter = ValueSetterCreater.Create(cParams);
            var          keys        = cParams.Keys;

            UpdateTrigger.TriggeDefaultValues(updateContext, cParams, config, cols, valueSetter, keys);
            UpdateTrigger.TriggeValuesChecked(updateContext, cParams, config, cols, ActionType.Insert, valueSetter, keys);
            config.ReturnId = true;

            var    key = GetKeyName(config, cols);
            object id;

            if (updateContext.Params.TryGetValue(key, out id) == false)
            {
                return;
            }

            updateContext.ContentParams.Add(SqlKeyWorld.ReturnKey, id);
        }
Beispiel #9
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));
        }
Beispiel #10
0
        private void Bench1()
        {
            Stopwatch s1 = new Stopwatch();

            s1.Start();
            for (var run = 0; run < runOptions; run++)
            {
                for (var b = 0; b < _fs1.Batches.Length; b++)
                {
                    UpdateTrigger tw = _fs1.Batches[b].Item1;

                    for (var o = 0; o < _fs1.Batches[b].Item2.Count; o++)
                    {
                        IOption <int> d = _fs1.Batches[b].Item2[o];

                        Inner(b, o, d);
                    }
                }
            }

            s1.Stop();
            Console.WriteLine("Bench1 = " + s1.Elapsed);
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
 public void Dispose()
 {
     UpdateTrigger.Dispose();
 }
Beispiel #13
0
 public void AddUpdateTrigger(UpdateTrigger trigger)
 {
     _storageEngine.AddUpdateTriggerFor(_underlyingType, trigger);
 }
 public void AddUpdateTriggerFor(Type type, UpdateTrigger trigger)
 {
     AddTriggerFor(type, trigger, _listOfUpdateTriggers);
 }
 public abstract void AddUpdateTriggerFor(Type type, UpdateTrigger arg2);
Beispiel #16
0
 public override void AddUpdateTriggerFor(Type type, UpdateTrigger trigger)
 {
     _triggerManager.AddUpdateTriggerFor(type, trigger);
 }
Beispiel #17
0
        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);
        }