Skip to content

Commit 67079ae

Browse files
author
Nikita Glukhov
committed
Avoid double compilation of jsonfuncs.c
1 parent 4732912 commit 67079ae

File tree

5 files changed

+504
-299
lines changed

5 files changed

+504
-299
lines changed

src/backend/utils/adt/json.c

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -35,36 +35,6 @@
3535
#define jsonb_object_two_arg json_object_two_arg
3636
#define jsonb_typeof json_typeof
3737

38-
#define jsonb_array_element json_array_element
39-
#define jsonb_array_element_text json_array_element_text
40-
#define jsonb_array_elements json_array_elements
41-
#define jsonb_array_elements_text json_array_elements_text
42-
#define jsonb_array_length json_array_length
43-
#define jsonb_canonical json_canonical
44-
#define jsonb_concat json_concat
45-
#define jsonb_delete json_delete
46-
#define jsonb_delete_idx json_delete_idx
47-
#define jsonb_delete_path json_delete_path
48-
#define jsonb_delete_array json_delete_array
49-
#define jsonb_each json_each
50-
#define jsonb_each_text json_each_text
51-
#define jsonb_insert json_insert
52-
#define jsonb_extract_path json_extract_path
53-
#define jsonb_extract_path_text json_extract_path_text
54-
#define jsonb_object_field json_object_field
55-
#define jsonb_object_field_text json_object_field_text
56-
#define jsonb_object_keys json_object_keys
57-
#define jsonb_extract_keys json_extract_keys
58-
#define jsonb_populate_record json_populate_record
59-
#define jsonb_populate_recordset json_populate_recordset
60-
#define jsonb_pretty json_pretty
61-
#define jsonb_set json_set
62-
#define jsonb_set_lax json_set_lax
63-
#define jsonb_to_record json_to_record
64-
#define jsonb_to_recordset json_to_recordset
65-
#define jsonb_get_element json_get_element
66-
#define jsonb_set_element json_set_element
67-
6838
#define JsonxContainerOps (&jsontContainerOps)
6939
#define JsonxGetUniquified(json) (json)
7040
#define JsonxPGetDatum(json) JsontPGetDatum(json)
@@ -291,7 +261,6 @@ escape_json(StringInfo buf, const char *str)
291261
}
292262

293263
#include "jsonb.c"
294-
#include "jsonfuncs.c"
295264

296265
/*
297266
* SQL function array_to_json(row)

src/backend/utils/adt/jsonbsubs.c

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -244,16 +244,29 @@ jsonb_subscript_fetch(ExprState *state,
244244
SubscriptingRefState *sbsrefstate = op->d.sbsref.state;
245245
JsonbSubWorkspace *workspace = (JsonbSubWorkspace *) sbsrefstate->workspace;
246246
Jsonb *jsonbSource;
247+
JsonbValue *res;
248+
JsonbValue resbuf;
247249

248250
/* Should not get here if source jsonb (or any subscript) is null */
249251
Assert(!(*op->resnull));
250252

251253
jsonbSource = DatumGetJsonbP(*op->resvalue);
252-
*op->resvalue = jsonb_get_element(jsonbSource,
253-
workspace->index,
254-
sbsrefstate->numupper,
255-
op->resnull,
256-
false);
254+
255+
res = jsonb_get_element(jsonbSource,
256+
workspace->index,
257+
sbsrefstate->numupper,
258+
&resbuf);
259+
260+
if (res != NULL)
261+
{
262+
*op->resnull = false;
263+
*op->resvalue = JsonbPGetDatum(JsonbValueToJsonb(res));
264+
}
265+
else
266+
{
267+
*op->resnull = true;
268+
*op->resvalue = PointerGetDatum(NULL);
269+
}
257270
}
258271

259272
/*
@@ -340,12 +353,22 @@ jsonb_subscript_fetch_old(ExprState *state,
340353
else
341354
{
342355
Jsonb *jsonbSource = DatumGetJsonbP(*op->resvalue);
356+
JsonbValue resbuf;
357+
JsonbValue *res = jsonb_get_element(jsonbSource,
358+
sbsrefstate->upperindex,
359+
sbsrefstate->numupper,
360+
&resbuf);
343361

344-
sbsrefstate->prevvalue = jsonb_get_element(jsonbSource,
345-
sbsrefstate->upperindex,
346-
sbsrefstate->numupper,
347-
&sbsrefstate->prevnull,
348-
false);
362+
if (res != NULL)
363+
{
364+
sbsrefstate->prevnull = false;
365+
sbsrefstate->prevvalue = JsonbPGetDatum(JsonbValueToJsonb(res));
366+
}
367+
else
368+
{
369+
sbsrefstate->prevnull = true;
370+
sbsrefstate->prevvalue = PointerGetDatum(NULL);
371+
}
349372
}
350373
}
351374

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy