diff --git a/DuckDB.NET.Data/Internal/ClrToDuckDBConverter.cs b/DuckDB.NET.Data/Internal/ClrToDuckDBConverter.cs index 375d5d4..15a16e6 100644 --- a/DuckDB.NET.Data/Internal/ClrToDuckDBConverter.cs +++ b/DuckDB.NET.Data/Internal/ClrToDuckDBConverter.cs @@ -13,30 +13,36 @@ public static DuckDBValue ToDuckDBValue(this object value) => value switch { bool val => NativeMethods.Value.DuckDBCreateBool(val), + sbyte val => NativeMethods.Value.DuckDBCreateInt8(val), short val => NativeMethods.Value.DuckDBCreateInt16(val), int val => NativeMethods.Value.DuckDBCreateInt32(val), + long val => NativeMethods.Value.DuckDBCreateInt64(val), + byte val => NativeMethods.Value.DuckDBCreateUInt8(val), ushort val => NativeMethods.Value.DuckDBCreateUInt16(val), uint val => NativeMethods.Value.DuckDBCreateUInt32(val), - long val => NativeMethods.Value.DuckDBCreateInt64(val), ulong val => NativeMethods.Value.DuckDBCreateUInt64(val), + float val => NativeMethods.Value.DuckDBCreateFloat(val), double val => NativeMethods.Value.DuckDBCreateDouble(val), - string val => StringToDuckDBValue(val), + decimal val => DecimalToDuckDBValue(val), - Guid val => GuidToDuckDBValue(val), BigInteger val => NativeMethods.Value.DuckDBCreateHugeInt(new DuckDBHugeInt(val)), - byte[] val => NativeMethods.Value.DuckDBCreateBlob(val, val.Length), - TimeSpan val => NativeMethods.Value.DuckDBCreateInterval(val), + + string val => StringToDuckDBValue(val), + Guid val => GuidToDuckDBValue(val), DateTime val => NativeMethods.Value.DuckDBCreateTimestamp(NativeMethods.DateTimeHelpers.DuckDBToTimestamp(DuckDBTimestamp.FromDateTime(val))), - DateTimeOffset val => DateTimeOffsetToDuckDBValue(val), + TimeSpan val => NativeMethods.Value.DuckDBCreateInterval(val), DuckDBDateOnly val => NativeMethods.Value.DuckDBCreateDate(NativeMethods.DateTimeHelpers.DuckDBToDate(val)), DuckDBTimeOnly val => NativeMethods.Value.DuckDBCreateTime(NativeMethods.DateTimeHelpers.DuckDBToTime(val)), #if NET6_0_OR_GREATER DateOnly val => NativeMethods.Value.DuckDBCreateDate(NativeMethods.DateTimeHelpers.DuckDBToDate(val)), TimeOnly val => NativeMethods.Value.DuckDBCreateTime(NativeMethods.DateTimeHelpers.DuckDBToTime(val)), #endif + DateTimeOffset val => DateTimeOffsetToDuckDBValue(val), + byte[] val => NativeMethods.Value.DuckDBCreateBlob(val, val.Length), + ICollection val => CreateCollectionValue(val), _ => throw new InvalidCastException($"Cannot convert value of type {value.GetType().FullName} to DuckDBValue.") }; @@ -73,21 +79,24 @@ private static DuckDBValue CreateCollectionValue(ICollection collection) ICollection items => CreateCollectionValue(DuckDBType.Boolean, items), ICollection items => CreateCollectionValue(DuckDBType.TinyInt, items), - ICollection items => CreateCollectionValue(DuckDBType.UnsignedTinyInt, items), ICollection items => CreateCollectionValue(DuckDBType.SmallInt, items), - ICollection items => CreateCollectionValue(DuckDBType.UnsignedSmallInt, items), ICollection items => CreateCollectionValue(DuckDBType.Integer, items), - ICollection items => CreateCollectionValue(DuckDBType.UnsignedInteger, items), ICollection items => CreateCollectionValue(DuckDBType.BigInt, items), + + ICollection items => CreateCollectionValue(DuckDBType.UnsignedTinyInt, items), + ICollection items => CreateCollectionValue(DuckDBType.UnsignedSmallInt, items), + ICollection items => CreateCollectionValue(DuckDBType.UnsignedInteger, items), ICollection items => CreateCollectionValue(DuckDBType.UnsignedBigInt, items), + ICollection items => CreateCollectionValue(DuckDBType.Float, items), ICollection items => CreateCollectionValue(DuckDBType.Double, items), - ICollection items => CreateCollectionValue(DuckDBType.HugeInt, items), + ICollection items => CreateCollectionValue(DuckDBType.Varchar, items), - ICollection items => CreateCollectionValue(DuckDBType.Varchar, items), + ICollection items => CreateCollectionValue(DuckDBType.HugeInt, items), + ICollection items => CreateCollectionValue(DuckDBType.Varchar, items), + ICollection items => CreateCollectionValue(DuckDBType.Varchar, items), ICollection items => CreateCollectionValue(DuckDBType.Date, items), - ICollection items => CreateCollectionValue(DuckDBType.TimeTz, items), ICollection items => CreateCollectionValue(DuckDBType.Interval, items), ICollection items => CreateCollectionValue(DuckDBType.Date, items), ICollection items => CreateCollectionValue(DuckDBType.Time, items), @@ -95,6 +104,7 @@ private static DuckDBValue CreateCollectionValue(ICollection collection) ICollection items => CreateCollectionValue(DuckDBType.Date, items), ICollection items => CreateCollectionValue(DuckDBType.Time, items), #endif + ICollection items => CreateCollectionValue(DuckDBType.TimeTz, items), _ => throw new InvalidOperationException($"Cannot convert collection type {collection.GetType().FullName} to DuckDBValue.") }; } diff --git a/DuckDB.NET.Data/Internal/Writer/VectorDataWriterBase.cs b/DuckDB.NET.Data/Internal/Writer/VectorDataWriterBase.cs index dcae44b..b9c3c7b 100644 --- a/DuckDB.NET.Data/Internal/Writer/VectorDataWriterBase.cs +++ b/DuckDB.NET.Data/Internal/Writer/VectorDataWriterBase.cs @@ -45,10 +45,12 @@ public void WriteValue(T value, ulong rowIndex) short val => AppendNumeric(val, rowIndex), int val => AppendNumeric(val, rowIndex), long val => AppendNumeric(val, rowIndex), + byte val => AppendNumeric(val, rowIndex), ushort val => AppendNumeric(val, rowIndex), uint val => AppendNumeric(val, rowIndex), ulong val => AppendNumeric(val, rowIndex), + float val => AppendNumeric(val, rowIndex), double val => AppendNumeric(val, rowIndex),