Skip to content

Commit 53734da

Browse files
Fix for appending lists with null
* Add failing test * Make test pass * Alternative test implementation. Reduce data size from 2000 rows to 10 rows.
1 parent e2e2e71 commit 53734da

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

DuckDB.NET.Data/Internal/Writer/ListVectorDataWriter.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,33 +33,54 @@ internal override bool AppendCollection(ICollection value, int rowIndex)
3333
_ = value switch
3434
{
3535
IEnumerable<bool> items => WriteItems(items),
36+
IEnumerable<bool?> items => WriteItems(items),
3637

3738
IEnumerable<sbyte> items => WriteItems(items),
39+
IEnumerable<sbyte?> items => WriteItems(items),
3840
IEnumerable<short> items => WriteItems(items),
41+
IEnumerable<short?> items => WriteItems(items),
3942
IEnumerable<int> items => WriteItems(items),
43+
IEnumerable<int?> items => WriteItems(items),
4044
IEnumerable<long> items => WriteItems(items),
45+
IEnumerable<long?> items => WriteItems(items),
4146
IEnumerable<byte> items => WriteItems(items),
47+
IEnumerable<byte?> items => WriteItems(items),
4248
IEnumerable<ushort> items => WriteItems(items),
49+
IEnumerable<ushort?> items => WriteItems(items),
4350
IEnumerable<uint> items => WriteItems(items),
51+
IEnumerable<uint?> items => WriteItems(items),
4452
IEnumerable<ulong> items => WriteItems(items),
53+
IEnumerable<ulong?> items => WriteItems(items),
4554

4655
IEnumerable<float> items => WriteItems(items),
56+
IEnumerable<float?> items => WriteItems(items),
4757
IEnumerable<double> items => WriteItems(items),
58+
IEnumerable<double?> items => WriteItems(items),
4859

4960
IEnumerable<decimal> items => WriteItems(items),
61+
IEnumerable<decimal?> items => WriteItems(items),
5062
IEnumerable<BigInteger> items => WriteItems(items),
63+
IEnumerable<BigInteger?> items => WriteItems(items),
5164

5265
IEnumerable<string> items => WriteItems(items),
5366
IEnumerable<Guid> items => WriteItems(items),
67+
IEnumerable<Guid?> items => WriteItems(items),
5468
IEnumerable<DateTime> items => WriteItems(items),
69+
IEnumerable<DateTime?> items => WriteItems(items),
5570
IEnumerable<TimeSpan> items => WriteItems(items),
71+
IEnumerable<TimeSpan?> items => WriteItems(items),
5672
IEnumerable<DuckDBDateOnly> items => WriteItems(items),
73+
IEnumerable<DuckDBDateOnly?> items => WriteItems(items),
5774
IEnumerable<DuckDBTimeOnly> items => WriteItems(items),
75+
IEnumerable<DuckDBTimeOnly?> items => WriteItems(items),
5876
#if NET6_0_OR_GREATER
5977
IEnumerable<DateOnly> items => WriteItems(items),
78+
IEnumerable<DateOnly?> items => WriteItems(items),
6079
IEnumerable<TimeOnly> items => WriteItems(items),
80+
IEnumerable<TimeOnly?> items => WriteItems(items),
6181
#endif
6282
IEnumerable<DateTimeOffset> items => WriteItems(items),
83+
IEnumerable<DateTimeOffset?> items => WriteItems(items),
6384

6485
_ => WriteItems<object>((IEnumerable<object>)value)
6586
};

DuckDB.NET.Test/DuckDBManagedAppenderListTests.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,15 @@ public void ArrayValuesInt()
129129
ListValuesInternal("Integer", faker => faker.Random.Int(), 5);
130130
}
131131

132+
[Fact]
133+
public void ListValuesNullableDouble()
134+
{
135+
ListValuesInternal("Double", faker => faker.Random.Double().OrNull(faker));
136+
}
137+
132138
private void ListValuesInternal<T>(string typeName, Func<Faker, T> generator, int? length = null)
133139
{
134-
var rows = 2000;
140+
var rows = 10;
135141
var table = $"managedAppenderLists";
136142

137143
var columnLength = length.HasValue ? length.Value.ToString() : "";

0 commit comments

Comments
 (0)