Exemplo n.º 1
0
        public override List <DataObject> Execute()
        {
            List <DataObject> dataList = new List <DataObject>();

            using (Collection.WriterLock)
            {
                foreach (JObject item in Data)
                {
                    //  Unique 확인
                    if (UniqueFor != null && UniqueFor != "")
                    {
                        JToken valueToken = item.GetProperty(UniqueFor, false)?.Value;
                        if (valueToken != null)
                        {
                            Dictionary <string, DataObject> result;
                            if (valueToken.Type == JTokenType.String)
                            {
                                result = ScanFromData(Collection.GetObjects(UniqueFor),
                                                      new ConditionToken($"{UniqueFor} == '{valueToken}'"));
                            }
                            else
                            {
                                result = ScanFromData(Collection.GetObjects(UniqueFor),
                                                      new ConditionToken($"{UniqueFor} == {valueToken}"));
                            }


                            //  Key 중복시 처리
                            if (result.Count() > 0)
                            {
                                if (OnDuplicate == "ignore")
                                {
                                    continue;
                                }

                                if (OnDuplicate == "update")
                                {
                                    foreach (var duplicatedItem in result.Values)
                                    {
                                        duplicatedItem.ReplaceData(item);
                                    }

                                    continue;
                                }
                            }
                        }
                    }


                    var obj = Collection.AddData(item);
                    dataList.Add(obj);
                }

                Storage.StorageEngine.Engine.InsertData(Collection, dataList);
                return(null);
            }
        }