/// <summary> /// 创建数据表语句片段。 /// </summary> /// <param name="context">生成上下文。</param> /// <returns>语句片段。</returns> protected virtual SqlFragment GenerateForMaintenanceCreateTable(GenerateContext context) { var operate = (DbCreateTableOperate)context.Data.Operate; var metadata = context.Metadata.Table(context.Data.Operate.ClrType); if (operate.Type == EOperateType.CreateTable) { var name = context.ConvertName(operate.Name); return(new CreateTableFragment(context, metadata, name)); } else { var members = metadata.InheritSets.SelectMany(a => a.Members).Concat(metadata.Members); INameFragment name = null; if (operate.Type == EOperateType.CreateTempTable) { name = new TempTableNameFragment(context, operate.Name.Name); return(new CreateTempTableFragment(context, members, name) { IsVariable = false }); } else { name = new VariableFragment(context, operate.Name.Name); return(new CreateTempTableFragment(context, members, name) { IsVariable = true }); } } }
/// <summary>Skips over any modifiers found in the given code fragment, returning the first non-modifier fragment found.</summary> /// <param name="fragment">The place to start from.</param> /// <returns>The first non-modifier fragment found. May be the given fragment if it is not a modifier.</returns> public static CodeFragment Skip(CodeFragment fragment) { if (fragment == null || fragment.GetType() != typeof(VariableFragment)) { return(fragment); } VariableFragment vfragment = (VariableFragment)fragment; if (vfragment.Value == "private") { if (fragment.NextChild == null) { vfragment.Error("Error: 'private' is an access modifier and it must be followed by something. (e.g. private var i..)"); } return(Skip(fragment.NextChild)); } return(fragment); }