예제 #1
0
        /// <inheritdoc/>
        internal override void RegisteOperate(IDbSplitObjectsOperate operate, int index, int length)
        {
            var operateInstance = (DbOperateBase)operate;

            RegisteOperate(operateInstance);
            _SplitInfo = new SplitIndexLength(operate, index, length);
        }
예제 #2
0
        /// <inheritdoc/>
        internal override void RegisteOperate(IDbSplitObjectsOperate operate, int index, int length)
        {
            var operateInstance = (DbOperateBase)operate;

            operates.Add(operateInstance);
            commandBuilder.AppendLine(operateInstance.GenerateSql());
            if (splitesOperates == null)
            {
                splitesOperates = new Dictionary <DbOperateBase, SplitIndexLength>();
            }
            if (!splitesOperates.ContainsKey(operateInstance))
            {
                splitesOperates.Add(operateInstance, new SplitIndexLength(operate, index, length));
            }
        }
예제 #3
0
        /// <summary>
        /// 添加操作。
        /// </summary>
        /// <param name="operate">操作对象。</param>
        /// <param name="sql">该操作相应的语句。</param>
        /// <param name="index">分割操作起始索引。</param>
        /// <param name="length">分割操作长度。</param>
        internal void AddOperate(IDbSplitObjectsOperate operate, string sql, int index, int length)
        {
            var operateInstance = (DbOperateBase)operate;

            operates.Add(operateInstance);
            commandBuilder.AppendLine(sql);
            if (splitesOperates == null)
            {
                splitesOperates = new Dictionary <DbOperateBase, SplitIndexLength>();
            }
            if (!splitesOperates.ContainsKey(operateInstance))
            {
                splitesOperates.Add(operateInstance, new SplitIndexLength()
                {
                    Operate = operate,
                    Index   = index,
                    Length  = length
                });
            }
        }
예제 #4
0
        /// <summary>
        /// 向命令集合注册数据库可分割的数据集合操作。
        /// </summary>
        /// <param name="itemoperate">注册的数据集合操作。</param>
        public void Register(IDbSplitObjectsOperate itemoperate)
        {
            var operate = (DbOperateBase)itemoperate;
            int index = 0, length = 0, count = 0, sumcount = itemoperate.Count;

            do
            {
                if (current == null || index > 0 || current is SingleOperateCommand)
                {
                    current = this.NextCommand();
                }
                count  = current.ParameterCount / itemoperate.ItemParameterCount;
                length = Math.Min(count, sumcount - index);
                itemoperate.Split(index, length, () => current.RegisteOperate(itemoperate, index, length));
                if (operate is IConcurrencyCheckOperate concurrency2 && concurrency2.NeedCheck)
                {
                    //累加并发检查期望数
                    current.ConcurrencyExpectCount += concurrency2.ExpectCount;
                }
                index += length;
            } while (index < sumcount - 1);
        }
예제 #5
0
 public SplitIndexLength(IDbSplitObjectsOperate operate, int index, int length)
 {
     Operate = operate;
     Index   = index;
     Length  = length;
 }
예제 #6
0
 /// <summary>
 /// 注册操作。
 /// </summary>
 /// <param name="operate">操作对象。</param>
 /// <param name="index">分割操作起始索引。</param>
 /// <param name="length">分割操作长度。</param>
 internal abstract void RegisteOperate(IDbSplitObjectsOperate operate, int index, int length);