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

Giorgi / DuckDB.NET / 20383681089

19 Dec 2025 10:02PM UTC coverage: 89.294% (+0.03%) from 89.262%
20383681089

push

github

Giorgi
Drop .Net Standard support

1183 of 1379 branches covered (85.79%)

Branch coverage included in aggregate %.

19 of 22 new or added lines in 13 files covered. (86.36%)

16 existing lines in 9 files now uncovered.

2295 of 2516 relevant lines covered (91.22%)

567948.85 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;
2
using System.Collections;
3
using System.Numerics;
4
using DuckDB.NET.Native;
5

6
namespace DuckDB.NET.Data.DataChunk.Writer;
7

8
internal unsafe class VectorDataWriterBase(IntPtr vector, void* vectorData, DuckDBType columnType) : IDisposable, IDuckDBDataWriter
1,227✔
9
{
10
    private ulong* validity;
11

12
    internal IntPtr Vector => vector;
852,713✔
13
    internal DuckDBType ColumnType => columnType;
3,891,677✔
14

15
    public void WriteNull(ulong rowIndex)
16
    {
17
        if (validity == default)
5,253,796✔
18
        {
19
            NativeMethods.Vectors.DuckDBVectorEnsureValidityWritable(Vector);
762✔
20
            validity = NativeMethods.Vectors.DuckDBVectorGetValidity(Vector);
762✔
21
        }
22

23
        NativeMethods.ValidityMask.DuckDBValiditySetRowValidity(validity, rowIndex, false);
5,253,796✔
24
    }
5,253,796✔
25

26
    public void WriteValue<T>(T value, ulong rowIndex)
27
    {
28
        if (value == null)
26,627,627✔
29
        {
30
            WriteNull(rowIndex);
5,253,796✔
31
            return;
5,253,796✔
32
        }
33

34
        _ = value switch
21,373,831!
35
        {
21,373,831✔
36
            bool val => AppendBool(val, rowIndex),
1,122,204✔
37

21,373,831✔
38
            sbyte val => AppendNumeric(val, rowIndex),
1,124,287✔
39
            short val => AppendNumeric(val, rowIndex),
1,115,705✔
40
            int val => AppendNumeric(val, rowIndex),
1,552,323✔
41
            long val => AppendNumeric(val, rowIndex),
1,243,996✔
42

21,373,831✔
43
            byte val => AppendNumeric(val, rowIndex),
1,126,766✔
44
            ushort val => AppendNumeric(val, rowIndex),
1,120,832✔
45
            uint val => AppendNumeric(val, rowIndex),
1,116,986✔
46
            ulong val => AppendNumeric(val, rowIndex),
1,123,804✔
47

21,373,831✔
48
            float val => AppendNumeric(val, rowIndex),
1,122,685✔
49
            double val => AppendNumeric(val, rowIndex),
1,124,779✔
50

21,373,831✔
51
            decimal val => AppendDecimal(val, rowIndex),
1,180,836✔
52
            BigInteger val => AppendBigInteger(val, rowIndex),
1,495,059✔
53

21,373,831✔
54
            Enum val => AppendEnum(val, rowIndex),
560,137✔
55

21,373,831✔
56
            string val => AppendString(val, rowIndex),
1,415,513✔
57
            Guid val => AppendGuid(val, rowIndex),
1,287,376✔
58
            DateTime val => AppendDateTime(val, rowIndex),
758,327✔
59
            TimeSpan val => AppendTimeSpan(val, rowIndex),
743,027✔
60
            DuckDBDateOnly val => AppendDateOnly(val, rowIndex),
120✔
61
            DuckDBTimeOnly val => AppendTimeOnly(val, rowIndex),
60✔
UNCOV
62
            DateOnly val => AppendDateOnly(val, rowIndex),
×
63
            TimeOnly val => AppendTimeOnly(val, rowIndex),
×
64
            DateTimeOffset val => AppendDateTimeOffset(val, rowIndex),
120✔
65
            ICollection val => AppendCollection(val, rowIndex),
1,038,889✔
66
            _ => ThrowException<T>()
×
67
        };
21,373,831✔
68
    }
×
69

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

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

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

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

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

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

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

UNCOV
84
    internal virtual bool AppendDateOnly(DateOnly value, ulong rowIndex) => ThrowException<DateOnly>();
×
85

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

UNCOV
88
    internal virtual bool AppendDateOnly(DuckDBDateOnly value, ulong rowIndex) => ThrowException<DuckDBDateOnly>();
×
89

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

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

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

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

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

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

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

107
    internal bool AppendValueInternal<T>(T value, ulong rowIndex) where T : unmanaged
108
    {
109
        ((T*)vectorData)[rowIndex] = value;
20,519,985✔
110
        return true;
20,519,985✔
111
    }
112

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

119
    public virtual void Dispose()
120
    {
121

122
    }
717✔
123
}
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

© 2025 Coveralls, Inc