/// <summary> /// 创建通过主键及值关联的返回数据语句片段。 /// </summary> /// <param name="unit">内容对象。</param> /// <param name="target">目标对象。</param> /// <returns>语句片段。</returns> internal static SelectFragment SelectReturns(this IContentUnit unit, ISourceFragment target) { var data = (ContentBase)unit; var context = data.GenerateContext; var select = new SelectFragment(context, target); select.Members.AddRange(unit.ReturnMembers.Select(a => target.GetMember(a.Metadata))); select.Where = target.JoinCondition(data.CommitObject, data.Table.Keys); return(select); }
/// <summary> /// 创建通过临时表关联的返回数据语句片段。 /// </summary> /// <param name="unit">内容对象。</param> /// <param name="target">目标对象。</param> /// <param name="temptable">临时表。</param> /// <returns>语句片段。</returns> internal static SelectFragment SelectReturns(this IContentUnit unit, ISourceFragment target, TemporaryTableFragment temptable) { var data = (ContentBase)unit; var context = data.GenerateContext; var select = new SelectFragment(context, target); select.Members.AddRange(unit.ReturnMembers.Select(a => target.GetMember(a.Metadata))); select.AddSource(temptable); target.Join(temptable, data.Table.Keys); return(select); }
//生成更新表达式。 private void GenerateForUpdateMembers(GenerateContext context, CommitUnitBase unit, UpdateFragment update, ISourceFragment source) { 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; } } }
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; } } }
private void WriteFragmentForCommitReturning(SqlWriter writer, List <IMemberFragment> returnMmebers, ISourceFragment target) { if (returnMmebers.Any()) { var command = target.Context.Data.OperateCommand.GetCustomCommand <IOracleCustomCommand>(); writer.Write(" RETURNING "); returnMmebers.OfType <CommitMemberFragment>().ForEach( () => writer.Write(','), m => { var member = target.GetMember(m.Property); WriteDbName(writer, member.OutputName); }); writer.Write(" INTO "); returnMmebers.OfType <CommitMemberFragment>().ForEach(() => writer.Write(','), m => WriteParameterName(writer, command.AddParameter(m.Metadata))); } }
public static InsertFragment Insert(this GenerateContext context, ISourceFragment source, TableMetadata target , IEnumerable <ColumnMetadata> members) { DbName name = null; if (context.Data is ContentBase data) { name = data.TargetName; } var table = new TableFragment(context, target, name); var select = new SelectFragment(context, source); var current = new InsertFragment(context, table, select); foreach (var member in members) { select.CreateMember(null, source.GetMember(member)); current.CreateMember(null, member); } return(current); }