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

Giorgi / DuckDB.NET / 13181745983

06 Feb 2025 02:31PM UTC coverage: 89.958% (+0.02%) from 89.937%
13181745983

push

github

Giorgi
Merge branch 'develop'

1081 of 1235 branches covered (87.53%)

Branch coverage included in aggregate %.

322 of 345 new or added lines in 20 files covered. (93.33%)

2 existing lines in 1 file now uncovered.

2108 of 2310 relevant lines covered (91.26%)

760472.2 hits per line

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

86.55
/DuckDB.NET.Bindings/DuckDBWrapperObjects.cs
1
using Microsoft.Win32.SafeHandles;
2
using System;
3
using System.Runtime.CompilerServices;
4

5
namespace DuckDB.NET.Native;
6

7
public class DuckDBDatabase() : SafeHandleZeroOrMinusOneIsInvalid(true)
51,900✔
8
{
9
    protected override bool ReleaseHandle()
10
    {
11
        NativeMethods.Startup.DuckDBClose(out handle);
51,898✔
12
        return true;
51,898✔
13
    }
14
}
15

16
public class DuckDBNativeConnection() : SafeHandleZeroOrMinusOneIsInvalid(true)
64,929✔
17
{
18
    protected override bool ReleaseHandle()
19
    {
20
        NativeMethods.Startup.DuckDBDisconnect(out handle);
64,927✔
21
        return true;
64,927✔
22
    }
23

24
    public void Interrupt()
25
    {
26
        NativeMethods.Startup.DuckDBInterrupt(this);
3✔
27
    }
3✔
28
}
29

30
public class DuckDBPreparedStatement() : SafeHandleZeroOrMinusOneIsInvalid(true)
157,584✔
31
{
32
    protected override bool ReleaseHandle()
33
    {
34
        NativeMethods.PreparedStatements.DuckDBDestroyPrepare(out handle);
157,582✔
35
        return true;
157,582✔
36
    }
37
}
38

39
public class DuckDBConfig() : SafeHandleZeroOrMinusOneIsInvalid(true)
51,900✔
40
{
41
    protected override bool ReleaseHandle()
42
    {
43
        NativeMethods.Configuration.DuckDBDestroyConfig(out handle);
51,900✔
44
        return true;
51,900✔
45
    }
46
}
47

48
public class DuckDBAppender() : SafeHandleZeroOrMinusOneIsInvalid(true)
186✔
49
{
50
    protected override bool ReleaseHandle()
51
    {
52
        return NativeMethods.Appender.DuckDBDestroyAppender(out handle) == DuckDBState.Success;
186✔
53
    }
54
}
55

56
public class DuckDBExtractedStatements() : SafeHandleZeroOrMinusOneIsInvalid(true)
157,476✔
57
{
58
    protected override bool ReleaseHandle()
59
    {
60
        NativeMethods.ExtractStatements.DuckDBDestroyExtracted(out handle);
157,474✔
61

62
        return true;
157,474✔
63
    }
64
}
65

66
public class DuckDBLogicalType() : SafeHandleZeroOrMinusOneIsInvalid(true)
65,717✔
67
{
68
    protected override bool ReleaseHandle()
69
    {
70
        NativeMethods.LogicalType.DuckDBDestroyLogicalType(out handle);
65,156✔
71
        return true;
65,156✔
72
    }
73
}
74

75
public class DuckDBDataChunk : SafeHandleZeroOrMinusOneIsInvalid
76
{
77
    public DuckDBDataChunk() : base(true)
40,001✔
78
    {
79
    }
40,001✔
80

81
    public DuckDBDataChunk(IntPtr chunk) : base(false)
123✔
82
    {
83
        SetHandle(chunk);
123✔
84
    }
123✔
85

86
    protected override bool ReleaseHandle()
87
    {
88
        NativeMethods.DataChunks.DuckDBDestroyDataChunk(out handle);
39,551✔
89
        return true;
39,551✔
90
    }
91
}
92

93
public class DuckDBValue() : SafeHandleZeroOrMinusOneIsInvalid(true), IDuckDBValueReader
10,659✔
94
{
95
    private DuckDBValue[] childValues = [];
10,659✔
96

97
    protected override bool ReleaseHandle()
98
    {
99
        foreach (var value in childValues)
40,782✔
100
        {
101
            value.Dispose();
9,732✔
102
        }
103
        
104
        NativeMethods.Value.DuckDBDestroyValue(out handle);
10,659✔
105
        return true;
10,659✔
106
    }
107

108
    internal void SetChildValues(DuckDBValue[] values)
109
    {
110
        childValues = values;
396✔
111
    }
396✔
112

113
    public bool IsNull() => NativeMethods.Value.DuckDBIsNullValue(this);
3✔
114

115
    public T GetValue<T>()
116
    {
117
        var logicalType = NativeMethods.Value.DuckDBGetValueType(this);
57✔
118

119
        //Logical type is part of the duckdb_value object and it shouldn't be released separately
120
        //It will get released when the duckdb_value object is destroyed below.
121
        var add = false;
57✔
122
        logicalType.DangerousAddRef(ref add);
57✔
123

124
        var duckDBType = NativeMethods.LogicalType.DuckDBGetTypeId(logicalType);
57✔
125

126
        return duckDBType switch
57!
127
        {
57✔
128
            DuckDBType.Boolean => Cast(NativeMethods.Value.DuckDBGetBool(this)),
3✔
129

57✔
130
            DuckDBType.TinyInt => Cast(NativeMethods.Value.DuckDBGetInt8(this)),
3✔
131
            DuckDBType.SmallInt => Cast(NativeMethods.Value.DuckDBGetInt16(this)),
3✔
132
            DuckDBType.Integer => Cast(NativeMethods.Value.DuckDBGetInt32(this)),
3✔
133
            DuckDBType.BigInt => Cast(NativeMethods.Value.DuckDBGetInt64(this)),
3✔
134

57✔
135
            DuckDBType.UnsignedTinyInt => Cast(NativeMethods.Value.DuckDBGetUInt8(this)),
3✔
136
            DuckDBType.UnsignedSmallInt => Cast(NativeMethods.Value.DuckDBGetUInt16(this)),
3✔
137
            DuckDBType.UnsignedInteger => Cast(NativeMethods.Value.DuckDBGetUInt32(this)),
3✔
138
            DuckDBType.UnsignedBigInt => Cast(NativeMethods.Value.DuckDBGetUInt64(this)),
3✔
139

57✔
140
            DuckDBType.Float => Cast(NativeMethods.Value.DuckDBGetFloat(this)),
3✔
141
            DuckDBType.Double => Cast(NativeMethods.Value.DuckDBGetDouble(this)),
3✔
142
            
57✔
143
            DuckDBType.Decimal => Cast(decimal.Parse(NativeMethods.Value.DuckDBGetVarchar(this))),
3✔
144
            DuckDBType.Uuid => Cast(new Guid(NativeMethods.Value.DuckDBGetVarchar(this))),
3✔
145
            
57✔
146
            DuckDBType.HugeInt => Cast(NativeMethods.Value.DuckDBGetHugeInt(this).ToBigInteger()),
3✔
NEW
147
            DuckDBType.UnsignedHugeInt => Cast(NativeMethods.Value.DuckDBGetUHugeInt(this).ToBigInteger()),
×
148
            
57✔
149
            DuckDBType.Varchar => Cast(NativeMethods.Value.DuckDBGetVarchar(this)),
3✔
150

57✔
151
#if NET6_0_OR_GREATER
57✔
152
            DuckDBType.Date => Cast((DateOnly)NativeMethods.DateTimeHelpers.DuckDBFromDate(NativeMethods.Value.DuckDBGetDate(this))),
3✔
153
            DuckDBType.Time => Cast((TimeOnly)NativeMethods.DateTimeHelpers.DuckDBFromTime(NativeMethods.Value.DuckDBGetTime(this))),
3✔
154
#else
57✔
155
            DuckDBType.Date => Cast(NativeMethods.DateTimeHelpers.DuckDBFromDate(NativeMethods.Value.DuckDBGetDate(this)).ToDateTime()),
57✔
156
            DuckDBType.Time => Cast(NativeMethods.DateTimeHelpers.DuckDBFromTime(NativeMethods.Value.DuckDBGetTime(this)).ToDateTime()),
57✔
157
#endif
57✔
158
            //DuckDBType.TimeTz => expr,
57✔
159
            DuckDBType.Interval => Cast((TimeSpan)NativeMethods.Value.DuckDBGetInterval(this)),
3✔
160
            DuckDBType.Timestamp => Cast(NativeMethods.DateTimeHelpers.DuckDBFromTimestamp(NativeMethods.Value.DuckDBGetTimestamp(this)).ToDateTime()),
3✔
161
            //DuckDBType.TimestampS => expr,
57✔
162
            //DuckDBType.TimestampMs => expr,
57✔
163
            //DuckDBType.TimestampNs => expr,
57✔
164
            //DuckDBType.TimestampTz => expr,
57✔
165
            _ => throw new NotImplementedException($"Cannot read value of type {typeof(T).FullName}")
×
166
        };
57✔
167

168
        T Cast<TSource>(TSource value) => Unsafe.As<TSource, T>(ref value);
57✔
169
    }
170
}
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