Skip to content

Commit 6b1ca2c

Browse files
committed
Additional fixes to scaffolding
1 parent 0bbf683 commit 6b1ca2c

File tree

2 files changed

+7
-99
lines changed

2 files changed

+7
-99
lines changed

src/EFCore.PG/Scaffolding/Internal/NpgsqlDatabaseModelFactory.cs

Lines changed: 7 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -400,8 +400,7 @@ ORDER BY attnum
400400
else
401401
{
402402
column.DefaultValueSql = defaultValueSql;
403-
column.DefaultValue = ParseClrDefault(systemTypeName, defaultValueSql);
404-
AdjustDefaults(column, systemTypeName);
403+
column.DefaultValue = ParseDefaultValueSql(systemTypeName, defaultValueSql);
405404
}
406405

407406
// Identify IDENTITY columns, as well as SERIAL ones.
@@ -503,7 +502,7 @@ ORDER BY attnum
503502
}
504503
}
505504

506-
private static object? ParseClrDefault(string dataTypeName, string? defaultValueSql)
505+
private static object? ParseDefaultValueSql(string systemTypeName, string? defaultValueSql)
507506
{
508507
defaultValueSql = defaultValueSql?.Trim();
509508

@@ -514,22 +513,23 @@ ORDER BY attnum
514513

515514
while (defaultValueSql.StartsWith('(') && defaultValueSql.EndsWith(')'))
516515
{
517-
defaultValueSql = defaultValueSql.Substring(1, defaultValueSql.Length - 2).Trim();
516+
defaultValueSql = defaultValueSql[1..^1].Trim();
518517
}
519518

520-
return dataTypeName switch
519+
return systemTypeName switch
521520
{
522521
"bool" or "boolean" => defaultValueSql switch
523522
{
524523
"true" or "yes" or "on" or "1" => true,
525524
"false" or "no" or "off" or "0" => false,
526525
_ => null
527526
},
527+
528528
"smallint" or "int2" => short.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var @short) ? @short : null,
529529
"integer" or "int" or "int4" => int.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var @int) ? @int : null,
530530
"bigint" or "int8" => long.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var @long) ? @long : null,
531531

532-
"real" or "float4"=> float.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var @float) ? @float : null,
532+
"real" or "float4" => float.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var @float) ? @float : null,
533533
"double precision" or "float8" => double.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var @double) ? @double : null,
534534
"numeric" or "decimal" => decimal.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var @decimal) ? @decimal : null,
535535

@@ -1238,55 +1238,7 @@ nspname NOT IN ({internalSchemas})
12381238

12391239
#endregion
12401240

1241-
#region Configure default values
1242-
1243-
/// <summary>
1244-
/// Configures the default value for a column.
1245-
/// </summary>
1246-
/// <param name="column">The column to configure.</param>
1247-
/// <param name="systemTypeName">The type name of the column.</param>
1248-
private static void AdjustDefaults(DatabaseColumn column, string systemTypeName)
1249-
{
1250-
var defaultValue = column.DefaultValueSql;
1251-
if (defaultValue is null or "(NULL)")
1252-
{
1253-
column.DefaultValueSql = null;
1254-
return;
1255-
}
1256-
1257-
if (column.IsNullable)
1258-
{
1259-
return;
1260-
}
1261-
1262-
if (defaultValue == "0")
1263-
{
1264-
if (systemTypeName is "float4" or "float8" or "int2" or "int4" or "int8" or "money" or "numeric")
1265-
{
1266-
column.DefaultValueSql = null;
1267-
return;
1268-
}
1269-
}
1270-
1271-
if (defaultValue is "0.0" or "'0'::numeric")
1272-
{
1273-
if (systemTypeName is "numeric" or "float4" or "float8" or "money")
1274-
{
1275-
column.DefaultValueSql = null;
1276-
return;
1277-
}
1278-
}
1279-
1280-
if (systemTypeName == "bool" && defaultValue == "false"
1281-
|| systemTypeName == "date" && defaultValue == "'0001-01-01'::date"
1282-
|| systemTypeName == "timestamp" && defaultValue == "'1900-01-01 00:00:00'::timestamp without time zone"
1283-
|| systemTypeName == "time" && defaultValue == "'00:00:00'::time without time zone"
1284-
|| systemTypeName == "interval" && defaultValue == "'00:00:00'::interval"
1285-
|| systemTypeName == "uuid" && defaultValue == "'00000000-0000-0000-0000-000000000000'::uuid")
1286-
{
1287-
column.DefaultValueSql = null;
1288-
}
1289-
}
1241+
#region SequenceInfo
12901242

12911243
private static SequenceInfo ReadSequenceInfo(DbDataRecord record, Version postgresVersion)
12921244
{

test/EFCore.PG.FunctionalTests/Scaffolding/NpgsqlDatabaseModelFactoryTest.cs

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -934,50 +934,6 @@ public void Computed_values_are_stored()
934934
DROP TABLE "ComputedValues"
935935
""");
936936

937-
[Fact]
938-
public void Default_value_matching_clr_default_is_not_stored()
939-
=> Test(
940-
"""
941-
CREATE DOMAIN "decimalDomain" AS decimal(6);
942-
943-
CREATE TABLE "DefaultValues" (
944-
"IgnoredDefault1" int DEFAULT NULL,
945-
"IgnoredDefault2" int NOT NULL DEFAULT NULL,
946-
"IgnoredDefault9" int NOT NULL DEFAULT 0,
947-
"IgnoredDefault14" smallint NOT NULL DEFAULT 0,
948-
"IgnoredDefault3" bigint NOT NULL DEFAULT 0,
949-
"IgnoredDefault15" decimal NOT NULL DEFAULT 0,
950-
"IgnoredDefault16" decimal NOT NULL DEFAULT 0.0,
951-
"IgnoredDefault17" "decimalDomain" NOT NULL DEFAULT 0,
952-
"IgnoredDefault10" money NOT NULL DEFAULT 0,
953-
"IgnoredDefault19" money NOT NULL DEFAULT 0.0,
954-
"IgnoredDefault21" float4 NOT NULL DEFAULT 0.0,
955-
"IgnoredDefault7" float8 NOT NULL DEFAULT 0,
956-
"IgnoredDefault18" float8 NOT NULL DEFAULT 0.0,
957-
"IgnoredDefault24" float8 NOT NULL DEFAULT 0E0,
958-
"IgnoredDefault4" bool NOT NULL DEFAULT false,
959-
"IgnoredDefault25" date NOT NULL DEFAULT '0001-01-01',
960-
"IgnoredDefault26" timestamp NOT NULL DEFAULT '1900-01-01T00:00:00.000',
961-
"IgnoredDefault27" interval NOT NULL DEFAULT '00:00:00',
962-
"IgnoredDefault32" time NOT NULL DEFAULT '00:00:00',
963-
"IgnoredDefault34" uuid NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000'
964-
)
965-
""",
966-
[],
967-
[],
968-
dbModel =>
969-
{
970-
var columns = dbModel.Tables.Single().Columns;
971-
972-
Assert.All(
973-
columns,
974-
t => Assert.Null(t.DefaultValueSql));
975-
},
976-
"""
977-
DROP TABLE "DefaultValues";
978-
DROP DOMAIN "decimalDomain";
979-
""");
980-
981937
[Fact]
982938
public void ValueGenerated_is_set_for_default_and_serial_column()
983939
=> Test(

0 commit comments

Comments
 (0)