/// <summary> /// 创建通过主键删除的语句片段。 /// </summary> /// <param name="data">内容对象。</param> /// <param name="table">删除表的元数据。</param> /// <param name="name">指定名称。</param> /// <returns>语句片段。</returns> internal static DeleteFragment DeleteByKeys(this ContentBase data, TableMetadata table, DbName name = null) { var delete = new DeleteFragment(data.GenerateContext, table, name); delete.Where = delete.Target.JoinCondition(data.CommitObject, data.UnionConcurrencyMembers(table, table.Keys)); return(delete); }
internal static InsertValueFragment InsertTemptable(this ContentBase data, TemporaryTableFragment temptable, IEnumerable <CommitMember> members) { var context = data.GenerateContext; var insert = new InsertValueFragment(context, temptable, data.CommitObject, data.Items); data.CommitObject.Parent = insert; members.ForEach(member => SetCommitMember(insert, member)); return(insert); }
internal static InsertValueFragment InsertUnit(this ContentBase data, CommitIdentityUnit unit, DbName name = null) { var context = data.GenerateContext; var target = new TableFragment(context, unit.Table, name); var insert = new InsertValueFragment(context, target, data.CommitObject, data.Items); data.CommitObject.Parent = insert; unit.Members.ForEach(member => SetCommitMember(insert, member)); return(insert); }
internal static UpdateFragment UpdateByTemptable(this ContentBase data, CommitUnitBase unit, SourceFragment current, DbName name = null) { var context = data.GenerateContext; var metadata = unit.Table; var update = new UpdateFragment(context, metadata, name); update.AddSource(update.Target, current); data.SetCommitMembers(update, unit, current); update.Target.Join(current, data.UnionConcurrencyMembers(metadata, metadata.Keys)); return(update); }
internal static UpdateFragment UpdateByKeys(this ContentBase data, CommitUnitBase unit, DbName name = null) { var context = data.GenerateContext; var metadata = unit.Table; var update = new UpdateFragment(context, metadata, name); data.CommitObject.Parent = update; data.SetCommitMembers(update, unit); update.Where = update.Target.JoinCondition(data.CommitObject, data.UnionConcurrencyMembers(metadata, metadata.Keys)); return(update); }
/// <summary> /// 创建通过临时博删除的语句片段。 /// </summary> /// <param name="data">内容对象。</param> /// <param name="metadata">删除表的元数据。</param> /// <param name="temptable">临时表。</param> /// <param name="name">指定名称。</param> /// <returns>语句片段。</returns> internal static DeleteFragment DeleteByTemptable(this ContentBase data , TableMetadata metadata, TemporaryTableFragment temptable, DbName name = null) { var context = data.GenerateContext; var filterMembers = data.UnionConcurrencyMembers(metadata, metadata.Keys); var delete = new DeleteFragment(context, metadata); var current = delete.Target; var currenttemptable = new TemporaryTableFragment(context, filterMembers, temptable.Name); delete.AddSource(currenttemptable); current.Join(currenttemptable, filterMembers); return(delete); }
/// <summary> /// 创建通过 IN 主键删除的语句片段。 /// </summary> /// <param name="data">内容对象。</param> /// <param name="table">删除表的元数据。</param> /// <param name="key">主键元数据。</param> /// <param name="values">值列表对象。</param> /// <param name="name">指定名称。</param> /// <returns>语句片段。</returns> internal static DeleteFragment DeleteInKey(this ContentBase data, TableMetadata table , ColumnMetadata key, ValueListFragment values, DbName name = null) { var context = data.GenerateContext; var delete = new DeleteFragment(context, table, data.TargetName); var keyMember = delete.Target.GetMember(key); delete.Where = new ScalarFragment(context, values, keyMember) { Function = SupportMembers.Enumerable.Contains }; return(delete); }
internal static InsertFragment InsertTemptable(this ContentBase data, TemporaryTableFragment temptable, CommitKeyUnit unit, DbName name = null) { var members = unit.Keys.Concat(unit.Members).Select(a => a.Metadata); var context = data.GenerateContext; var table = new TableFragment(context, unit.Table, name); var select = new SelectFragment(context, temptable); var current = new InsertFragment(context, table, select); foreach (var member in members) { select.CreateMember(null, temptable.GetMember(member)); current.CreateMember(null, member); } return(current); }
private static void SetCommitMembers(this ContentBase data, UpdateFragment update, CommitUnitBase unit, ISourceFragment source = null) { source = source ?? data.CommitObject; foreach (var member in unit.Members) { switch (member.ValueType) { case ECommitValueType.Constant: update.SetValue(member.Metadata, source.GetMember(member.Metadata)); break; case ECommitValueType.Expression: var exp = (CommitExpressionMember)member; update.SetValue(member.Metadata, update.CreateExpression(exp.Expression)); break; } } }