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

Giorgi / DuckDB.NET / 10460156994

19 Aug 2024 08:05PM UTC coverage: 89.935% (-0.3%) from 90.251%
10460156994

push

github

Giorgi
Check for null

878 of 1006 branches covered (87.28%)

Branch coverage included in aggregate %.

1 of 1 new or added line in 1 file covered. (100.0%)

18 existing lines in 4 files now uncovered.

1767 of 1935 relevant lines covered (91.32%)

819430.97 hits per line

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

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

7
namespace DuckDB.NET.Data;
8

9
public class DuckDBAppenderRow
10
{
11
    private int columnIndex = 0;
12
    private readonly string qualifiedTableName;
13
    private readonly VectorDataWriterBase[] vectorWriters;
14
    private readonly int rowIndex;
15

16
    internal DuckDBAppenderRow(string qualifiedTableName, VectorDataWriterBase[] vectorWriters, ulong rowIndex)
264,312✔
17
    {
18
        this.qualifiedTableName = qualifiedTableName;
264,312✔
19
        this.vectorWriters = vectorWriters;
264,312✔
20
        this.rowIndex = (int)rowIndex;
264,312✔
21
    }
264,312✔
22

23
    public void EndRow()
24
    {
25
        if (columnIndex < vectorWriters.Length)
264,294✔
26
        {
27
            throw new InvalidOperationException($"The table {qualifiedTableName} has {vectorWriters.Length} columns but you specified only {columnIndex} values");
3✔
28
        }
29
    }
264,291✔
30

31
    public DuckDBAppenderRow AppendNullValue() => AppendValueInternal<int?>(null); //Doesn't matter what type T we pass to Append when passing null.
75✔
32

33
    public DuckDBAppenderRow AppendValue(bool? value) => AppendValueInternal(value);
69✔
34

35
    public DuckDBAppenderRow AppendValue(byte[]? value) => AppendSpan(value);
6✔
36

37
    public DuckDBAppenderRow AppendValue(Span<byte> value) => AppendSpan(value);
3✔
38

39
    public DuckDBAppenderRow AppendValue(string? value) => AppendValueInternal(value);
45,108✔
40

41
    public DuckDBAppenderRow AppendValue(decimal? value) => AppendValueInternal(value);
270✔
42

43
    public DuckDBAppenderRow AppendValue(Guid? value) => AppendValueInternal(value);
15,003✔
44

45
    public DuckDBAppenderRow AppendValue(BigInteger? value) => AppendValueInternal(value);
60✔
46

47
    #region Append Signed Int
48

49
    public DuckDBAppenderRow AppendValue(sbyte? value) => AppendValueInternal(value);
78✔
50

51
    public DuckDBAppenderRow AppendValue(short? value) => AppendValueInternal(value);
60✔
52

53
    public DuckDBAppenderRow AppendValue(int? value) => AppendValueInternal(value);
249,135✔
54

55
    public DuckDBAppenderRow AppendValue(long? value) => AppendValueInternal(value);
60✔
56

57
    #endregion
58

59
    #region Append Unsigned Int
60

61
    public DuckDBAppenderRow AppendValue(byte? value) => AppendValueInternal(value);
66✔
62

63
    public DuckDBAppenderRow AppendValue(ushort? value) => AppendValueInternal(value);
60✔
64

65
    public DuckDBAppenderRow AppendValue(uint? value) => AppendValueInternal(value);
60✔
66

67
    public DuckDBAppenderRow AppendValue(ulong? value) => AppendValueInternal(value);
60✔
68

69
    #endregion
70

71
    #region Append Enum
72

73
    public DuckDBAppenderRow AppendValue<TEnum>(TEnum? value) where TEnum : Enum => AppendValueInternal(value);
15✔
74

75
    #endregion
76

77
    #region Append Float
78

79
    public DuckDBAppenderRow AppendValue(float? value) => AppendValueInternal(value);
60✔
80

81
    public DuckDBAppenderRow AppendValue(double? value) => AppendValueInternal(value);
60✔
82

83
    #endregion
84

85
    #region Append Temporal
86
#if NET6_0_OR_GREATER
87
    public DuckDBAppenderRow AppendValue(DateOnly? value) => AppendValueInternal(value);
60✔
88

89
    public DuckDBAppenderRow AppendValue(TimeOnly? value) => AppendValueInternal(value);
60✔
90
#endif
91

UNCOV
92
    public DuckDBAppenderRow AppendValue(DuckDBDateOnly? value) => AppendValueInternal(value);
×
93

UNCOV
94
    public DuckDBAppenderRow AppendValue(DuckDBTimeOnly? value) => AppendValueInternal(value);
×
95

96

97
    public DuckDBAppenderRow AppendValue(DateTime? value) => AppendValueInternal(value);
15,330✔
98

99
    public DuckDBAppenderRow AppendValue(DateTimeOffset? value) => AppendValueInternal(value);
60✔
100

101
    public DuckDBAppenderRow AppendValue(TimeSpan? value)
102
    {
103
        return AppendValueInternal(value);
60✔
104
    }
105

106
    #endregion
107

108
    #region Composite Types
109

110
    public DuckDBAppenderRow AppendValue<T>(IEnumerable<T>? value) => AppendValueInternal(value);
408,006✔
111

112
    #endregion
113

114
    private DuckDBAppenderRow AppendValueInternal<T>(T? value)
115
    {
116
        CheckColumnAccess();
733,875✔
117

118
        vectorWriters[columnIndex].AppendValue(value, rowIndex);
733,872✔
119

120
        columnIndex++;
733,857✔
121

122
        return this;
733,857✔
123
    }
124

125
    private unsafe DuckDBAppenderRow AppendSpan(Span<byte> val)
126
    {
127
        if (val == null)
9✔
128
        {
129
            return AppendNullValue();
3✔
130
        }
131

132
        CheckColumnAccess();
6✔
133

134
        fixed (byte* pSource = val)
6✔
135
        {
136
            vectorWriters[columnIndex].AppendBlob(pSource, val.Length, rowIndex);
6✔
137
        }
138

139
        columnIndex++;
6✔
140
        return this;
6✔
141
    }
142

143
    private void CheckColumnAccess()
144
    {
145
        if (columnIndex >= vectorWriters.Length)
733,881✔
146
        {
147
            throw new IndexOutOfRangeException($"The table {qualifiedTableName} has {vectorWriters.Length} columns but you are trying to append value for column {columnIndex + 1}");
3✔
148
        }
149
    }
733,878✔
150
}
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