Skip to content

Commit ef42aba

Browse files
committed
Fix vector size calculation
1 parent 4e4afd7 commit ef42aba

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

DuckDB.NET.Data/Internal/Writer/ListVectorDataWriter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ internal override bool AppendCollection(ICollection value, int rowIndex)
2828
{
2929
var count = (ulong)value.Count;
3030

31-
ResizeVector(rowIndex, count);
31+
ResizeVector(rowIndex % (int)DuckDBGlobalData.VectorSize, count);
3232

3333
_ = value switch
3434
{
@@ -90,7 +90,7 @@ private void ResizeVector(int rowIndex, ulong count)
9090
{
9191
//If writing to a list column we need to make sure that enough space is allocated. Not needed for Arrays as DuckDB does it for us.
9292
if (!IsList || offset + count <= vectorReservedSize) return;
93-
93+
9494
var factor = 2d;
9595

9696
if (rowIndex > DuckDBGlobalData.VectorSize * 0.25 && rowIndex < DuckDBGlobalData.VectorSize * 0.5)

DuckDB.NET.Test/ManagedAppenderTests.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -274,40 +274,43 @@ public void ListValues()
274274
Command.CommandText = "CREATE TABLE managedAppenderLists(a INTEGER, b INTEGER[], c INTEGER[][]);";
275275
Command.ExecuteNonQuery();
276276

277-
var rows = 1000;
277+
var rows = 2000;
278278

279279
var lists = new List<List<int>>();
280-
281-
lists.Add(GetRandomList(faker => faker.Random.Int(), 2050 * 2));
280+
var nestedLists = new List<List<List<int>>>();
282281

283-
for (int i = 0; i < rows; i++)
282+
for (var i = 0; i < rows; i++)
284283
{
285284
lists.Add(GetRandomList(faker => faker.Random.Int(), Random.Shared.Next(0, 200)));
285+
286+
var item = new List<List<int>>();
287+
nestedLists.Add(item);
288+
289+
for (var j = 0; j < Random.Shared.Next(0, 10); j++)
290+
{
291+
item.Add(GetRandomList(faker => faker.Random.Int(), Random.Shared.Next(0, 20)));
292+
}
286293
}
287294

288295
using (var appender = Connection.CreateAppender("managedAppenderLists"))
289296
{
290-
for (int i = 0; i < rows; i++)
297+
for (var i = 0; i < rows; i++)
291298
{
292-
appender.CreateRow()
293-
.AppendValue(i)
294-
.AppendValue(lists[i])
295-
.AppendValue(new List<List<int>> { Enumerable.Range(0, i % 10 + 1).ToList(), Enumerable.Range(i + 2, 4).ToList() })
296-
.EndRow();
299+
appender.CreateRow().AppendValue(i).AppendValue(lists[i]).AppendValue(nestedLists[i]).EndRow();
297300
}
298301
}
299302

300303
Command.CommandText = "SELECT * FROM managedAppenderLists order by 1";
301304
var reader = Command.ExecuteReader();
302305

303-
int index = 0;
306+
var index = 0;
304307
while (reader.Read())
305308
{
306309
var list = reader.GetFieldValue<List<int>>(1);
307310
list.Should().BeEquivalentTo(lists[index]);
308311

309312
var nestedList = reader.GetFieldValue<List<List<int>>>(2);
310-
nestedList.Should().BeEquivalentTo(new List<List<int>> { Enumerable.Range(0, index % 10 + 1).ToList(), Enumerable.Range(index + 2, 4).ToList() });
313+
nestedList.Should().BeEquivalentTo(nestedLists[index]);
311314

312315
index++;
313316
}

0 commit comments

Comments
 (0)