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

Giorgi / DuckDB.NET / 10762504699

08 Sep 2024 07:21PM UTC coverage: 89.795% (-0.2%) from 90.033%
10762504699

push

github

Giorgi
Merge branch 'develop' into nightly-builds

920 of 1056 branches covered (87.12%)

Branch coverage included in aggregate %.

58 of 68 new or added lines in 8 files covered. (85.29%)

1 existing line in 1 file now uncovered.

1887 of 2070 relevant lines covered (91.16%)

896537.08 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;
793,777✔
19
    internal DuckDBType ColumnType => columnType;
3,653,275✔
20

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

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

32
    public void WriteValue<T>(T value, ulong rowIndex)
33
    {
34
        if (value == null)
26,296,133✔
35
        {
36
            WriteNull(rowIndex);
5,252,326✔
37
            return;
5,252,326✔
38
        }
39

40
        _ = value switch
21,043,807!
41
        {
21,043,807✔
42
            bool val => AppendBool(val, rowIndex),
1,131,873✔
43

21,043,807✔
44
            sbyte val => AppendNumeric(val, rowIndex),
1,127,687✔
45
            short val => AppendNumeric(val, rowIndex),
1,125,116✔
46
            int val => AppendNumeric(val, rowIndex),
1,559,988✔
47
            long val => AppendNumeric(val, rowIndex),
1,246,580✔
48
            byte val => AppendNumeric(val, rowIndex),
1,120,957✔
49
            ushort val => AppendNumeric(val, rowIndex),
1,121,127✔
50
            uint val => AppendNumeric(val, rowIndex),
1,120,211✔
51
            ulong val => AppendNumeric(val, rowIndex),
1,108,823✔
52
            float val => AppendNumeric(val, rowIndex),
1,126,525✔
53
            double val => AppendNumeric(val, rowIndex),
1,128,766✔
54

21,043,807✔
55
            decimal val => AppendDecimal(val, rowIndex),
1,117,495✔
56
            BigInteger val => AppendBigInteger(val, rowIndex),
1,498,727✔
57

21,043,807✔
58
            Enum val => AppendEnum(val, rowIndex),
569,357✔
59

21,043,807✔
60
            string val => AppendString(val, rowIndex),
1,352,086✔
61
            Guid val => AppendGuid(val, rowIndex),
1,132,806✔
62
            DateTime val => AppendDateTime(val, rowIndex),
755,467✔
63
            TimeSpan val => AppendTimeSpan(val, rowIndex),
749,683✔
64
            DuckDBDateOnly val => AppendDateOnly(val, rowIndex),
×
65
            DuckDBTimeOnly val => AppendTimeOnly(val, rowIndex),
×
66
#if NET6_0_OR_GREATER
21,043,807✔
67
            DateOnly val => AppendDateOnly(val, rowIndex),
120✔
68
            TimeOnly val => AppendTimeOnly(val, rowIndex),
60✔
69
#endif
21,043,807✔
70
            DateTimeOffset val => AppendDateTimeOffset(val, rowIndex),
60✔
71
            ICollection val => AppendCollection(val, rowIndex),
950,293✔
72
            _ => ThrowException<T>()
×
73
        };
21,043,807✔
74
    }
×
75

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

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

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

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

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

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

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

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

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

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

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

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

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

UNCOV
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,248,871✔
118
        return true;
20,248,871✔
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