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); }
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); }