Fix datetimeoffset formatting (#1823)

This commit is contained in:
Hai Cao
2023-01-25 11:19:30 -08:00
committed by GitHub
parent b8581920b6
commit bcf015f939
3 changed files with 41 additions and 7 deletions

View File

@@ -68,6 +68,8 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.QueryExecution
public async Task DateTimeOffsetTest()
{
await ExecuteAndVerifyResult("SELECT CAST('2020-01-01' AS DATETIMEOFFSET)", "2020-01-01 00:00:00.0000000 +00:00");
await ExecuteAndVerifyResult("SELECT CAST('2020-01-01' AS DATETIMEOFFSET(6))", "2020-01-01 00:00:00.000000 +00:00");
await ExecuteAndVerifyResult("SELECT CAST('2020-01-01' AS DATETIMEOFFSET(0))", "2020-01-01 00:00:00 +00:00");
}
[Test]

View File

@@ -432,14 +432,39 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.QueryExecution.DataStorage
{
DateTimeOffset.Now, DateTimeOffset.UtcNow, DateTimeOffset.MinValue, DateTimeOffset.MaxValue
};
// Setup: Create a DATETIMEOFFSET column
DbColumnWrapper col = new DbColumnWrapper(new TestDbColumn { DataTypeName = "datetimeoffset", NumericScale = 6 });
foreach (DateTimeOffset value in testValues)
{
string displayValue = VerifyReadWrite(sizeof(long)*2 + 1, value, (writer, val) => writer.WriteDateTimeOffset(val),
(reader, rowId) => reader.ReadDateTimeOffset(0, rowId));
(reader, rowId) => reader.ReadDateTimeOffset(0, rowId, col));
// Make sure the display value has a time string with 7 milliseconds and a time zone
Assert.True(Regex.IsMatch(displayValue, @"^[\d]{4}-[\d]{2}-[\d]{2} [\d]{2}:[\d]{2}:[\d]{2}\.[\d]{7} [+-][01][\d]:[\d]{2}$"));
// Make sure the display value has a time string with 6 milliseconds and a time zone
Assert.True(Regex.IsMatch(displayValue, @"^[\d]{4}-[\d]{2}-[\d]{2} [\d]{2}:[\d]{2}:[\d]{2}\.[\d]{6} [+-][01][\d]:[\d]{2}$"));
}
}
[Test]
public void DateTimeOffsetZeroScaleTest()
{
// Setup: Create some test values
DateTimeOffset[] testValues =
{
DateTimeOffset.Now, DateTimeOffset.UtcNow, DateTimeOffset.MinValue, DateTimeOffset.MaxValue
};
// Setup: Create a DATETIMEOFFSET column
DbColumnWrapper col = new DbColumnWrapper(new TestDbColumn { DataTypeName = "datetimeoffset", NumericScale = 0 });
foreach (DateTimeOffset value in testValues)
{
string displayValue = VerifyReadWrite(sizeof(long) * 2 + 1, value, (writer, val) => writer.WriteDateTimeOffset(val),
(reader, rowId) => reader.ReadDateTimeOffset(0, rowId, col));
// Make sure the display value has a time string with no millisecond and a time zone
Assert.True(Regex.IsMatch(displayValue, @"^[\d]{4}-[\d]{2}-[\d]{2} [\d]{2}:[\d]{2}:[\d]{2} [+-][01][\d]:[\d]{2}$"));
}
}