3params_arrayfce.diff
application/octet-stream
Filename: 3params_arrayfce.diff
Type: application/octet-stream
Part: 0
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: context
| File | + | − |
|---|---|---|
| src/backend/utils/adt/varlena.c | 67 | 2 |
*** ./src/backend/utils/adt/varlena.c.orig 2010-02-26 03:01:10.000000000 +0100
--- ./src/backend/utils/adt/varlena.c 2010-05-04 15:55:45.677424338 +0200
***************
*** 2985,2990 ****
--- 2985,2992 ----
char *start_ptr;
text *result_text;
ArrayBuildState *astate = NULL;
+ text *null_sym;
+ bool isnull;
text_position_setup(inputstring, fldsep, &state);
***************
*** 3012,3017 ****
--- 3014,3033 ----
PG_RETURN_ARRAYTYPE_P(create_singleton_array(fcinfo, TEXTOID,
PointerGetDatum(inputstring), 1));
}
+
+ /*
+ * Third argument (if exists is text used instead NULL value.
+ */
+ if (PG_NARGS() > 2)
+ {
+ if (PG_ARGISNULL(2))
+ ereport(ERROR,
+ (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
+ errmsg("text for NULL substitution cannot be NULL")));
+ null_sym = PG_GETARG_TEXT_PP(2);
+ }
+ else
+ null_sym = NULL;
start_posn = 1;
/* start_ptr points to the start_posn'th character of inputstring */
***************
*** 3036,3046 ****
/* must build a temp text datum to pass to accumArrayResult */
result_text = cstring_to_text_with_len(start_ptr, chunk_len);
/* stash away this field */
astate = accumArrayResult(astate,
PointerGetDatum(result_text),
! false,
TEXTOID,
CurrentMemoryContext);
--- 3052,3073 ----
/* must build a temp text datum to pass to accumArrayResult */
result_text = cstring_to_text_with_len(start_ptr, chunk_len);
+
+ /* check if this text is equal to null symbol */
+ if (null_sym != NULL)
+ {
+
+ isnull = DatumGetBool(DirectFunctionCall2(texteq,
+ PointerGetDatum(null_sym),
+ PointerGetDatum(result_text)));
+ }
+ else
+ isnull = false;
/* stash away this field */
astate = accumArrayResult(astate,
PointerGetDatum(result_text),
! isnull,
TEXTOID,
CurrentMemoryContext);
***************
*** 3062,3067 ****
--- 3089,3103 ----
}
/*
+ * Just wrapper for three params variant string_to_array function
+ */
+ Datum
+ text_to_array_with_nullsym(PG_FUNCTION_ARGS)
+ {
+ return text_to_array(fcinfo);
+ }
+
+ /*
* array_to_text
* concatenate Cstring representation of input array elements
* using provided field separator
***************
*** 3085,3090 ****
--- 3121,3127 ----
int bitmask;
int i;
ArrayMetaState *my_extra;
+ char *null_sym;
ndims = ARR_NDIM(v);
dims = ARR_DIMS(v);
***************
*** 3132,3137 ****
--- 3169,3185 ----
bitmap = ARR_NULLBITMAP(v);
bitmask = 1;
+ if (PG_NARGS() > 2)
+ {
+ if (PG_ARGISNULL(2))
+ ereport(ERROR,
+ (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
+ errmsg("text for NULL substitution cannot be NULL")));
+ null_sym = text_to_cstring(PG_GETARG_TEXT_PP(2));
+ }
+ else
+ null_sym = NULL;
+
for (i = 0; i < nitems; i++)
{
Datum itemvalue;
***************
*** 3140,3146 ****
/* Get source element, checking for NULL */
if (bitmap && (*bitmap & bitmask) == 0)
{
! /* we ignore nulls */
}
else
{
--- 3188,3201 ----
/* Get source element, checking for NULL */
if (bitmap && (*bitmap & bitmask) == 0)
{
! if (null_sym != NULL)
! {
! if (printed)
! appendStringInfo(&buf, "%s%s", fldsep, null_sym);
! else
! appendStringInfoString(&buf, null_sym);
! printed = true;
! }
}
else
{
***************
*** 3173,3178 ****
--- 3228,3243 ----
PG_RETURN_TEXT_P(cstring_to_text_with_len(buf.data, buf.len));
}
+ /*
+ * Just only wrapper for three params array_to_string function.
+ */
+ Datum
+ array_to_text_with_nullsym(PG_FUNCTION_ARGS)
+ {
+ return array_to_text_with_nullsym(fcinfo);
+ }
+
+
#define HEXBASE 16
/*
* Convert a int32 to a string containing a base 16 (hex) representation of