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

Giorgi / DuckDB.NET / 22921736195

10 Mar 2026 07:24PM UTC coverage: 89.526% (+0.08%) from 89.45%
22921736195

push

github

Giorgi
Update global.json

1255 of 1463 branches covered (85.78%)

Branch coverage included in aggregate %.

2651 of 2900 relevant lines covered (91.41%)

447643.55 hits per line

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

81.82
/DuckDB.NET.Data/DataChunk/Writer/VectorDataWriterBase.cs
1
using System.Runtime.CompilerServices;
2

3
namespace DuckDB.NET.Data.DataChunk.Writer;
4

5
internal unsafe class VectorDataWriterBase(IntPtr vector, void* vectorData, DuckDBType columnType) : IDisposable, IDuckDBDataWriter
1,821✔
6
{
7
    private ulong* validity;
8

9
    internal IntPtr Vector => vector;
871,293✔
10
    internal DuckDBType ColumnType => columnType;
3,904,783✔
11

12
    public void WriteNull(ulong rowIndex)
13
    {
14
        if (validity == default)
5,237,522✔
15
        {
16
            NativeMethods.Vectors.DuckDBVectorEnsureValidityWritable(Vector);
777✔
17
            validity = NativeMethods.Vectors.DuckDBVectorGetValidity(Vector);
777✔
18
        }
19

20
        NativeMethods.ValidityMask.DuckDBValiditySetRowValidity(validity, rowIndex, false);
5,237,522✔
21
    }
5,237,522✔
22

23
    public void WriteValue<T>(T value, ulong rowIndex)
24
    {
25
        if (value == null)
26,918,897✔
26
        {
27
            WriteNull(rowIndex);
5,237,438✔
28
            return;
5,237,438✔
29
        }
30

31
        _ = value switch
21,681,459!
32
        {
21,681,459✔
33
            bool val => AppendBool(val, rowIndex),
1,119,949✔
34

21,681,459✔
35
            sbyte val => AppendNumeric(val, rowIndex),
1,195,841✔
36
            short val => AppendNumeric(val, rowIndex),
1,126,586✔
37
            int val => AppendNumeric(val, rowIndex),
1,651,292✔
38
            long val => AppendNumeric(val, rowIndex),
1,344,299✔
39

21,681,459✔
40
            byte val => AppendNumeric(val, rowIndex),
1,125,680✔
41
            ushort val => AppendNumeric(val, rowIndex),
1,122,487✔
42
            uint val => AppendNumeric(val, rowIndex),
1,113,904✔
43
            ulong val => AppendNumeric(val, rowIndex),
1,123,456✔
44

21,681,459✔
45
            float val => AppendNumeric(val, rowIndex),
1,122,275✔
46
            double val => AppendNumeric(val, rowIndex),
1,128,209✔
47

21,681,459✔
48
            decimal val => AppendDecimal(val, rowIndex),
1,180,483✔
49
            BigInteger val => AppendBigInteger(val, rowIndex),
1,501,080✔
50

21,681,459✔
51
            Enum val => AppendEnum(val, rowIndex),
555,317✔
52

21,681,459✔
53
            string val => AppendString(val, rowIndex),
1,425,884✔
54
            Guid val => AppendGuid(val, rowIndex),
1,290,123✔
55
            DateTime val => AppendDateTime(val, rowIndex),
764,857✔
56
            TimeSpan val => AppendTimeSpan(val, rowIndex),
748,356✔
57
            DuckDBDateOnly val => AppendDateOnly(val, rowIndex),
120✔
58
            DuckDBTimeOnly val => AppendTimeOnly(val, rowIndex),
60✔
59
            DateOnly val => AppendDateOnly(val, rowIndex),
×
60
            TimeOnly val => AppendTimeOnly(val, rowIndex),
×
61
            DateTimeOffset val => AppendDateTimeOffset(val, rowIndex),
120✔
62
            ICollection val => AppendCollection(val, rowIndex),
1,041,081✔
63
            _ => ThrowException<T>()
×
64
        };
21,681,459✔
65
    }
×
66

67
    internal virtual bool AppendBool(bool value, ulong rowIndex) => ThrowException<bool>();
×
68

69
    internal virtual bool AppendDecimal(decimal value, ulong rowIndex) => ThrowException<decimal>();
×
70

71
    internal virtual bool AppendTimeSpan(TimeSpan value, ulong rowIndex) => ThrowException<TimeSpan>();
×
72

73
    internal virtual bool AppendGuid(Guid value, ulong rowIndex) => ThrowException<Guid>();
×
74

75
    internal virtual bool AppendBlob(byte* value, int length, ulong rowIndex) => ThrowException<byte[]>();
×
76

77
    internal virtual bool AppendString(string value, ulong rowIndex) => ThrowException<string>();
×
78

79
    internal virtual bool AppendDateTime(DateTime value, ulong rowIndex) => ThrowException<DateTime>();
×
80

81
    internal virtual bool AppendDateOnly(DateOnly value, ulong rowIndex) => ThrowException<DateOnly>();
×
82

83
    internal virtual bool AppendTimeOnly(TimeOnly value, ulong rowIndex) => ThrowException<TimeOnly>();
×
84

85
    internal virtual bool AppendDateOnly(DuckDBDateOnly value, ulong rowIndex) => ThrowException<DuckDBDateOnly>();
×
86

87
    internal virtual bool AppendTimeOnly(DuckDBTimeOnly value, ulong rowIndex) => ThrowException<DuckDBTimeOnly>();
×
88

89
    internal virtual bool AppendDateTimeOffset(DateTimeOffset value, ulong rowIndex) => ThrowException<DateTimeOffset>();
×
90

91
    internal virtual bool AppendNumeric<T>(T value, ulong rowIndex) where T : unmanaged => ThrowException<T>();
3✔
92

93
    internal virtual bool AppendBigInteger(BigInteger value, ulong rowIndex) => ThrowException<BigInteger>();
×
94

95
    internal virtual bool AppendEnum<TEnum>(TEnum value, ulong rowIndex) where TEnum : Enum => ThrowException<TEnum>();
×
96

97
    internal virtual bool AppendCollection(ICollection value, ulong rowIndex) => ThrowException<ICollection>();
×
98

99
    private bool ThrowException<T>()
100
    {
101
        throw new InvalidOperationException($"Cannot write {typeof(T).Name} to {columnType} column");
3✔
102
    }
103

104
    [MethodImpl(MethodImplOptions.AggressiveInlining)]
105
    internal bool AppendValueInternal<T>(T value, ulong rowIndex) where T : unmanaged
106
    {
107
        ((T*)vectorData)[rowIndex] = value;
20,809,097✔
108
        return true;
20,809,097✔
109
    }
110

111
    internal void InitializeWriter()
112
    {
113
        validity = default;
1,693✔
114
        vectorData = NativeMethods.Vectors.DuckDBVectorGetData(Vector);
1,693✔
115
    }
1,693✔
116

117
    public virtual void Dispose()
118
    {
119

120
    }
1,452✔
121
}
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