From c6cc7338f57aea0a03ff5e79d3848092969619d5 Mon Sep 17 00:00:00 2001 From: Giorgi Date: Fri, 14 Jun 2024 10:54:35 +0400 Subject: [PATCH] Initialize writers only once --- DuckDB.NET.Data/DuckDBAppender.cs | 20 ++++++++----------- DuckDB.NET.Test/DuckDBManagedAppenderTests.cs | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/DuckDB.NET.Data/DuckDBAppender.cs b/DuckDB.NET.Data/DuckDBAppender.cs index ae1fb5c..5174279 100644 --- a/DuckDB.NET.Data/DuckDBAppender.cs +++ b/DuckDB.NET.Data/DuckDBAppender.cs @@ -39,6 +39,13 @@ internal unsafe DuckDBAppender(Native.DuckDBAppender appender, string qualifiedT } dataChunk = NativeMethods.DataChunks.DuckDBCreateDataChunk(logicalTypeHandles, columnCount); + + for (long index = 0; index < vectorWriters.LongLength; index++) + { + var vector = NativeMethods.DataChunks.DuckDBDataChunkGetVector(dataChunk, index); + + vectorWriters[index] = VectorDataWriterFactory.CreateWriter(vector, logicalTypes[index]); + } } public DuckDBAppenderRow CreateRow() @@ -48,11 +55,10 @@ public DuckDBAppenderRow CreateRow() throw new InvalidOperationException("Appender is already closed"); } - if (rowCount % DuckDBVectorSize == 0) + if (rowCount == DuckDBVectorSize) { AppendDataChunk(); - InitVectorWriters(); rowCount = 0; } @@ -95,16 +101,6 @@ public void Dispose() } } - private unsafe void InitVectorWriters() - { - for (long index = 0; index < vectorWriters.LongLength; index++) - { - var vector = NativeMethods.DataChunks.DuckDBDataChunkGetVector(dataChunk, index); - - vectorWriters[index] = VectorDataWriterFactory.CreateWriter(vector, logicalTypes[index]); - } - } - private void AppendDataChunk() { NativeMethods.DataChunks.DuckDBDataChunkSetSize(dataChunk, rowCount); diff --git a/DuckDB.NET.Test/DuckDBManagedAppenderTests.cs b/DuckDB.NET.Test/DuckDBManagedAppenderTests.cs index ec2bf60..ac788a3 100644 --- a/DuckDB.NET.Test/DuckDBManagedAppenderTests.cs +++ b/DuckDB.NET.Test/DuckDBManagedAppenderTests.cs @@ -197,7 +197,7 @@ public void GuidValues() Command.CommandText = "CREATE TABLE managedAppenderGuids(a UUID);"; Command.ExecuteNonQuery(); - var guids = GetRandomList(faker => faker.Random.Guid()); + var guids = GetRandomList(faker => faker.Random.Guid(), 5000); guids.Add(null); using (var appender = Connection.CreateAppender("managedAppenderGuids"))