compressed-datum-slicing-left-20190102a.patch
application/octet-stream
Filename: compressed-datum-slicing-left-20190102a.patch
Type: application/octet-stream
Part: 1
Message:
Re: Compressed TOAST Slicing
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/utils/adt/varlena.c | 13 | 8 |
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index 0fd3b15748..ea450a0175 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -4991,17 +4991,22 @@ text_concat_ws(PG_FUNCTION_ARGS)
Datum
text_left(PG_FUNCTION_ARGS)
{
- text *str = PG_GETARG_TEXT_PP(0);
- const char *p = VARDATA_ANY(str);
- int len = VARSIZE_ANY_EXHDR(str);
- int n = PG_GETARG_INT32(1);
- int rlen;
+ int n = PG_GETARG_INT32(1);
if (n < 0)
+ {
+ int rlen;
+ text *str = PG_GETARG_TEXT_PP(0);
+ const char *p = VARDATA_ANY(str);
+ int len = VARSIZE_ANY_EXHDR(str);
n = pg_mbstrlen_with_len(p, len) + n;
- rlen = pg_mbcharcliplen(p, len, n);
-
- PG_RETURN_TEXT_P(cstring_to_text_with_len(p, rlen));
+ rlen = pg_mbcharcliplen(p, len, n);
+ PG_RETURN_TEXT_P(cstring_to_text_with_len(p, rlen));
+ }
+ else
+ {
+ PG_RETURN_TEXT_P(text_substring(PG_GETARG_DATUM(0), 1, n, false));
+ }
}
/*