Skip to content

Commit d3dfcc7

Browse files
committed
Add tests and date/time types
1 parent 760f88c commit d3dfcc7

File tree

2 files changed

+40
-6
lines changed

2 files changed

+40
-6
lines changed

DuckDB.NET.Data/Internal/ClrToDuckDBConverter.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,12 @@ private static DuckDBValue CreateCollectionValue(ICollection collection)
8989
ICollection<DateTime> items => CreateCollectionValue(DuckDBType.Date, items),
9090
ICollection<DateTimeOffset> items => CreateCollectionValue(DuckDBType.TimeTz, items),
9191
ICollection<TimeSpan> items => CreateCollectionValue(DuckDBType.Interval, items),
92-
ICollection<object> items => CreateCollectionValue(DuckDBType.List, items),
92+
ICollection<DuckDBDateOnly> items => CreateCollectionValue(DuckDBType.Date, items),
93+
ICollection<DuckDBTimeOnly> items => CreateCollectionValue(DuckDBType.Time, items),
94+
#if NET6_0_OR_GREATER
95+
ICollection<DateOnly> items => CreateCollectionValue(DuckDBType.Date, items),
96+
ICollection<TimeOnly> items => CreateCollectionValue(DuckDBType.Time, items),
97+
#endif
9398
_ => throw new InvalidOperationException($"Cannot convert collection type {collection.GetType().FullName} to DuckDBValue.")
9499
};
95100
}

DuckDB.NET.Test/Parameters/ListParameterTests.cs

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ private void TestInsertSelect<T>(string duckDbType, Func<Faker, T> generator, in
3131

3232
var value = reader.GetFieldValue<List<T>>(0);
3333
value.Should().BeEquivalentTo(list);
34-
35-
var arrayValue = reader.GetFieldValue<List<T>>(1);
34+
35+
var arrayValue = reader.GetFieldValue<List<T>>(1);
3636
arrayValue.Should().BeEquivalentTo(list.Take(10));
37-
37+
3838
Command.CommandText = $"DROP TABLE ParameterListTest";
3939
Command.ExecuteNonQuery();
4040
}
@@ -99,7 +99,7 @@ public void CanBindULongList()
9999
{
100100
TestInsertSelect("UBigInt", faker => faker.Random.ULong());
101101
}
102-
102+
103103
[Fact]
104104
public void CanBindFloatList()
105105
{
@@ -129,7 +129,7 @@ public void CanBindDateTimeList()
129129
{
130130
TestInsertSelect("Date", faker => faker.Date.Past().Date);
131131
}
132-
132+
133133
//[Fact]
134134
//public void CanBindDateTimeOffsetList()
135135
//{
@@ -152,4 +152,33 @@ public void CanBindIntervalList()
152152
return TimeSpan.FromTicks(timespan.Ticks - timespan.Ticks % 10);
153153
});
154154
}
155+
156+
[Fact]
157+
public void CanBindDuckDBDateOnlyList()
158+
{
159+
TestInsertSelect("Date", faker => (DuckDBDateOnly)faker.Date.Past().Date);
160+
}
161+
162+
[Fact]
163+
public void CanBindDuckDBTimeOnlyList()
164+
{
165+
TestInsertSelect("Time", faker => (DuckDBTimeOnly)faker.Date.Past());
166+
}
167+
168+
[Fact]
169+
public void CanBindDateOnlyList()
170+
{
171+
TestInsertSelect("Date", faker => DateOnly.FromDateTime(faker.Date.Past().Date));
172+
}
173+
174+
[Fact]
175+
public void CanBindTimeOnlyList()
176+
{
177+
TestInsertSelect("Time", faker =>
178+
{
179+
//Truncate nanoseconds because duckdb doesn't store it.
180+
var dateTime = faker.Date.Past();
181+
return new TimeOnly(dateTime.TimeOfDay.Ticks - dateTime.TimeOfDay.Ticks % 10);
182+
});
183+
}
155184
}

0 commit comments

Comments
 (0)