protected virtual string GetAddColumnString(Column column, MappingContext mappingContext, SpringBaseDao baseDao, List <string> primaryKeyCommands, List <String> postCommands, List <Column> descriptionColumns, List <string> dbNames) { string rtnVal = string.Format("\"{0}\" {1}{2}", column.ColumnName, GetColumnSqlDataTypeCreateString(mappingContext, column, baseDao), column.IsNullable ? string.Empty : " NOT NULL"); if (column.IsPrimaryKey) { PrimaryKeyColumn primaryKeyColumn = (PrimaryKeyColumn)column; string pkName = Utils.GetPrimaryKeyConstraintName(primaryKeyColumn, mappingContext.ShortenNamesByRemovingVowelsFirst, mappingContext.FixShortenNameBreakBug, mappingContext.DefaultTableNamePrefix); pkName = CheckDatabaseNameDoesNotExist(pkName, dbNames); string cmd = string.Format("ALTER TABLE {0} ADD CONSTRAINT {1} PRIMARY KEY ({2})", primaryKeyColumn.Table.TableName, pkName, primaryKeyColumn.ColumnName); primaryKeyCommands.Add(cmd); } else if (column.IsForeignKey) { ForeignKeyColumn foreignKeyColumn = (ForeignKeyColumn)column; string fkName = Utils.GetForeignKeyConstraintName(foreignKeyColumn, mappingContext.ShortenNamesByRemovingVowelsFirst, mappingContext.FixShortenNameBreakBug, mappingContext.DefaultTableNamePrefix); fkName = CheckDatabaseNameDoesNotExist(fkName, dbNames); string cmd = string.Format("ALTER TABLE {0} ADD CONSTRAINT {1} FOREIGN KEY ({2}) REFERENCES {3}({4})", foreignKeyColumn.Table.TableName, fkName, foreignKeyColumn.ColumnName, foreignKeyColumn.ForeignTable.TableName, foreignKeyColumn.ForeignTable.PrimaryKey.ColumnName); if (foreignKeyColumn.DeleteRule != DeleteRule.None) { cmd += (foreignKeyColumn.DeleteRule == DeleteRule.Cascade) ? " ON DELETE CASCADE" : " ON DELETE SET NULL"; } postCommands.Add(cmd); string indexName = Utils.GetIndexName(foreignKeyColumn, mappingContext.ShortenNamesByRemovingVowelsFirst, mappingContext.FixShortenNameBreakBug, mappingContext.DefaultTableNamePrefix); indexName = CheckDatabaseNameDoesNotExist(indexName, dbNames); cmd = string.Format("CREATE INDEX {0} ON {1}({2})", indexName, foreignKeyColumn.Table.TableName, foreignKeyColumn.ColumnName); postCommands.Add(cmd); } else if (column.IsIndexable) { string indexName = Utils.GetIndexName(column, mappingContext.ShortenNamesByRemovingVowelsFirst, mappingContext.FixShortenNameBreakBug, mappingContext.DefaultTableNamePrefix); indexName = CheckDatabaseNameDoesNotExist(indexName, dbNames); string cmd = string.Format("CREATE INDEX {0} ON {1}({2})", indexName, column.Table.TableName, column.ColumnName); postCommands.Add(cmd); } if (!string.IsNullOrEmpty(column.ColumnDescription)) { descriptionColumns.Add(column); } return(rtnVal); }
public static string GetPrimaryKeyConstraintName(PrimaryKeyColumn primaryKeyColumn, bool shortenNamesByRemovingVowelsFirst, bool fixBreakBug, string defaultTableNamePrefix) { if (!string.IsNullOrEmpty(primaryKeyColumn.IndexName)) { return(primaryKeyColumn.IndexName); } else { return(ShortenDatabaseName("PK" + Utils.NAME_SEPARATOR + RemoveTableNamePrefix(primaryKeyColumn.Table.TableName, primaryKeyColumn.Table.TableNamePrefix, defaultTableNamePrefix), MAX_CONSTRAINT_NAME_CHARS, shortenNamesByRemovingVowelsFirst, fixBreakBug, null)); } }