private string GenerateSqlStatementConcrete(AddColumnOperation migrationOperation) { SQLiteDdlBuilder ddlBuilder = new SQLiteDdlBuilder(); ddlBuilder.AppendSql("ALTER TABLE "); ddlBuilder.AppendIdentifier(migrationOperation.Table); ddlBuilder.AppendSql(" ADD COLUMN "); ColumnModel column = migrationOperation.Column; ddlBuilder.AppendIdentifier(column.Name); TypeUsage storeType = ProviderManifest.GetStoreType(column.TypeUsage); ddlBuilder.AppendType(storeType, column.IsNullable ?? true, column.IsIdentity); //DEFAULT VALUE if (column.DefaultValue != null) { if (column.DefaultValue is DateTime defaultValue) { var format = "yyyy-MM-dd HH:mm:ss.ffffff"; if (defaultValue.Kind == DateTimeKind.Utc) { format += 'Z'; } ddlBuilder.AppendSql($" DEFAULT '{defaultValue.ToString(format)}'"); } } ddlBuilder.AppendNewLine(); return(ddlBuilder.GetCommandText()); }
private string BuildPropertyType(PropertyModel propertyModel) { DebugCheck.NotNull(propertyModel); var originalStoreTypeName = propertyModel.StoreType; var typeUsage = ProviderManifest.GetStoreType(propertyModel.TypeUsage); if (string.IsNullOrWhiteSpace(originalStoreTypeName)) { originalStoreTypeName = typeUsage.EdmType.Name; } else { var storeTypeUsage = BuildStoreTypeUsage(originalStoreTypeName, propertyModel); typeUsage = storeTypeUsage ?? typeUsage; } var storeTypeName = originalStoreTypeName; const string MaxSuffix = "(max)"; if (storeTypeName.EndsWith(MaxSuffix, StringComparison.Ordinal)) { storeTypeName = Quote(storeTypeName.Substring(0, storeTypeName.Length - MaxSuffix.Length)) + MaxSuffix; } else { storeTypeName = Quote(storeTypeName); } switch (originalStoreTypeName) { case "decimal": case "numeric": storeTypeName += "(" + (propertyModel.Precision ?? (byte)typeUsage.Facets[DbProviderManifest.PrecisionFacetName].Value) + ", " + (propertyModel.Scale ?? (byte)typeUsage.Facets[DbProviderManifest.ScaleFacetName].Value) + ")"; break; case "datetime2": case "datetimeoffset": case "time": storeTypeName += "(" + (propertyModel.Precision ?? (byte)typeUsage.Facets[DbProviderManifest.PrecisionFacetName].Value) + ")"; break; case "binary": case "varbinary": case "nvarchar": case "varchar": case "char": case "nchar": storeTypeName += "(" + (propertyModel.MaxLength ?? (int)typeUsage.Facets[DbProviderManifest.MaxLengthFacetName].Value) + ")"; break; } return(storeTypeName); }
private string GenerateSqlStatementConcrete(CreateTableOperation migrationOperation) { SQLiteDdlBuilder ddlBuilder = new SQLiteDdlBuilder(); ddlBuilder.AppendSql("CREATE TABLE "); ddlBuilder.AppendIdentifier(migrationOperation.Name); ddlBuilder.AppendSql(" ("); ddlBuilder.AppendNewLine(); bool first = true; string autoincrementColumnName = null; foreach (ColumnModel column in migrationOperation.Columns) { if (first) { first = false; } else { ddlBuilder.AppendSql(","); } ddlBuilder.AppendSql(" "); ddlBuilder.AppendIdentifier(column.Name); ddlBuilder.AppendSql(" "); if (column.IsIdentity) { autoincrementColumnName = column.Name; ddlBuilder.AppendSql(" integer constraint "); ddlBuilder.AppendIdentifier(ddlBuilder.CreateConstraintName("PK", migrationOperation.Name)); ddlBuilder.AppendSql(" primary key autoincrement"); ddlBuilder.AppendNewLine(); } else { TypeUsage storeTypeUsage = ProviderManifest.GetStoreType(column.TypeUsage); ddlBuilder.AppendType(storeTypeUsage, column.IsNullable ?? true, column.IsIdentity); if (!String.IsNullOrEmpty(column.DefaultValueSql)) { ddlBuilder.AppendSql(" DEFAULT "); ddlBuilder.AppendSql(column.DefaultValueSql); } ddlBuilder.AppendNewLine(); } } if (migrationOperation.PrimaryKey != null && autoincrementColumnName == null) { ddlBuilder.AppendSql(","); ddlBuilder.AppendSql(GenerateSqlStatementConcrete(migrationOperation.PrimaryKey)); } ddlBuilder.AppendSql(")"); return(ddlBuilder.GetCommandText()); }
string BuildPropertyType(PropertyModel propertyModel) { var storeTypeName = propertyModel.StoreType; var typeUsage = ProviderManifest.GetStoreType(propertyModel.TypeUsage); if (!string.IsNullOrWhiteSpace(storeTypeName)) { typeUsage = BuildStoreTypeUsage(storeTypeName, propertyModel) ?? typeUsage; } return(SqlGenerator.GetSqlPrimitiveType(typeUsage)); }
private string GenerateSqlStatementConcrete(AlterColumnOperation migrationOperation) { DB2DdlBuilder ddlBuilder = new DB2DdlBuilder(); ddlBuilder.AppendSql("ALTER TABLE "); ddlBuilder.AppendIdentifier(migrationOperation.Table); ddlBuilder.AppendSql(" ALTER COLUMN "); ColumnModel column = migrationOperation.Column; ddlBuilder.AppendIdentifier(column.Name); ddlBuilder.AppendSql(" "); TypeUsage storeType = ProviderManifest.GetStoreType(column.TypeUsage); ddlBuilder.AppendType(storeType, column.IsNullable ?? true, column.IsIdentity); ddlBuilder.AppendNewLine(); return(ddlBuilder.GetCommandText()); }
private string GenerateSqlStatementConcrete(CreateTableOperation migrationOperation) { DB2DdlBuilder ddlBuilder = new DB2DdlBuilder(); ddlBuilder.AppendSql("CREATE TABLE "); ddlBuilder.AppendIdentifier(migrationOperation.Name); ddlBuilder.AppendSql(" ("); ddlBuilder.AppendNewLine(); bool first = true; foreach (ColumnModel column in migrationOperation.Columns) { if (first) { first = false; } else { ddlBuilder.AppendSql(","); } ddlBuilder.AppendSql(" "); ddlBuilder.AppendIdentifier(column.Name); ddlBuilder.AppendSql(" "); TypeUsage storeTypeUsage = ProviderManifest.GetStoreType(column.TypeUsage); ddlBuilder.AppendType(storeTypeUsage, column.IsNullable ?? true, column.IsIdentity); ddlBuilder.AppendNewLine(); } ddlBuilder.AppendSql(")"); if (migrationOperation.PrimaryKey != null) { ddlBuilder.AppendSql(BATCHTERMINATOR); ddlBuilder.AppendSql(GenerateSqlStatementConcrete(migrationOperation.PrimaryKey)); } return(ddlBuilder.GetCommandText()); }