Skip to content

Commit 10a6678

Browse files
NpgsqlBox: If the corners are confused, swap them. (#5161)
Closes #5113
1 parent f7760f2 commit 10a6678

2 files changed

Lines changed: 87 additions & 8 deletions

File tree

src/Npgsql/NpgsqlTypes/NpgsqlTypes.cs

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,62 @@ public override bool Equals(object? obj)
128128
/// </remarks>
129129
public struct NpgsqlBox : IEquatable<NpgsqlBox>
130130
{
131-
public NpgsqlPoint UpperRight { get; set; }
132-
public NpgsqlPoint LowerLeft { get; set; }
131+
public NpgsqlPoint UpperRight
132+
{
133+
get => _upperRight;
134+
set
135+
{
136+
if (value.X < _lowerLeft.X)
137+
{
138+
_upperRight.X = _lowerLeft.X;
139+
_lowerLeft.X = value.X;
140+
}
141+
else
142+
{
143+
_upperRight.X = value.X;
144+
}
145+
146+
if (value.Y < _lowerLeft.Y)
147+
{
148+
_upperRight.Y = _lowerLeft.Y;
149+
_lowerLeft.Y = value.Y;
150+
}
151+
else
152+
{
153+
_upperRight.Y = value.Y;
154+
}
155+
}
156+
}
157+
private NpgsqlPoint _upperRight;
158+
159+
160+
public NpgsqlPoint LowerLeft
161+
{
162+
get => _lowerLeft;
163+
set
164+
{
165+
if (value.X > _upperRight.X)
166+
{
167+
_lowerLeft.X = _upperRight.X;
168+
_upperRight.X = value.X;
169+
}
170+
else
171+
{
172+
_lowerLeft.X = value.X;
173+
}
174+
175+
if (value.Y > _upperRight.Y)
176+
{
177+
_lowerLeft.Y = _upperRight.Y;
178+
_upperRight.Y = value.Y;
179+
}
180+
else
181+
{
182+
_lowerLeft.Y = value.Y;
183+
}
184+
}
185+
}
186+
private NpgsqlPoint _lowerLeft;
133187

134188
public NpgsqlBox(NpgsqlPoint upperRight, NpgsqlPoint lowerLeft) : this()
135189
{

test/Npgsql.Tests/Types/GeometricTypeTests.cs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,46 @@ public Task LineSegment()
2525
=> AssertType(new NpgsqlLSeg(1, 2, 3, 4), "[(1,2),(3,4)]", "lseg", NpgsqlDbType.LSeg);
2626

2727
[Test]
28-
public Task Box()
29-
=> AssertType(new NpgsqlBox(3, 4, 1, 2), "(4,3),(2,1)", "box", NpgsqlDbType.Box,
28+
public async Task Box()
29+
{
30+
await AssertType(
31+
new NpgsqlBox(top: 3, right: 4, bottom: 1, left: 2),
32+
"(4,3),(2,1)",
33+
"box",
34+
NpgsqlDbType.Box,
3035
skipArrayCheck: true); // Uses semicolon instead of comma as separator
3136

37+
await AssertType(
38+
new NpgsqlBox(top: 1, right: 2, bottom: 3, left: 4),
39+
"(4,3),(2,1)",
40+
"box",
41+
NpgsqlDbType.Box,
42+
skipArrayCheck: true); // Uses semicolon instead of comma as separator
43+
}
44+
3245
[Test]
33-
public Task Box_array()
34-
=> AssertType(
46+
public async Task Box_array()
47+
{
48+
var boxarr = await AssertType(
49+
new[]
50+
{
51+
new NpgsqlBox(top: 3, right: 4, bottom: 1, left: 2),
52+
new NpgsqlBox(top: 5, right: 6, bottom: 3, left: 4),
53+
},
54+
"{(4,3),(2,1);(6,5),(4,3)}",
55+
"box[]",
56+
NpgsqlDbType.Box | NpgsqlDbType.Array);
57+
58+
await AssertType(
3559
new[]
3660
{
37-
new NpgsqlBox(3, 4, 1, 2),
38-
new NpgsqlBox(5, 6, 3, 4)
61+
new NpgsqlBox(top: 1, right: 2, bottom: 3, left: 4),
62+
new NpgsqlBox(top: 3, right: 4, bottom: 5, left: 6)
3963
},
4064
"{(4,3),(2,1);(6,5),(4,3)}",
4165
"box[]",
4266
NpgsqlDbType.Box | NpgsqlDbType.Array);
67+
}
4368

4469
[Test]
4570
public Task Path_closed()

0 commit comments

Comments
 (0)