private static int GetProviderType(DatabaseColumn column) { int providerType = -1; if (column.DataType != null) providerType = column.DataType.ProviderDbType; return providerType; }
public string WriteDataType(DatabaseColumn column) { if (column == null) return string.Empty; if (string.IsNullOrEmpty(column.DbDataType)) return string.Empty; var dataType = column.DbDataTypeStandard(); dataType = OtherDatabaseTypesToPostgreSql(dataType, column); if ((dataType.StartsWith("TIMESTAMP", StringComparison.OrdinalIgnoreCase) || dataType == "TIME") && column.DateTimePrecision > 0) dataType = dataType + " (" + column.DateTimePrecision + ")"; //write out datatype definition if ((dataType == "VARCHAR" || dataType == "CHAR") && column.Length > 0) { dataType = dataType + " (" + column.Length + ")"; } if (dataType == "NUMERIC" || dataType == "DECIMAL") { var scale = column.Scale; var precision = column.Precision; var writeScale = ((scale != null) && (scale > 0) ? "," + scale : ""); if (precision > 0) //Postgresql can have no specified precision dataType = dataType + " (" + precision + writeScale + ")"; } return dataType; }
protected override string WriteDataType(DatabaseColumn column) { var type = new DataTypeWriter().WriteDataType(column); type += (!column.Nullable ? " NOT NULL" : string.Empty); var defaultValue = column.DefaultValue; if (!string.IsNullOrEmpty(defaultValue)) { defaultValue = FixDefaultValue(defaultValue); const string defaultConstraint = " DEFAULT "; var dbDataType = column.DbDataType.ToUpperInvariant(); if (DataTypeConverter.IsVariableString(dbDataType)) { type += defaultConstraint + "'" + defaultValue + "'"; } else //numeric default { type += defaultConstraint + defaultValue; } } //cannot detect the "GENERATED BY DEFAULT" vs "GENERATED ALWAYS" version? if (column.IsAutoNumber) type += " GENERATED BY DEFAULT AS IDENTITY"; if (column.IsPrimaryKey && Table.PrimaryKey.Columns.Count == 1) type += " PRIMARY KEY"; return type; }
public override string WriteDataType(DatabaseColumn column) { var type = new DataTypeWriter().WriteDataType(column); if (column.IsPrimaryKey && (Table.PrimaryKey == null || Table.PrimaryKey.Columns.Count == 1)) { type += " PRIMARY KEY"; if (column.IsAutoNumber) //must be integer primary key { return "INTEGER PRIMARY KEY AUTOINCREMENT"; } } if (!column.Nullable) type += " NOT NULL"; //if there's a default value, and it's not a guid generator or autonumber if (!string.IsNullOrEmpty(column.DefaultValue) && !SqlTranslator.IsGuidGenerator(column.DefaultValue) && !column.IsAutoNumber) { var value = SqlTranslator.Fix(column.DefaultValue); //SqlServer (N'string') format if (value.StartsWith("(N'", StringComparison.OrdinalIgnoreCase)) value = value.Replace("(N'", "('"); type += " DEFAULT " + value; } return type; }
public void GivenAlteredColumn() { //arrange DatabaseSchema schema1 = CreateSchema(); var productsTable = CreateProductsTable(); schema1.Tables.Add(productsTable); var nameColumn = new DatabaseColumn { Name = "Name", DbDataType = "NVARCHAR", Length = 10, Nullable = false }; productsTable.Columns.Add(nameColumn); DatabaseSchema schema2 = CreateSchema(); var productsTable2 = CreateProductsTable(); var nameColumn2 = new DatabaseColumn { Name = "Name", DbDataType = "NVARCHAR", Length = 20, Nullable = true }; productsTable2.Columns.Add(nameColumn2); schema2.Tables.Add(productsTable2); //act var comparison = new CompareSchemas(schema1, schema2); var result = comparison.ExecuteResult(); //assert var alterColumn = result.FirstOrDefault(x => x.ResultType == ResultType.Change && x.SchemaObjectType == SchemaObjectType.Column && x.TableName == "Products" && x.Name == "Name"); Assert.IsNotNull(alterColumn); }
/// <summary> /// Adds a dataType object to a column. /// </summary> /// <param name="column">The column.</param> public static void AddDataType(DatabaseColumn column) { if (column == null) return; //there is no data type at all if (string.IsNullOrEmpty(column.DbDataType)) return; //a datatype already assigned if (column.DataType != null) return; //use upper case var dbType = column.DbDataType.ToUpperInvariant(); //nothing to convert if (string.IsNullOrEmpty(dbType)) return; var sqlType = SqlType.SqlServer; var dataTypeList = new List<DataType>(); if (column.Table != null) { //look up the full schema if it exists var schema = column.Table.DatabaseSchema; if (schema != null) { var provider = schema.Provider; sqlType = ProviderToSqlType.Convert(provider) ?? SqlType.SqlServer; dataTypeList = schema.DataTypes; } } //does the schema data types contain this type? if so, assign it. var dataType = FindDataType(dbType, dataTypeList, sqlType, column.Length); column.DataType = dataType; }
public virtual string AddColumn(DatabaseTable databaseTable, DatabaseColumn databaseColumn) { var tableGenerator = CreateTableGenerator(databaseTable); var addColumn = tableGenerator.WriteColumn(databaseColumn).Trim(); if (string.IsNullOrEmpty(databaseColumn.DefaultValue) && !databaseColumn.Nullable) { var dt = databaseColumn.DataType; if (dt == null || dt.IsString) { addColumn += " DEFAULT ''"; //empty string } else if (dt.IsNumeric) { addColumn += " DEFAULT 0"; } else if (dt.IsDateTime) { addColumn += " DEFAULT CURRENT_TIMESTAMP"; } //make sure the NOT NULL is AFTER the default addColumn = addColumn.Replace(" NOT NULL ", " ") + " NOT NULL"; } return string.Format(CultureInfo.InvariantCulture, "ALTER TABLE {0} ADD {1}", TableName(databaseTable), addColumn) + LineEnding(); }
protected override string WriteDataType(DatabaseColumn column) { var type = new DataTypeWriter().WriteDataType(column); type += (!column.Nullable ? " NOT NULL" : string.Empty); var defaultValue = column.DefaultValue; if (!string.IsNullOrEmpty(defaultValue)) { defaultValue = FixDefaultValue(defaultValue); const string defaultConstraint = " DEFAULT "; if (IsStringColumn(column)) { type += defaultConstraint + "'" + defaultValue + "'"; } else //numeric default { type += defaultConstraint + defaultValue; } } //MySql auto-increments MUST BE primary key if (column.IsAutoNumber) type += " AUTO_INCREMENT PRIMARY KEY"; else if (column.IsPrimaryKey && Table.PrimaryKey.Columns.Count == 1) type += " PRIMARY KEY"; return type; }
public override string DropColumn(DatabaseTable databaseTable, DatabaseColumn databaseColumn) { return string.Format(CultureInfo.InvariantCulture, "ALTER TABLE {0} DROP COLUMN {1} CASCADE;", TableName(databaseTable), Escape(databaseColumn.Name)); }
public override string WriteDataType(DatabaseColumn column) { var defaultValue = string.Empty; if (!string.IsNullOrEmpty(column.DefaultValue)) { defaultValue = WriteDefaultValue(column); } var sql = DataTypeWriter.WriteDataType(column); if (sql == "BIT") _hasBit = true; if (column.IsAutoNumber) { var id = column.IdentityDefinition ?? new DatabaseColumnIdentity(); bool isLong = column.DataType != null && column.DataType.GetNetType() == typeof(long); // Non trivial identities are hooked to a sequence up by AutoIncrementWriter. // Newer postgres versions require specifying UNIQUE explicitly. if (id.IsNonTrivialIdentity()) sql = (isLong ? " BIGINT" : " INT") + " NOT NULL UNIQUE"; else sql = isLong ? " BIGSERIAL" : " SERIAL"; } else { if (column.IsPrimaryKey) sql += " NOT NULL"; else sql += " " + (!column.Nullable ? " NOT NULL" : string.Empty) + defaultValue; } return sql; }
public override string AlterColumn(DatabaseTable databaseTable, DatabaseColumn databaseColumn, DatabaseColumn originalColumn) { var sb = new StringBuilder(); var defaultName = "DF_" + databaseTable.Name + "_" + databaseColumn.Name; if (originalColumn != null) { if (originalColumn.DefaultValue != null) { //have to drop default contraint var df = FindDefaultConstraint(databaseTable, databaseColumn.Name); if (df != null) { defaultName = df.Name; sb.AppendLine("ALTER TABLE " + TableName(databaseTable) + " DROP CONSTRAINT " + Escape(defaultName) + ";"); } } } //we could check if any of the properties are changed here sb.AppendLine(base.AlterColumn(databaseTable, databaseColumn, originalColumn)); if (databaseColumn.DefaultValue != null) { //add default contraint sb.AppendLine("ALTER TABLE " + TableName(databaseTable) + " ADD CONSTRAINT " + Escape(defaultName) + " DEFAULT " + databaseColumn.DefaultValue + " FOR " + Escape(databaseColumn.Name) + ";"); } return sb.ToString(); }
private static bool IsStringColumn(DatabaseColumn column) { var dataType = column.DbDataType.ToUpperInvariant(); var isString = (dataType == "NVARCHAR" || dataType == "VARCHAR" || dataType == "CHAR"); var dt = column.DataType; if (dt != null && dt.IsString) isString = true; return isString; }
private void ConvertDataTable() { var columnsKeyMap = new ColumnsKeyMap(ColumnsDataTable); var hasIsUnsigned = !string.IsNullOrEmpty(columnsKeyMap.IsUnsignedKey); foreach (DataRowView row in ColumnsDataTable.DefaultView) { var column = new DatabaseColumn(); column.Name = row[columnsKeyMap.Key].ToString(); column.TableName = row[columnsKeyMap.TableKey].ToString(); if (!string.IsNullOrEmpty(columnsKeyMap.SchemaKey)) column.SchemaOwner = row[columnsKeyMap.SchemaKey].ToString(); if (string.Equals("sqlite_default_schema", column.SchemaOwner, StringComparison.OrdinalIgnoreCase)) column.SchemaOwner = string.Empty; if (!string.IsNullOrEmpty(columnsKeyMap.OrdinalKey)) column.Ordinal = Convert.ToInt32(row[columnsKeyMap.OrdinalKey], CultureInfo.CurrentCulture); if (!string.IsNullOrEmpty(columnsKeyMap.DatatypeKey)) column.DbDataType = row[columnsKeyMap.DatatypeKey].ToString(); if (hasIsUnsigned && CastToBoolean(row, columnsKeyMap.IsUnsignedKey)) column.DbDataType += " unsigned"; AddNullability(row, columnsKeyMap.NullableKey, column); //the length unless it's an OleDb blob or clob if (!string.IsNullOrEmpty(columnsKeyMap.LengthKey)) column.Length = GetNullableInt(row[columnsKeyMap.LengthKey]); if (!string.IsNullOrEmpty(columnsKeyMap.DataLengthKey)) { //oracle only var dataLength = GetNullableInt(row[columnsKeyMap.DataLengthKey]); //column length already set for char/varchar. For other data types, get data length if (column.Length < 1) column.Length = dataLength; } if (!string.IsNullOrEmpty(columnsKeyMap.PrecisionKey)) column.Precision = GetNullableInt(row[columnsKeyMap.PrecisionKey]); if (!string.IsNullOrEmpty(columnsKeyMap.ScaleKey)) column.Scale = GetNullableInt(row[columnsKeyMap.ScaleKey]); if (columnsKeyMap.DateTimePrecision != null) { column.DateTimePrecision = GetNullableInt(row[columnsKeyMap.DateTimePrecision]); } AddColumnDefault(row, columnsKeyMap.DefaultKey, column); if (!string.IsNullOrEmpty(columnsKeyMap.PrimaryKeyKey) && (bool)row[columnsKeyMap.PrimaryKeyKey]) column.IsPrimaryKey = true; if (!string.IsNullOrEmpty(columnsKeyMap.AutoIncrementKey) && (bool)row[columnsKeyMap.AutoIncrementKey]) column.IsAutoNumber = true; if (!string.IsNullOrEmpty(columnsKeyMap.UniqueKey) && CastToBoolean(row, columnsKeyMap.UniqueKey)) column.IsUniqueKey = true; _list.Add(column); } // Sort columns according to ordinal to get the original order in CREATE TABLE _list.Sort((x, y) => x.Ordinal.CompareTo(y.Ordinal)); }
public static bool IsString(DatabaseColumn column, string dataType) { //all aliases for CHAR and VARCHAR. there's also a LONG VARCHAR if (DataTypeConverter.IsVariableString(dataType) || DataTypeConverter.IsFixedLengthString(dataType)) return true; if (column.DataType == null) return false; return column.DataType.IsString; }
public override string WriteDataType(DatabaseColumn column) { var dataType = base.WriteDataType(column); if (dataType == "TEXT") { dataType = "NTEXT"; } return dataType; }
public override string WriteDataType(DatabaseColumn column) { if (column.IsComputed) { //Generated Always and Virtual are optional keywords return "GENERATED ALWAYS AS " + column.ComputedDefinition + " VIRTUAL"; } return new DataTypeWriter().WriteDataType(column); }
public static bool IsSqlServerTimestamp(string dataType, DatabaseColumn column) { if (!dataType.StartsWith("TIMESTAMP", StringComparison.OrdinalIgnoreCase)) return false; int providerType = -1; if (column.DataType != null) providerType = column.DataType.ProviderDbType; return (providerType == (int)SqlDbType.Timestamp); //this is just a byte array }
private static string OtherDatabaseTypesToPostgreSql(string dataType, DatabaseColumn column) { //string types //character(n) (aka char(n)) character varying(n) aka varchar(n) and text if (DataTypeConverter.IsFixedLengthString(dataType)) { return "CHAR"; } if (DataTypeConverter.IsLongString(dataType)) { return "TEXT"; } if (DataTypeConverter.IsVariableString(dataType)) { if (column.Length == -1) return "TEXT"; return "VARCHAR"; } //numeric types if (dataType == "INT") return "INTEGER"; if (dataType == "INT4") return "INTEGER"; //this is a PostgreSql alias, we'll use standard SQL //else if (dataType == "SERIAL") return "INTEGER"; //this is a PostgreSql alias, we'll use standard SQL //else if (dataType == "BIGSERIAL") return "BIGINT"; //this is a PostgreSql alias, we'll use standard SQL if (dataType == "INT8") return "BIGINT"; //this is a PostgreSql alias, we'll use standard SQL if (dataType == "INT2") return "SMALLINT"; //this is a PostgreSql alias, we'll use standard SQL if (dataType == "TINYINT") return "SMALLINT"; //this is a MsSql alias, we'll use standard SQL if (dataType == "NUMBER") return DataTypeConverter.OracleNumberConversion(column.Precision, column.Scale); //float and real if (dataType == "FLOAT4") return "REAL"; //this is a PostgreSql alias, we'll use standard SQL if (dataType == "FLOAT") return "DOUBLE PRECISION"; //date times //SqlServer Timestamp is a binary if (DataTypeConverter.IsSqlServerTimestamp(dataType, column)) return "BYTEA"; //this is just a byte array- functionally you should redesign the table and perhaps use the system extension columns if (DataTypeConverter.IsDateTime(dataType)) return "TIMESTAMP"; //bytes if (DataTypeConverter.IsBlob(dataType, column.Length)) return "OID";//blobs become object ids if (DataTypeConverter.IsBinary(dataType)) { return "BYTEA"; } //there is a native BIT(n) type in Postgresql, but in conversion we probably mean boolean. if (dataType == "BIT" && !column.Length.HasValue) return "BOOLEAN"; //other types if (dataType == "XMLTYPE") return "XML"; if (dataType == "UNIQUEIDENTIFIER") return "UUID"; return dataType; }
/// <summary> /// Creates sample data from a <see cref="DatabaseSchemaReader.DataSchema.DataType"/> /// </summary> /// <param name="column">The column.</param> /// <returns></returns> /// <exception cref="InvalidOperationException">Column is a non-nullable foreign key</exception> public static object CreateData(DatabaseColumn column) { if (column.IsForeignKey) { if (column.Nullable) return null; throw new InvalidOperationException("Column is a non-nullable foreign key - cannot generate data"); } return CreateData(column.DataType, column.Length, column.Precision, column.Scale); }
/// <summary> /// If a table has a trigger, we assume it's an Oracle trigger/sequence which is translated to identity for the primary key /// </summary> /// <param name="table">The table.</param> /// <param name="column">The column.</param> /// <returns></returns> public static bool LooksLikeOracleIdentityColumn(DatabaseTable table, DatabaseColumn column) { if (!column.IsPrimaryKey) return false; if (table.Triggers.Count == 0) return false; //is there a trigger body which looks like it's using a sequence? //if there's a sequence there, it's autogenerating a column - we assume the primary key! return table.Triggers.Any(t => t.TriggerBody .ToUpperInvariant() .Contains(".NEXTVAL ")); }
public void TypeInteger() { var typewriter = new DataTypeWriter(); var column = new DatabaseColumn(); column.DataType = new DataType("NUMBER", "System.Int32"); var result = typewriter.Write(column); Assert.AreEqual("int", result); }
public void TestDataTypeDefinitionForInt() { //arrange var column = new DatabaseColumn { DbDataType = "int", DataType = new DataType("int", "int") }; //act var result = column.DataTypeDefinition(); //assert Assert.AreEqual("int", result); }
public void TypeString() { var typewriter = new DataTypeWriter(); var column = new DatabaseColumn(); column.DataType = new DataType("VARCHAR2", "System.String"); var result = typewriter.Write(column); Assert.AreEqual("string", result); }
private static string OtherDatabaseTypesToDb2(string dataType, DatabaseColumn column) { //string types if (DataTypeConverter.IsFixedLengthString(dataType)) { return "CHAR"; } if (DataTypeConverter.IsLongString(dataType)) { return dataType == "CLOB" ? "CLOB" : "DBCLOB"; } if (DataTypeConverter.IsVariableString(dataType)) { if (column.Length == -1) return "DBCLOB"; return "VARCHAR"; } //numeric types if (dataType == "SMALLINT") return dataType; if (dataType == "BIGINT") return dataType; if (dataType == "INTEGER") return dataType; if (dataType == "INT") return "INTEGER"; if (dataType == "NUM") return "NUMERIC"; //DB2 alias if (dataType == "DEC") return "DECIMAL"; //DB2 alias if (dataType == "MONEY") return "DECIMAL(19,4)"; if (dataType == "BIT") return "SMALLINT"; //could be CHAR(1) but nicer with an integer if (dataType == "NUMBER") return DataTypeConverter.OracleNumberConversion(column.Precision, column.Scale); //date times //SqlServer Timestamp is a binary if (DataTypeConverter.IsSqlServerTimestamp(dataType, column)) return "GRAPHIC"; if (DataTypeConverter.IsDateTime(dataType)) return "TIMESTAMP"; //bytes if (DataTypeConverter.IsBlob(dataType, column.Length)) return "BLOB"; if (DataTypeConverter.IsBinary(dataType)) { if (dataType == "LONG VARGRAPHIC") return dataType; if (dataType == "GRAPHIC") return dataType; return "VARGRAPHIC"; } //other types if (dataType == "XMLTYPE") return "XML"; if (dataType == "UNIQUEIDENTIFIER") return "CHAR(16) FOR BIT DATA"; return dataType; }
private static void ConvertIndexes(DataTable dt, ICollection<DatabaseIndex> indexes) { if (dt == null) return; //Npgsql if (dt.Columns.Count == 0) return; var indexKeyMap = new IndexKeyMap(dt); foreach (DataRowView row in dt.DefaultView) { string name = row[indexKeyMap.Key].ToString(); if (string.IsNullOrEmpty(name)) continue; //all indexes should have a name string schema = !String.IsNullOrEmpty(indexKeyMap.SchemaKey) ? row[indexKeyMap.SchemaKey].ToString() : String.Empty; var tableName = row[indexKeyMap.TableKey].ToString(); var c = indexes.FirstOrDefault(f => f.Name == name && f.SchemaOwner == schema && f.TableName.Equals(tableName, StringComparison.OrdinalIgnoreCase)); if (c == null) { c = new DatabaseIndex(); c.Name = name; c.SchemaOwner = schema; c.TableName = tableName; if (indexKeyMap.Typekey != null) c.IndexType = row[indexKeyMap.Typekey].ToString(); if (FindBoolean(row, indexKeyMap.UniqueKey, "UNIQUE")) { c.IsUnique = true; c.IndexType = "UNIQUE"; } if (FindBoolean(row, indexKeyMap.PrimaryKey, String.Empty)) c.IndexType = "PRIMARY"; //primary keys should be unique too indexes.Add(c); } if (string.IsNullOrEmpty(indexKeyMap.ColumnKey)) continue; string colName = row[indexKeyMap.ColumnKey].ToString(); if (string.IsNullOrEmpty(colName)) continue; var column = new DatabaseColumn(); column.Name = colName; if (!string.IsNullOrEmpty(indexKeyMap.OrdinalKey)) { int ordinal = Convert.ToInt32(row[indexKeyMap.OrdinalKey], CultureInfo.CurrentCulture); column.Ordinal = ordinal; } if (ContainsColumn(c.Columns, colName)) continue; c.Columns.Add(column); if (c.Columns.Count > 1 && column.Ordinal != 0) { //the order of the datatable may be wrong c.Columns.Sort((x, y) => x.Ordinal.CompareTo(y.Ordinal)); } } }
/// <summary> /// For a column, returns the property name for a primary key /// </summary> /// <param name="column">The column.</param> /// <returns></returns> public virtual string PrimaryKeyName(DatabaseColumn column) { var primaryKeyName = column.NetName; if (column.IsPrimaryKey && column.IsForeignKey) { //a foreign key will be written, so we need to avoid a collision var refTable = column.ForeignKeyTable; var fkDataType = refTable != null ? refTable.NetName : column.ForeignKeyTableName; if (fkDataType == primaryKeyName) primaryKeyName += "Id"; } return primaryKeyName; }
public static string OracleDataTypeForParameter(DatabaseColumn column) { if (column == null) return string.Empty; if (string.IsNullOrEmpty(column.DbDataType)) return string.Empty; var dataType = column.DbDataTypeStandard(); int providerType = GetProviderType(column); var length = column.Length; //oracle to sql server translation dataType = SqlServerToOracleConversion(dataType, providerType, length); return dataType; }
public override string AddColumn(DatabaseTable databaseTable, DatabaseColumn databaseColumn) { var tableGenerator = CreateTableGenerator(databaseTable); var addColumn = tableGenerator.WriteColumn(databaseColumn).Trim(); if (string.IsNullOrEmpty(databaseColumn.DefaultValue) && !databaseColumn.Nullable) { //for strings, a zero length string; for numbers, 0; for dates, current timestamp addColumn += " DEFAULT"; } return string.Format(CultureInfo.InvariantCulture, "ALTER TABLE {0} ADD {1}", TableName(databaseTable), addColumn) + LineEnding(); }
private static string WriteSequence(DatabaseColumn column) { const string sequence = @"CREATE SEQUENCE ""{0}"" MINVALUE {1} START {1} INCREMENT {2}; ALTER TABLE ""{3}"" ALTER COLUMN ""{4}"" SET DEFAULT nextval('""{0}""');"; var id = column.IdentityDefinition; return string.Format(CultureInfo.InvariantCulture, sequence, GetSequenceName(column), id.IdentitySeed, id.IdentityIncrement, column.TableName, column.Name ); }
public override string DropDefault(DatabaseTable databaseTable, DatabaseColumn databaseColumn) { //there is no "DROP DEFAULT" in SqlServer (there is in SQLServer CE). //You must use the default constraint name (which is probably autogenerated) var sb = new StringBuilder(); sb.AppendLine("-- drop default for " + databaseColumn.Name); var df = FindDefaultConstraint(databaseTable, databaseColumn.Name); if (df != null) { sb.AppendLine("ALTER TABLE " + TableName(databaseTable) + " DROP CONSTRAINT " + Escape(df.Name) + ";"); } return sb.ToString(); }
/// <summary> /// Adds the column. /// </summary> /// <param name="databaseConstraint">The database constraint.</param> /// <param name="databaseColumn">The database column.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">databaseConstraint</exception> public static DatabaseConstraint AddColumn(this DatabaseConstraint databaseConstraint, DatabaseColumn databaseColumn) { if (databaseConstraint == null) { throw new ArgumentNullException("databaseConstraint"); } if (databaseColumn == null) { throw new ArgumentNullException("databaseColumn"); } if (databaseColumn.TableName != databaseConstraint.TableName) { throw new InvalidOperationException("Constraint and column must belong to same table"); } databaseConstraint.Columns.Add(databaseColumn.Name); switch (databaseConstraint.ConstraintType) { case ConstraintType.ForeignKey: databaseColumn.IsForeignKey = true; databaseColumn.ForeignKeyTableName = databaseConstraint.RefersToTable; break; case ConstraintType.PrimaryKey: databaseColumn.IsPrimaryKey = true; break; case ConstraintType.UniqueKey: databaseColumn.IsUniqueKey = true; break; } return(databaseConstraint); }
/// <summary> /// Adds a foreign key with a single column /// </summary> /// <param name="databaseColumn">The database column.</param> /// <param name="foreignKeyName">Name of the foreign key.</param> /// <param name="foreignTableName">Name of the foreign table.</param> /// <returns></returns> public static DatabaseColumn AddForeignKey(this DatabaseColumn databaseColumn, string foreignKeyName, string foreignTableName) { return(AddForeignKey(databaseColumn, foreignKeyName, foreignTableName, null)); }
/// <summary> /// Makes this column the primary key (or part of a composite key) /// </summary> /// <param name="databaseColumn">The database column.</param> /// <returns></returns> public static DatabaseColumn AddPrimaryKey(this DatabaseColumn databaseColumn) { return(databaseColumn.AddPrimaryKey(null)); }
/// <summary> /// Adds a foreign key with a single column (without a name) /// </summary> /// <param name="databaseColumn">The database column.</param> /// <param name="foreignTableName">Name of the foreign table.</param> /// <returns></returns> public static DatabaseColumn AddForeignKey(this DatabaseColumn databaseColumn, string foreignTableName) { return(databaseColumn.AddForeignKey(null, foreignTableName)); }
/// <summary> /// Makes this column a unique key. /// </summary> /// <param name="databaseColumn">The database column.</param> /// <returns></returns> public static DatabaseColumn AddUniqueKey(this DatabaseColumn databaseColumn) { return(databaseColumn.AddUniqueKey(null)); }