• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Giorgi / DuckDB.NET / 21786556530

07 Feb 2026 08:39PM UTC coverage: 89.155% (-0.07%) from 89.223%
21786556530

push

github

Giorgi
Added support for clearing in-progress adapter

Requires DuckDB 1.5

1199 of 1393 branches covered (86.07%)

Branch coverage included in aggregate %.

6 of 8 new or added lines in 1 file covered. (75.0%)

193 existing lines in 43 files now uncovered.

2336 of 2572 relevant lines covered (90.82%)

557295.56 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.0
/DuckDB.NET.Data/DataChunk/Reader/MapVectorDataReader.cs
1
namespace DuckDB.NET.Data.DataChunk.Reader;
2

3
internal sealed class MapVectorDataReader : VectorDataReaderBase
4
{
5
    private readonly VectorDataReaderBase keyReader;
6
    private readonly VectorDataReaderBase valueReader;
7

8
    internal unsafe MapVectorDataReader(IntPtr vector, void* dataPointer, ulong* validityMaskPointer, DuckDBType columnType, DuckDBLogicalType logicalColumnType, string columnName) 
9
                    : base(dataPointer, validityMaskPointer, columnType, columnName)
186✔
10
    {
11
        using var keyTypeLogical = NativeMethods.LogicalType.DuckDBMapTypeKeyType(logicalColumnType);
186✔
12
        using var valueTypeLogical = NativeMethods.LogicalType.DuckDBMapTypeValueType(logicalColumnType);
186✔
13

14
        var childVector = NativeMethods.Vectors.DuckDBListVectorGetChild(vector);
186✔
15

16
        var keyVector = NativeMethods.Vectors.DuckDBStructVectorGetChild(childVector, 0);
186✔
17
        var valueVector = NativeMethods.Vectors.DuckDBStructVectorGetChild(childVector, 1);
186✔
18

19
        keyReader = VectorDataReaderFactory.CreateReader(keyVector, keyTypeLogical, columnName);
186✔
20
        valueReader = VectorDataReaderFactory.CreateReader(valueVector, valueTypeLogical, columnName);
186✔
21
    }
372✔
22

23
    protected override Type GetColumnType()
24
    {
25
        return typeof(Dictionary<,>).MakeGenericType(keyReader.ClrType, valueReader.ClrType);
15✔
26
    }
27

28
    protected override Type GetColumnProviderSpecificType()
29
    {
UNCOV
30
        return typeof(Dictionary<,>).MakeGenericType(keyReader.ProviderSpecificClrType, valueReader.ProviderSpecificClrType);
×
31
    }
32

33
    internal override unsafe object GetValue(ulong offset, Type targetType)
34
    {
35
        if (DuckDBType != DuckDBType.Map)
39!
36
        {
UNCOV
37
            return base.GetValue(offset, targetType);
×
38
        }
39

40
        if (Activator.CreateInstance(targetType) is not IDictionary instance)
39✔
41
        {
42
            throw new InvalidOperationException($"Cannot read Map column {ColumnName} in a non-dictionary type");
3✔
43
        }
44

45
        var arguments = targetType.GetGenericArguments();
36✔
46

47
        var allowsNullValues = arguments.Length == 2 && arguments[1].AllowsNullValue(out var _, out var _);
36!
48

49
        var listData = (DuckDBListEntry*)DataPointer + offset;
36✔
50

51
        for (ulong i = 0; i < listData->Length; i++)
216✔
52
        {
53
            var childOffset = i + listData->Offset;
75✔
54

55
            var key = keyReader.GetValue(childOffset);
75✔
56
            var value = valueReader.IsValid(childOffset) ? valueReader.GetValue(childOffset) : null;
75✔
57

58
            if (allowsNullValues || value != null)
75✔
59
            {
60
                instance.Add(key, value);
72✔
61
            }
62
            else
63
            {
64
                throw new InvalidCastException($"The Map in column {ColumnName} contains null value but dictionary does not allow null values");
3✔
65
            }
66
        }
67

68
        return instance;
33✔
69
    }
70
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc