Skip to content

Commit 4d349c3

Browse files
committed
InfinityAliasTest: Handles extraction non-Year part from infinity value
Some parts are extracted from infinity as null value and some parts as double.Infinity
1 parent daffaad commit 4d349c3

File tree

1 file changed

+57
-18
lines changed

1 file changed

+57
-18
lines changed

Orm/Xtensive.Orm.Tests.Sql/PostgreSql/InfinityAliasTest.cs

Lines changed: 57 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -327,12 +327,12 @@ public void DateOnlyMaxNoFilterTest()
327327

328328
while (reader.Read()) {
329329
var id = reader.GetInt64(0);
330-
var datetimeValue = DateOnly.FromDateTime(reader.GetDateTime(1));
330+
var datetimeValue = reader.GetFieldValue<DateOnly>(1);
331331
Assert.That(datetimeValue, Is.EqualTo(DateOnly.MaxValue));
332332
}
333333
}
334334

335-
var select = templates[DateTimeMaxValueTable].Clone(new SqlNodeCloneContext());
335+
var select = templates[DateOnlyMaxValueTable].Clone(new SqlNodeCloneContext());
336336
select.Columns.Add(select.From.Columns["Id"]);
337337
select.Columns.Add(select.From.Columns["Value"]);
338338

@@ -587,8 +587,25 @@ private void TestDatePartExtraction(string table, SqlDatePart part, int expected
587587
using (var reader = command.ExecuteReader()) {
588588

589589
while (reader.Read()) {
590-
var partValue = reader.GetDouble(0);
591-
CheckPartNative(partValue, expectedValueNative, aliasesEnabled);
590+
if (aliasesEnabled && part != SqlDatePart.Year) {
591+
// year from +-infinity -> +-infinity
592+
// month from +-infinity -> null (or 0 in case of versions older that 9.6)
593+
if (Driver.CoreServerInfo.ServerVersion >= StorageProviderVersion.PostgreSql96) {
594+
Assert.That(reader.IsDBNull(0));
595+
}
596+
else {
597+
var partValue = reader.GetDouble(0);
598+
Assert.That(partValue, Is.Zero);
599+
}
600+
}
601+
if (Driver.CoreServerInfo.ServerVersion < StorageProviderVersion.PostgreSql96) {
602+
var partValue = reader.GetDouble(0);
603+
Assert.That(partValue, Is.Zero);
604+
}
605+
else {
606+
var partValue = reader.GetDouble(0);
607+
CheckPartNative(partValue, expectedValueNative, aliasesEnabled);
608+
}
592609
}
593610
}
594611

@@ -615,8 +632,24 @@ private void TestDateTimePartExtraction(string table, SqlDateTimePart part, int
615632
using (var reader = command.ExecuteReader()) {
616633

617634
while (reader.Read()) {
618-
var partValue = reader.GetDouble(0);
619-
CheckPartNative(partValue, expectedValueNative, aliasesEnabled);
635+
if (aliasesEnabled && part != SqlDateTimePart.Year) {
636+
// year from +-infinity -> +-infinity
637+
// month from +-infinity -> null (or 0 in case of versions older that 9.6)
638+
if (Driver.CoreServerInfo.ServerVersion >= StorageProviderVersion.PostgreSql96)
639+
Assert.That(reader.IsDBNull(0));
640+
else {
641+
var partValue = reader.GetDouble(0);
642+
Assert.That(partValue, Is.Zero);
643+
}
644+
}
645+
if (Driver.CoreServerInfo.ServerVersion < StorageProviderVersion.PostgreSql96) {
646+
var partValue = reader.GetDouble(0);
647+
Assert.That(partValue, Is.Zero);
648+
}
649+
else {
650+
var partValue = reader.GetDouble(0);
651+
CheckPartNative(partValue, expectedValueNative, aliasesEnabled);
652+
}
620653
}
621654
}
622655

@@ -643,8 +676,24 @@ private void TestDateTimeOffsetPartExtraction(string table, SqlDateTimeOffsetPar
643676
using (var reader = command.ExecuteReader()) {
644677

645678
while (reader.Read()) {
646-
var partValue = reader.GetDouble(0);
647-
CheckPartNative(partValue, expectedValueNative, aliasesEnabled);
679+
if (aliasesEnabled && part != SqlDateTimeOffsetPart.Year) {
680+
// year from +-infinity -> +-infinity
681+
// month from +-infinity -> null (or 0 in case of versions older that 9.6)
682+
if (Driver.CoreServerInfo.ServerVersion >= StorageProviderVersion.PostgreSql96 )
683+
Assert.That(reader.IsDBNull(0));
684+
else {
685+
var partValue = reader.GetDouble(0);
686+
Assert.That(partValue, Is.Zero);
687+
}
688+
}
689+
if (Driver.CoreServerInfo.ServerVersion < StorageProviderVersion.PostgreSql96) {
690+
var partValue = reader.GetDouble(0);
691+
Assert.That(partValue, Is.Zero);
692+
}
693+
else {
694+
var partValue = reader.GetDouble(0);
695+
CheckPartNative(partValue, expectedValueNative, aliasesEnabled);
696+
}
648697
}
649698
}
650699

@@ -660,16 +709,6 @@ private void TestDateTimeOffsetPartExtraction(string table, SqlDateTimeOffsetPar
660709
CheckPart(partValue, expectedValueDml, aliasesEnabled);
661710
}
662711
}
663-
664-
command = Connection.CreateCommand($"SELECT EXTRACT (TIMEZONE FROM \"Value\") FROM public.\"{table}\"");
665-
using (command)
666-
using (var reader = command.ExecuteReader()) {
667-
668-
while (reader.Read()) {
669-
var partValue = reader.GetDouble(0);
670-
Console.WriteLine($"TIMEZONE: {partValue}");
671-
}
672-
}
673712
}
674713

675714

0 commit comments

Comments
 (0)