Skip to content

Commit f352d6b

Browse files
bucweatmsi-cxb
andauthored
added BulkDataLoad that implements the Bulk Data Loading example from the docs. (#279)
Co-authored-by: charlie buckheit <[email protected]>
1 parent 61a8f90 commit f352d6b

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

DuckDB.NET.Samples/Program.cs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using DuckDB.NET.Test.Helpers;
55
using System;
66
using System.Data.Common;
7+
using System.Diagnostics;
78
using System.IO;
89
using System.Linq;
910
using static DuckDB.NET.Native.NativeMethods;
@@ -25,6 +26,8 @@ static void Main(string[] args)
2526
AdoNetSamples();
2627

2728
LowLevelBindingsSample();
29+
30+
BulkDataLoad();
2831
}
2932

3033
private static void DapperSample()
@@ -134,6 +137,56 @@ private static void LowLevelBindingsSample()
134137
}
135138
}
136139
}
140+
141+
private static void BulkDataLoad()
142+
{
143+
Stopwatch stopwatch = Stopwatch.StartNew();
144+
145+
if (File.Exists("file.db"))
146+
{
147+
File.Delete("file.db");
148+
}
149+
150+
//using var connection = new DuckDBConnection("DataSource=:memory:");
151+
using var connection = new DuckDBConnection("Data Source=file.db");
152+
connection.Open();
153+
154+
using (var duckDbCommand = connection.CreateCommand())
155+
{
156+
var table = "CREATE TABLE AppenderTest(i INTEGER, f FLOAT, d DOUBLE,c VARCHAR);";
157+
duckDbCommand.CommandText = table;
158+
duckDbCommand.ExecuteNonQuery();
159+
}
160+
161+
var rows = 100000;
162+
using (var appender = connection.CreateAppender("AppenderTest"))
163+
{
164+
stopwatch.Start();
165+
for (var i = 0; i < rows; i++)
166+
{
167+
var row = appender.CreateRow();
168+
row
169+
.AppendValue(i)
170+
.AppendValue(Convert.ToSingle(i+2))
171+
.AppendValue(Convert.ToDouble(i+4))
172+
.AppendValue($"varchar {i.ToString()}")
173+
.EndRow();
174+
}
175+
stopwatch.Stop();
176+
}
177+
178+
using var command = connection.CreateCommand();
179+
command.CommandText = "SELECT count(1) as cnt FROM AppenderTest";
180+
using var reader1 = command.ExecuteReader();
181+
PrintQueryResults(reader1);
182+
command.CommandText = "SELECT * FROM AppenderTest limit 10";
183+
using var reader2 = command.ExecuteReader();
184+
PrintQueryResults(reader2);
185+
Console.WriteLine($"ElapsedMilliseconds {stopwatch.ElapsedMilliseconds}");
186+
Console.WriteLine($"connection state before {connection.State}");
187+
Console.WriteLine($"connection state after {connection.State}");
188+
189+
}
137190

138191
private static void PrintQueryResults(DbDataReader queryResult)
139192
{

0 commit comments

Comments
 (0)