diff options
Diffstat (limited to 'src/backend/utils/adt/varlena.c')
-rw-r--r-- | src/backend/utils/adt/varlena.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index c74c890b9b5..0b0032787b2 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -4218,12 +4218,23 @@ text_to_array_internal(PG_FUNCTION_ARGS) */ if (fldsep_len < 1) { + Datum elems[1]; + bool nulls[1]; + int dims[1]; + int lbs[1]; + text_position_cleanup(&state); /* single element can be a NULL too */ is_null = null_string ? text_isequal(inputstring, null_string) : false; - PG_RETURN_ARRAYTYPE_P(create_singleton_array(fcinfo, TEXTOID, - PointerGetDatum(inputstring), - is_null, 1)); + + elems[0] = PointerGetDatum(inputstring); + nulls[0] = is_null; + dims[0] = 1; + lbs[0] = 1; + /* XXX: this hardcodes assumptions about the text type */ + PG_RETURN_ARRAYTYPE_P(construct_md_array(elems, nulls, + 1, dims, lbs, + TEXTOID, -1, false, 'i')); } start_posn = 1; |