/// <summary> /// 生成更新单个关系对象语句。 /// </summary> /// <param name="context">生成上下文。</param> /// <returns>语句片段。</returns> protected virtual SqlFragment GenerateForRelationUpdate(GenerateContext context) { var data = (RelationContent)context.Data; var metadata = data.Items.Navigate; var update = new UpdateFragment(context, data.Table); update.AddSource(update.Target); if (data.IsAddRelation) { var source = data.CommitObject; foreach (var pair in metadata.Pairs) { update.SetValue(pair.ForeignKey, source.GetMember(pair.PrincipalKey)); } } else { var nullfargment = new SimpleFragment(context, "NULL"); foreach (var pair in metadata.Pairs) { update.SetValue(pair.ForeignKey, nullfargment); } } update.Where = update.Target.JoinCondition(data.CommitObject, data.Table.Keys); return(update); }
protected override void OnCreate(Bundle savedInstanceState) { Console.WriteLine($"\n*** typeof(AppCompatActivity) => {typeof(AppCompatActivity)}\n"); base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); SetContentView(Resource.Layout.activity_main); var toolbar = FindViewById <Toolbar>(Resource.Id.toolbar); SetSupportActionBar(toolbar); var fab = FindViewById <FloatingActionButton>(Resource.Id.fab); fab.Click += FabOnClick; native = new Aarxerciser(); fragment = native.CreateSimpleFragment(this); SupportFragmentManager.BeginTransaction() .Replace(Resource.Id.frame, fragment) .Commit(); }
/// <summary> /// 使用临时表形式,生成更新关系语句, /// 要求数据库拥有<see cref="EDbCapable.TemporaryTable"/> /// 和<see cref="EDbCapable.ModifyJoin"/>两个特性。 /// </summary> /// <param name="context">生成上下文。</param> /// <returns>语句片段。</returns> protected virtual SqlFragment GenerateForRelationUpdateTempTable(GenerateContext context) { var data = (RelationContent)context.Data; var metadata = data.Items.Navigate; var block = new BlockFragment(context); var createtemptable = new CreateTempTableFragment(context, data.IsAddRelation ? data.Source.Keys.Concat(metadata.Pairs.Select(a => a.ForeignKey)) : data.Source.Keys); var insert = new InsertValueFragment(context, createtemptable.Table, data.CommitObject, data.Items); data.Source.Keys.ForEach(key => insert.SetValue(key)); if (data.IsAddRelation) { metadata.Pairs.ForEach( pair => insert.SetValue(pair.ForeignKey, data.CommitObject.GetMember(pair.PrincipalKey))); } var temptable = createtemptable.Table; var update = new UpdateFragment(context, data.Table); update.AddSource(update.Target, temptable); if (data.IsAddRelation) { foreach (var pair in metadata.Pairs) { update.SetValue(pair.ForeignKey, temptable.GetMember(pair.ForeignKey)); } } else { var nullfargment = new SimpleFragment(context, "NULL"); foreach (var pair in metadata.Pairs) { update.SetValue(pair.ForeignKey, nullfargment); } } update.Target.Join(temptable, data.Table.Keys); return(new BlockFragment(context, createtemptable, insert, update)); }