Skip to content
Merged
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
6 changes: 3 additions & 3 deletions src/Npgsql/PostgresDatabaseInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,9 @@ elemtyptype IN ('b', 'r', 'm', 'e', 'd') OR -- Array of base, range, multirange,
))
ORDER BY CASE
WHEN typtype IN ('b', 'e', 'p') THEN 0 -- First base types, enums, pseudo-types
WHEN typtype = 'r' THEN 1 -- Ranges after
WHEN typtype = 'm' THEN 2 -- Multiranges after
WHEN typtype = 'c' THEN 3 -- Composites after
WHEN typtype = 'c' THEN 1 -- Composites after (fields loaded later in 2nd pass)
WHEN typtype = 'r' THEN 2 -- Ranges after
WHEN typtype = 'm' THEN 3 -- Multiranges after
WHEN typtype = 'd' AND elemtyptype <> 'a' THEN 4 -- Domains over non-arrays after
WHEN typtype = 'a' THEN 5 -- Arrays after
WHEN typtype = 'd' AND elemtyptype = 'a' THEN 6 -- Domains over arrays last
Expand Down
36 changes: 36 additions & 0 deletions test/Npgsql.Tests/Types/CompositeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,42 @@ await AssertType(
npgsqlDbType: null);
}

[Test]
public async Task CompositeOverRange()
{
await using var adminConnection = await OpenConnectionAsync();
var type = await GetTempTypeName(adminConnection);
var rangeType = await GetTempTypeName(adminConnection);

await adminConnection.ExecuteNonQueryAsync($"CREATE TYPE {type} AS (x int, some_text text); CREATE TYPE {rangeType} AS RANGE(subtype={type})");

var dataSourceBuilder = CreateDataSourceBuilder();
dataSourceBuilder.MapComposite<SomeComposite>(type);
dataSourceBuilder.EnableUnmappedTypes();
await using var dataSource = dataSourceBuilder.Build();
await using var connection = await dataSource.OpenConnectionAsync();

var composite1 = new SomeComposite
{
SomeText = "foo",
X = 8
};

var composite2 = new SomeComposite
{
SomeText = "bar",
X = 42
};

await AssertType(
connection,
new NpgsqlRange<SomeComposite>(composite1, composite2),
"[\"(8,foo)\",\"(42,bar)\"]",
rangeType,
npgsqlDbType: null,
isDefaultForWriting: false);
}

#region Test Types

readonly struct DuplicateOneLongOneBool
Expand Down