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

Giorgi / DuckDB.NET / 10762260192

08 Sep 2024 06:40PM UTC coverage: 90.033% (-0.2%) from 90.226%
10762260192

push

github

Giorgi
Merge branch 'nightly-varint' into nightly-build

886 of 1013 branches covered (87.46%)

Branch coverage included in aggregate %.

45 of 48 new or added lines in 2 files covered. (93.75%)

32 existing lines in 5 files now uncovered.

1833 of 2007 relevant lines covered (91.33%)

876732.29 hits per line

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

81.74
/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)
873✔
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,452✔
19
    internal DuckDBType ColumnType => columnType;
3,499,397✔
20

21
    public void WriteNull(ulong rowIndex)
22
    {
23
        if (validity == default)
4,863,677✔
24
        {
25
            NativeMethods.Vectors.DuckDBVectorEnsureValidityWritable(Vector);
661✔
26
            validity = NativeMethods.Vectors.DuckDBVectorGetValidity(Vector);
661✔
27
        }
28

29
        NativeMethods.ValidityMask.DuckDBValiditySetRowValidity(validity, rowIndex, false);
4,863,677✔
30
    }
4,863,677✔
31

32
    public void WriteValue<T>(T value, ulong rowIndex)
33
    {
34
        if (value == null)
24,692,086✔
35
        {
36
            WriteNull(rowIndex);
4,863,677✔
37
            return;
4,863,677✔
38
        }
39

40
        _ = value switch
19,828,409!
41
        {
19,828,409✔
42
            bool val => AppendBool(val, rowIndex),
1,118,524✔
43

19,828,409✔
44
            sbyte val => AppendNumeric(val, rowIndex),
1,125,535✔
45
            short val => AppendNumeric(val, rowIndex),
1,118,039✔
46
            int val => AppendNumeric(val, rowIndex),
1,542,072✔
47
            long val => AppendNumeric(val, rowIndex),
1,237,657✔
48
            byte val => AppendNumeric(val, rowIndex),
1,120,339✔
49
            ushort val => AppendNumeric(val, rowIndex),
1,135,331✔
50
            uint val => AppendNumeric(val, rowIndex),
1,121,219✔
51
            ulong val => AppendNumeric(val, rowIndex),
1,119,670✔
52
            float val => AppendNumeric(val, rowIndex),
1,122,584✔
53
            double val => AppendNumeric(val, rowIndex),
1,115,714✔
54

19,828,409✔
55
            decimal val => AppendDecimal(val, rowIndex),
1,124,560✔
56
            BigInteger val => AppendBigInteger(val, rowIndex),
1,496,253✔
57

19,828,409✔
58
            string val => AppendString(val, rowIndex),
784,972✔
59
            Guid val => AppendGuid(val, rowIndex),
1,131,364✔
60
            DateTime val => AppendDateTime(val, rowIndex),
765,110✔
61
            TimeSpan val => AppendTimeSpan(val, rowIndex),
753,422✔
UNCOV
62
            DuckDBDateOnly val => AppendDateOnly(val, rowIndex),
×
UNCOV
63
            DuckDBTimeOnly val => AppendTimeOnly(val, rowIndex),
×
64
#if NET6_0_OR_GREATER
19,828,409✔
65
            DateOnly val => AppendDateOnly(val, rowIndex),
120✔
66
            TimeOnly val => AppendTimeOnly(val, rowIndex),
60✔
67
#endif
19,828,409✔
68
            DateTimeOffset val => AppendDateTimeOffset(val, rowIndex),
60✔
69
            ICollection val => AppendCollection(val, rowIndex),
895,804✔
UNCOV
70
            _ => ThrowException<T>()
×
71
        };
19,828,409✔
UNCOV
72
    }
×
73

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

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

UNCOV
78
    internal virtual bool AppendTimeSpan(TimeSpan value, ulong rowIndex) => ThrowException<TimeSpan>();
×
79

UNCOV
80
    internal virtual bool AppendGuid(Guid value, ulong rowIndex) => ThrowException<Guid>();
×
81

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

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

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

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

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

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

UNCOV
96
    internal virtual bool AppendTimeOnly(DuckDBTimeOnly value, ulong rowIndex) => ThrowException<DuckDBTimeOnly>();
×
97

UNCOV
98
    internal virtual bool AppendDateTimeOffset(DateTimeOffset value, ulong rowIndex) => ThrowException<DateTimeOffset>();
×
99

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

UNCOV
102
    internal virtual bool AppendBigInteger(BigInteger value, ulong rowIndex) => ThrowException<BigInteger>();
×
103

UNCOV
104
    internal virtual bool AppendCollection(ICollection value, ulong rowIndex) => ThrowException<bool>();
×
105

106
    private bool ThrowException<T>()
107
    {
108
        throw new InvalidOperationException($"Cannot write {typeof(T).Name} to {columnType} column");
3✔
109
    }
110

111
    internal bool AppendValueInternal<T>(T value, ulong rowIndex) where T : unmanaged
112
    {
113
        ((T*)vectorData)[rowIndex] = value;
19,037,428✔
114
        return true;
19,037,428✔
115
    }
116

117
    internal void InitializerWriter()
118
    {
119
        validity = default;
1,600✔
120
        vectorData = NativeMethods.Vectors.DuckDBVectorGetData(Vector);
1,600✔
121
    }
1,600✔
122
}
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