44using DuckDB . NET . Test . Helpers ;
55using System ;
66using System . Data . Common ;
7+ using System . Diagnostics ;
78using System . IO ;
89using System . Linq ;
910using 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