/// <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
                    });
                }
            }
        }
Esempio n. 2
0
        /// <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);
        }