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

Giorgi / DuckDB.NET / 10773748422

09 Sep 2024 01:01PM UTC coverage: 89.795% (-0.2%) from 89.997%
10773748422

push

github

Giorgi
Merge branch 'nightly-builds' into develop

920 of 1056 branches covered (87.12%)

Branch coverage included in aggregate %.

192 of 232 new or added lines in 23 files covered. (82.76%)

5 existing lines in 3 files now uncovered.

1887 of 2070 relevant lines covered (91.16%)

897099.16 hits per line

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

81.82
/DuckDB.NET.Data/Internal/Writer/VectorDataWriterBase.cs
1
using DuckDB.NET.Data.Writer;
2
using DuckDB.NET.Native;
3
using System;
4
using System.Collections;
5
using System.Numerics;
6

7
namespace DuckDB.NET.Data.Internal.Writer;
8

9
internal unsafe class VectorDataWriterBase(IntPtr vector, void* vectorData, DuckDBType columnType)
942✔
10
#if NET8_0_OR_GREATER
11
#pragma warning disable DuckDBNET001
12
    : IDuckDBDataWriter
13
#pragma warning restore DuckDBNET001
14
#endif
15
{
16
    private ulong* validity;
17

18
    internal IntPtr Vector => vector;
789,231✔
19
    internal DuckDBType ColumnType => columnType;
3,664,045✔
20

21
    public void WriteNull(ulong rowIndex)
22
    {
23
        if (validity == default)
5,248,460✔
24
        {
25
            NativeMethods.Vectors.DuckDBVectorEnsureValidityWritable(Vector);
762✔
26
            validity = NativeMethods.Vectors.DuckDBVectorGetValidity(Vector);
762✔
27
        }
28

29
        NativeMethods.ValidityMask.DuckDBValiditySetRowValidity(validity, rowIndex, false);
5,248,460✔
30
    }
5,248,460✔
31

32
    public void WriteValue<T>(T value, ulong rowIndex)
33
    {
34
        if (value == null)
26,285,922✔
35
        {
36
            WriteNull(rowIndex);
5,248,460✔
37
            return;
5,248,460✔
38
        }
39

40
        _ = value switch
21,037,462!
41
        {
21,037,462✔
42
            bool val => AppendBool(val, rowIndex),
1,118,114✔
43

21,037,462✔
44
            sbyte val => AppendNumeric(val, rowIndex),
1,120,046✔
45
            short val => AppendNumeric(val, rowIndex),
1,119,869✔
46
            int val => AppendNumeric(val, rowIndex),
1,552,679✔
47
            long val => AppendNumeric(val, rowIndex),
1,248,451✔
48
            byte val => AppendNumeric(val, rowIndex),
1,122,532✔
49
            ushort val => AppendNumeric(val, rowIndex),
1,125,891✔
50
            uint val => AppendNumeric(val, rowIndex),
1,130,032✔
51
            ulong val => AppendNumeric(val, rowIndex),
1,123,994✔
52
            float val => AppendNumeric(val, rowIndex),
1,122,144✔
53
            double val => AppendNumeric(val, rowIndex),
1,121,938✔
54

21,037,462✔
55
            decimal val => AppendDecimal(val, rowIndex),
1,127,512✔
56
            BigInteger val => AppendBigInteger(val, rowIndex),
1,491,887✔
57

21,037,462✔
58
            Enum val => AppendEnum(val, rowIndex),
555,042✔
59

21,037,462✔
60
            string val => AppendString(val, rowIndex),
1,349,713✔
61
            Guid val => AppendGuid(val, rowIndex),
1,136,980✔
62
            DateTime val => AppendDateTime(val, rowIndex),
765,982✔
63
            TimeSpan val => AppendTimeSpan(val, rowIndex),
754,038✔
64
            DuckDBDateOnly val => AppendDateOnly(val, rowIndex),
×
65
            DuckDBTimeOnly val => AppendTimeOnly(val, rowIndex),
×
66
#if NET6_0_OR_GREATER
21,037,462✔
67
            DateOnly val => AppendDateOnly(val, rowIndex),
120✔
68
            TimeOnly val => AppendTimeOnly(val, rowIndex),
60✔
69
#endif
21,037,462✔
70
            DateTimeOffset val => AppendDateTimeOffset(val, rowIndex),
60✔
71
            ICollection val => AppendCollection(val, rowIndex),
950,378✔
72
            _ => ThrowException<T>()
×
73
        };
21,037,462✔
74
    }
×
75

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

NEW
78
    internal virtual bool AppendDecimal(decimal value, ulong rowIndex) => ThrowException<decimal>();
×
79

NEW
80
    internal virtual bool AppendTimeSpan(TimeSpan value, ulong rowIndex) => ThrowException<TimeSpan>();
×
81

NEW
82
    internal virtual bool AppendGuid(Guid value, ulong rowIndex) => ThrowException<Guid>();
×
83

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

NEW
86
    internal virtual bool AppendString(string value, ulong rowIndex) => ThrowException<string>();
×
87

NEW
88
    internal virtual bool AppendDateTime(DateTime value, ulong rowIndex) => ThrowException<DateTime>();
×
89

90
#if NET6_0_OR_GREATER
NEW
91
    internal virtual bool AppendDateOnly(DateOnly value, ulong rowIndex) => ThrowException<DateOnly>();
×
92

NEW
93
    internal virtual bool AppendTimeOnly(TimeOnly value, ulong rowIndex) => ThrowException<TimeOnly>();
×
94
#endif
95

NEW
96
    internal virtual bool AppendDateOnly(DuckDBDateOnly value, ulong rowIndex) => ThrowException<DuckDBDateOnly>();
×
97

NEW
98
    internal virtual bool AppendTimeOnly(DuckDBTimeOnly value, ulong rowIndex) => ThrowException<DuckDBTimeOnly>();
×
99

NEW
100
    internal virtual bool AppendDateTimeOffset(DateTimeOffset value, ulong rowIndex) => ThrowException<DateTimeOffset>();
×
101

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

NEW
104
    internal virtual bool AppendBigInteger(BigInteger value, ulong rowIndex) => ThrowException<BigInteger>();
×
105

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

NEW
108
    internal virtual bool AppendCollection(ICollection value, ulong rowIndex) => ThrowException<bool>();
×
109

110
    private bool ThrowException<T>()
111
    {
112
        throw new InvalidOperationException($"Cannot write {typeof(T).Name} to {columnType} column");
3✔
113
    }
114

115
    internal bool AppendValueInternal<T>(T value, ulong rowIndex) where T : unmanaged
116
    {
117
        ((T*)vectorData)[rowIndex] = value;
20,247,078✔
118
        return true;
20,247,078✔
119
    }
120

121
    internal void InitializerWriter()
122
    {
123
        validity = default;
1,690✔
124
        vectorData = NativeMethods.Vectors.DuckDBVectorGetData(Vector);
1,690✔
125
    }
1,690✔
126

127
    public virtual void Dispose()
128
    {
129
        
130
    }
540✔
131
}
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