Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 6 additions & 11 deletions src/pgduckdb_types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -248,11 +248,6 @@ ConvertInt8Datum(const duckdb::Value &value) {
return Int64GetDatum(value.GetValue<int64_t>());
}

static Datum
ConvertVarCharDatum(const duckdb::Value &value) {
return ConvertToStringDatum(value);
}

static Datum
ConvertBinaryDatum(const duckdb::Value &value) {
auto str = value.GetValueUnsafe<duckdb::string_t>();
Expand Down Expand Up @@ -800,16 +795,16 @@ struct PostgresTypeTraits<NUMERICOID> {
}
};

// VARCHAR type
// TEXT type
template <>
struct PostgresTypeTraits<VARCHAROID> {
struct PostgresTypeTraits<TEXTOID> {
static constexpr int16_t typlen = -1; // variable-length
static constexpr bool typbyval = false;
static constexpr char typalign = 'i';

static inline Datum
ToDatum(const duckdb::Value &val) {
return ConvertVarCharDatum(val);
return ConvertToStringDatum(val);
}
};

Expand Down Expand Up @@ -869,7 +864,7 @@ using BitArray = PODArray<PostgresOIDMapping<VARBITOID>>;
using TimeArray = PODArray<PostgresOIDMapping<TIMEOID>>;
using TimeTzArray = PODArray<PostgresOIDMapping<TIMETZOID>>;
using UUIDArray = PODArray<PostgresOIDMapping<UUIDOID>>;
using VarCharArray = PODArray<PostgresOIDMapping<VARCHAROID>>;
using TextArray = PODArray<PostgresOIDMapping<TEXTOID>>;
using NumericArray = PODArray<PostgresOIDMapping<NUMERICOID>>;
using ByteArray = PODArray<PostgresOIDMapping<BYTEAOID>>;

Expand Down Expand Up @@ -1127,7 +1122,7 @@ ConvertDuckToPostgresValue(TupleTableSlot *slot, duckdb::Value &value, idx_t col
case TEXTOID:
case JSONOID:
case VARCHAROID: {
slot->tts_values[col] = ConvertVarCharDatum(value);
slot->tts_values[col] = ConvertToStringDatum(value);
break;
}
case DATEOID: {
Expand Down Expand Up @@ -1197,7 +1192,7 @@ ConvertDuckToPostgresValue(TupleTableSlot *slot, duckdb::Value &value, idx_t col
case TEXTARRAYOID:
case JSONARRAYOID:
case VARCHARARRAYOID: {
ConvertDuckToPostgresArray<VarCharArray>(slot, value, col);
ConvertDuckToPostgresArray<TextArray>(slot, value, col);
break;
}
case DATEARRAYOID: {
Expand Down
Binary file added test/regression/data/text_array.parquet
Binary file not shown.
8 changes: 8 additions & 0 deletions test/regression/expected/array_type_support.out
Original file line number Diff line number Diff line change
Expand Up @@ -692,6 +692,14 @@ $$);
{"{key1=10, key2=20}","{a=100}"} | {"{x=1, y=2, z=3}"} | {}
(1 row)

CREATE TABLE text_array AS SELECT * FROM read_parquet('../../data/text_array.parquet');
SELECT * FROM text_array;
tags
---------------------------------------------------------------------------
{"box office",hollywood,"2025 Predictions",Movies,Culture,"Best of 2025"}
(1 row)

ANALYZE text_array;
-- Cleanup
DROP TABLE int_array_0d;
DROP TABLE int_array_1d;
Expand Down
4 changes: 4 additions & 0 deletions test/regression/sql/array_type_support.sql
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,10 @@ SELECT
CAST([] AS MAP(VARCHAR, INTEGER)[]) as empty_map_array
$$);

CREATE TABLE text_array AS SELECT * FROM read_parquet('../../data/text_array.parquet');
SELECT * FROM text_array;
ANALYZE text_array;

-- Cleanup
DROP TABLE int_array_0d;
DROP TABLE int_array_1d;
Expand Down