Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -933,25 +933,25 @@ FROM [sys].[views] v
}

if (type == typeof(DateTime)
&& DateTime.TryParse(defaultValueSql, out var dateTime))
&& DateTime.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var dateTime))
{
return dateTime;
}

if (type == typeof(DateOnly)
&& DateOnly.TryParse(defaultValueSql, out var dateOnly))
&& DateOnly.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var dateOnly))
{
return dateOnly;
}

if (type == typeof(TimeOnly)
&& TimeOnly.TryParse(defaultValueSql, out var timeOnly))
&& TimeOnly.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var timeOnly))
{
return timeOnly;
}

if (type == typeof(DateTimeOffset)
&& DateTimeOffset.TryParse(defaultValueSql, out var dateTimeOffset))
&& DateTimeOffset.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var dateTimeOffset))
{
return dateTimeOffset;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -469,22 +469,22 @@ private void ParseClrDefaults(DatabaseTable table)
column.DefaultValue = guid;
}
else if (type == typeof(DateTime)
&& DateTime.TryParse(defaultValueSql, out var dateTime))
&& DateTime.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var dateTime))
{
column.DefaultValue = dateTime;
}
else if (type == typeof(DateOnly)
&& DateOnly.TryParse(defaultValueSql, out var dateOnly))
&& DateOnly.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var dateOnly))
{
column.DefaultValue = dateOnly;
}
else if (type == typeof(TimeOnly)
&& TimeOnly.TryParse(defaultValueSql, out var timeOnly))
&& TimeOnly.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var timeOnly))
{
column.DefaultValue = timeOnly;
}
else if (type == typeof(DateTimeOffset)
&& DateTimeOffset.TryParse(defaultValueSql, out var dateTimeOffset))
&& DateTimeOffset.TryParse(defaultValueSql, CultureInfo.InvariantCulture, out var dateTimeOffset))
{
column.DefaultValue = dateTimeOffset;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4482,6 +4482,43 @@ B datetimeoffset DEFAULT (CONVERT([datetimeoffset],('1973-09-03T01:02:03'))),
},
"DROP TABLE MyTable;");

[Fact]
public void Simple_date_literals_are_parsed_for_HasDefaultValue_with_Persian_locale()
{
var currentCulture = CultureInfo.CurrentCulture;

try
{
CultureInfo.CurrentCulture = new CultureInfo("fa-IR");
Test(
@"
CREATE TABLE MyTable (
Id int,
A datetime2 DEFAULT (1968-10-23),
B date DEFAULT (1968-10-23),
);",
[],
[],
(dbModel, scaffoldingFactory) =>
{
var columns = dbModel.Tables.Single().Columns;

var column = columns.Single(c => c.Name == "A");
Assert.Equal("(1968-10-23)", column.DefaultValueSql);
Assert.Equal(new DateTime(1968, 10, 23, 0, 0, 0, 0, DateTimeKind.Unspecified), column.DefaultValue);

column = columns.Single(c => c.Name == "B");
Assert.Equal("(1968-10-23)", column.DefaultValueSql);
Assert.Equal(new DateOnly(1968, 10, 23), column.DefaultValue);
},
"DROP TABLE MyTable;");
}
finally
{
CultureInfo.CurrentCulture = currentCulture;
}
}

[Fact]
public void Simple_Guid_literals_are_parsed_for_HasDefaultValue()
=> Test(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -990,6 +990,52 @@ CREATE TABLE MyTable (
},
"DROP TABLE MyTable;");

[Fact]
public void Simple_date_and_time_literals_are_parsed_for_HasDefaultValue_with_Persian_locale()
{
var culture = CultureInfo.CurrentCulture;

try
{
CultureInfo.CurrentCulture = new CultureInfo("fa-IR");

Test(
@"
CREATE TABLE MyTable (
Id int,
A datetime DEFAULT (1968-10-23 12:00:01),
B date DEFAULT (1968-10-23),
C datetimeoffset DEFAULT (1973-09-03 12:00:01+10:00));

INSERT INTO MyTable VALUES (1, 2023-01-20 13:37:00, 2023-01-20, 1973-09-03 12:00:01+10:00);",
[],
[],
dbModel =>
{
var columns = dbModel.Tables.Single().Columns;

var column = columns.Single(c => c.Name == "A");
Assert.Equal("1968-10-23 12:00:01", column.DefaultValueSql);
Assert.Equal(new DateTime(1968, 10, 23, 12, 0, 1, 0, DateTimeKind.Unspecified), column.DefaultValue);

column = columns.Single(c => c.Name == "B");
Assert.Equal("1968-10-23", column.DefaultValueSql);
Assert.Equal(new DateOnly(1968, 10, 23), column.DefaultValue);

column = columns.Single(c => c.Name == "C");
Assert.Equal("1973-09-03 12:00:01+10:00", column.DefaultValueSql);
Assert.Equal(
new DateTimeOffset(new DateTime(1973, 9, 3, 12, 0, 1, 0, DateTimeKind.Unspecified), new TimeSpan(0, 10, 0, 0, 0)),
column.DefaultValue);
},
"DROP TABLE MyTable;");
}
finally
{
CultureInfo.CurrentCulture = culture;
}
}

[Fact]
public void Simple_Guid_literals_are_parsed_for_HasDefaultValue()
=> Test(
Expand Down