예제 #1
0
        public static SqlPreCommand?CreateTablesScript()
        {
            Schema        s      = Schema.Current;
            List <ITable> tables = s.GetDatabaseTables().Where(t => !s.IsExternalDatabase(t.Name.Schema.Database)).ToList();

            SqlPreCommand?createTables = tables.Select(SqlBuilder.CreateTableSql).Combine(Spacing.Double)?.PlainSqlCommand();

            SqlPreCommand?foreignKeys = tables.Select(SqlBuilder.AlterTableForeignKeys).Combine(Spacing.Double)?.PlainSqlCommand();

            SqlPreCommand?indices = tables.Select(t =>
            {
                var allIndexes = t.GeneratAllIndexes().Where(a => !(a is PrimaryClusteredIndex));;

                var mainIndices = allIndexes.Select(ix => SqlBuilder.CreateIndex(ix, checkUnique: null)).Combine(Spacing.Simple);

                var historyIndices = t.SystemVersioned == null ? null :
                                     allIndexes.Where(a => a.GetType() == typeof(Index)).Select(mix => SqlBuilder.CreateIndexBasic(mix, forHistoryTable: true)).Combine(Spacing.Simple);

                return(SqlPreCommand.Combine(Spacing.Double, mainIndices, historyIndices));
            }).NotNull().Combine(Spacing.Double)?.PlainSqlCommand();


            return(SqlPreCommand.Combine(Spacing.Triple, createTables, foreignKeys, indices));
        }