/// <inheritdoc/> internal override void RegisteOperate(IDbSplitObjectsOperate operate, int index, int length) { var operateInstance = (DbOperateBase)operate; RegisteOperate(operateInstance); _SplitInfo = new SplitIndexLength(operate, index, length); }
/// <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)); } }
/// <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 }); } }
/// <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); }
public SplitIndexLength(IDbSplitObjectsOperate operate, int index, int length) { Operate = operate; Index = index; Length = length; }
/// <summary> /// 注册操作。 /// </summary> /// <param name="operate">操作对象。</param> /// <param name="index">分割操作起始索引。</param> /// <param name="length">分割操作长度。</param> internal abstract void RegisteOperate(IDbSplitObjectsOperate operate, int index, int length);