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

Giorgi / DuckDB.NET / 9095397334

15 May 2024 12:10PM UTC coverage: 89.5% (-0.3%) from 89.79%
9095397334

push

github

Giorgi
Merge branch 'Appender-Data-Chunk' (early part) into develop

663 of 770 branches covered (86.1%)

Branch coverage included in aggregate %.

262 of 293 new or added lines in 22 files covered. (89.42%)

9 existing lines in 2 files now uncovered.

1485 of 1630 relevant lines covered (91.1%)

11521.31 hits per line

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

81.48
/DuckDB.NET.Data/Internal/Writer/VectorDataWriterBase.cs
1
using System;
2
using System.Numerics;
3
using DuckDB.NET.Native;
4

5
namespace DuckDB.NET.Data.Internal.Writer;
6

7
internal unsafe class VectorDataWriterBase(IntPtr vector, void* vectorData, DuckDBType columnType)
207✔
8
{
9
    private unsafe ulong* validity;
10

11
    internal IntPtr Vector => vector;
30,138✔
12
    internal DuckDBType ColumnType => columnType;
1,320✔
13

14
    public unsafe void AppendNull(int rowIndex)
15
    {
16
        if (validity == default)
75✔
17
        {
18
            NativeMethods.Vectors.DuckDBVectorEnsureValidityWritable(Vector);
21✔
19
            validity = NativeMethods.Vectors.DuckDBVectorGetValidity(Vector);
21✔
20
        }
21

22
        NativeMethods.ValidityMask.DuckDBValiditySetRowValidity(validity, (ulong)rowIndex, false);
75✔
23
    }
75✔
24

25
    public unsafe void AppendValue<T>(T value, int rowIndex)
26
    {
27
        if (value == null)
61,887✔
28
        {
29
            AppendNull(rowIndex);
75✔
30
            return;
75✔
31
        }
32

33
        _ = value switch
61,812!
34
        {
61,812✔
35
            bool val => AppendBool(val, rowIndex),
69✔
36

61,812✔
37
            sbyte val => AppendNumeric(val, rowIndex),
72✔
38
            short val => AppendNumeric(val, rowIndex),
60✔
39
            int val => AppendNumeric(val, rowIndex),
30,135✔
40
            long val => AppendNumeric(val, rowIndex),
60✔
41
            byte val => AppendNumeric(val, rowIndex),
66✔
42
            ushort val => AppendNumeric(val, rowIndex),
60✔
43
            uint val => AppendNumeric(val, rowIndex),
60✔
44
            ulong val => AppendNumeric(val, rowIndex),
60✔
45
            float val => AppendNumeric(val, rowIndex),
60✔
46
            double val => AppendNumeric(val, rowIndex),
60✔
47
            
61,812✔
48
            decimal val => AppendDecimal(val, rowIndex),
270✔
49
            BigInteger val => AppendBigInteger(val, rowIndex),
60✔
50

61,812✔
51
            string val => AppendString(val, rowIndex),
30,090✔
52
            Guid val => AppendGuid(val, rowIndex),
60✔
53
            DateTime val => AppendDateTime(val, rowIndex),
330✔
54
            TimeSpan val => AppendTimeSpan(val, rowIndex),
60✔
NEW
55
            DuckDBDateOnly val => AppendDateOnly(val, rowIndex),
×
NEW
56
            DuckDBTimeOnly val => AppendTimeOnly(val, rowIndex),
×
57
#if NET6_0_OR_GREATER
61,812✔
58
            DateOnly val => AppendDateOnly(val, rowIndex),
60✔
59
            TimeOnly val => AppendTimeOnly(val, rowIndex),
60✔
60
#endif
61,812✔
61
            DateTimeOffset val => AppendDateTimeOffset(val, rowIndex),
60✔
NEW
62
            _ => ThrowException<T>()
×
63
        };
61,812✔
NEW
64
    }
×
65

NEW
66
    internal virtual bool AppendBool(bool value, int rowIndex) => ThrowException<bool>();
×
67

NEW
68
    internal virtual bool AppendDecimal(decimal value, int rowIndex) => ThrowException<decimal>();
×
69

NEW
70
    internal virtual bool AppendTimeSpan(TimeSpan value, int rowIndex) => ThrowException<TimeSpan>();
×
71

NEW
72
    internal virtual bool AppendGuid(Guid value, int rowIndex) => ThrowException<Guid>();
×
73

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

NEW
76
    internal virtual bool AppendString(string value, int rowIndex) => ThrowException<string>();
×
77

NEW
78
    internal virtual bool AppendDateTime(DateTime value, int rowIndex) => ThrowException<DateTime>();
×
79

80
#if NET6_0_OR_GREATER
NEW
81
    internal virtual bool AppendDateOnly(DateOnly value, int rowIndex) => ThrowException<DateOnly>();
×
82

NEW
83
    internal virtual bool AppendTimeOnly(TimeOnly value, int rowIndex) => ThrowException<TimeOnly>();
×
84
#endif
85

NEW
86
    internal virtual bool AppendDateOnly(DuckDBDateOnly value, int rowIndex) => ThrowException<DuckDBDateOnly>();
×
87

NEW
88
    internal virtual bool AppendTimeOnly(DuckDBTimeOnly value, int rowIndex) => ThrowException<DuckDBTimeOnly>();
×
89

NEW
90
    internal virtual bool AppendDateTimeOffset(DateTimeOffset value, int rowIndex) => ThrowException<DateTimeOffset>();
×
91

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

NEW
94
    internal virtual bool AppendBigInteger(BigInteger value, int rowIndex) => ThrowException<BigInteger>();
×
95

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

101
    internal unsafe bool AppendValueInternal<T>(T value, int rowIndex) where T : unmanaged
102
    {
103
        ((T*)vectorData)[rowIndex] = value;
31,719✔
104
        return true;
31,719✔
105
    }
106
}
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