コード例 #1
0
ファイル: SqlFromMetadataFactory.cs プロジェクト: bazer/slim
        public Sql GenerateSql(DatabaseMetadata metadata, bool foreignKeyRestrict)
        {
            var sql = new SqlGeneration(2, '"', "/* Generated %datetime% by DataLinq */\r\n\r\n");

            foreach (var table in sql.SortTablesByForeignKeys(metadata.Tables))
            {
                sql.CreateTable(table.DbName, x =>
                {
                    var longestName = table.Columns.Max(x => x.DbName.Length) + 1;
                    foreach (var column in table.Columns.OrderBy(x => x.Index))
                    {
                        sql.NewRow().Indent()
                        .ColumnName(column.DbName)
                        .Type(column.DbType.ToUpper(), column.DbName, longestName)
                        .Add((column.PrimaryKey ? " PRIMARY KEY" : "") + (column.AutoIncrement ? " AUTOINCREMENT" : ""));
                        if (!column.PrimaryKey)
                        {
                            sql.Nullable(column.Nullable);
                        }
                    }
                    // TODO: Index
                    foreach (var foreignKey in table.Columns.Where(x => x.ForeignKey))
                    {
                        foreach (var relation in foreignKey.RelationParts)
                        {
                            sql.ForeignKey(relation, foreignKeyRestrict);
                        }
                    }
                });
            }
            return(sql.sql);
        }
コード例 #2
0
        public Sql GenerateSql(DatabaseMetadata metadata, bool foreignKeyRestrict)
        {
            var sql = new SqlGeneration(2, '`', "/* Generated %datetime% by DataLinq */\r\n\r\n");

            foreach (var table in sql.SortTablesByForeignKeys(metadata.Tables))
            {
                sql.CreateTable(table.DbName, x =>
                {
                    var longestName = table.Columns.Max(x => x.DbName.Length) + 1;
                    foreach (var column in table.Columns.OrderBy(x => x.Index))
                    {
                        sql.NewRow().Indent()
                        .ColumnName(column.DbName)
                        .Type(column.DbType.ToUpper(), column.DbName, longestName);

                        if (!NoLengthTypes.Contains(column.DbType.ToLower()))
                        {
                            sql.TypeLength(column.Length);
                        }
                        sql.Unsigned(column.Signed);
                        sql.Nullable(column.Nullable)
                        .Autoincrement(column.AutoIncrement);
                    }
                    foreach (var primaryKey in table.PrimaryKeyColumns)
                    {
                        sql.PrimaryKey(primaryKey.DbName);
                    }
                    foreach (var foreignKey in table.Columns.Where(x => x.ForeignKey))
                    {
                        foreach (var relation in foreignKey.RelationParts)
                        {
                            sql.ForeignKey(relation, foreignKeyRestrict);
                        }
                    }
                });
            }
            return(sql.sql);
        }