Skip to content

Commit dff4f66

Browse files
author
Nikita Glukhov
committed
Avoid double compilation of jsonb_gin.c
1 parent 3878d2b commit dff4f66

File tree

3 files changed

+134
-50
lines changed

3 files changed

+134
-50
lines changed

src/backend/utils/adt/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ OBJS = \
4545
int8.o \
4646
json.o \
4747
json_generic.o \
48-
json_gin.o \
4948
jsonb.o \
5049
jsonb_gin.o \
5150
jsonb_op.o \

src/backend/utils/adt/json_gin.c

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/backend/utils/adt/jsonb_gin.c

Lines changed: 134 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ add_gin_entry(GinEntries *entries, Datum entry)
200200
*
201201
*/
202202

203-
Datum
204-
gin_compare_jsonb(PG_FUNCTION_ARGS)
203+
static Datum
204+
gin_compare_json_internal(FunctionCallInfo fcinfo)
205205
{
206206
text *arg1 = PG_GETARG_TEXT_PP(0);
207207
text *arg2 = PG_GETARG_TEXT_PP(1);
@@ -227,10 +227,20 @@ gin_compare_jsonb(PG_FUNCTION_ARGS)
227227
}
228228

229229
Datum
230-
gin_extract_jsonb(PG_FUNCTION_ARGS)
230+
gin_compare_jsonb(PG_FUNCTION_ARGS)
231+
{
232+
return gin_compare_json_internal(fcinfo);
233+
}
234+
235+
Datum
236+
gin_compare_json(PG_FUNCTION_ARGS) /* XXX remove */
237+
{
238+
return gin_compare_json_internal(fcinfo);
239+
}
240+
241+
static Datum *
242+
gin_extract_json_internal(Json *jb, int32 *nentries)
231243
{
232-
Jsonb *jb = (Jsonb *) PG_GETARG_JSONB_P(0);
233-
int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
234244
int total = JB_ROOT_COUNT(jb);
235245
JsonbIterator *it;
236246
JsonbValue v;
@@ -241,7 +251,7 @@ gin_extract_jsonb(PG_FUNCTION_ARGS)
241251
if (total == 0)
242252
{
243253
*nentries = 0;
244-
PG_RETURN_POINTER(NULL);
254+
return NULL;
245255
}
246256

247257
if (total < 0)
@@ -274,7 +284,21 @@ gin_extract_jsonb(PG_FUNCTION_ARGS)
274284

275285
*nentries = entries.count;
276286

277-
PG_RETURN_POINTER(entries.buf);
287+
return entries.buf;
288+
}
289+
290+
Datum
291+
gin_extract_jsonb(PG_FUNCTION_ARGS)
292+
{
293+
PG_RETURN_POINTER(gin_extract_json_internal(PG_GETARG_JSONB_P(0),
294+
(int32 *) PG_GETARG_POINTER(1)));
295+
}
296+
297+
Datum
298+
gin_extract_json(PG_FUNCTION_ARGS)
299+
{
300+
PG_RETURN_POINTER(gin_extract_json_internal(PG_GETARG_JSONT_P(0),
301+
(int32 *) PG_GETARG_POINTER(1)));
278302
}
279303

280304
/* Append JsonPathGinPathItem to JsonPathGinPath (jsonb_ops) */
@@ -848,8 +872,8 @@ execute_jsp_gin_node(JsonPathGinNode *node, void *check, bool ternary)
848872
}
849873
}
850874

851-
Datum
852-
gin_extract_jsonb_query(PG_FUNCTION_ARGS)
875+
static Datum
876+
gin_extract_json_query_internal(FunctionCallInfo fcinfo, bool is_jsonb)
853877
{
854878
int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
855879
StrategyNumber strategy = PG_GETARG_UINT16(2);
@@ -860,7 +884,9 @@ gin_extract_jsonb_query(PG_FUNCTION_ARGS)
860884
{
861885
/* Query is a jsonb, so just apply gin_extract_jsonb... */
862886
entries = (Datum *)
863-
DatumGetPointer(DirectFunctionCall2(gin_extract_jsonb,
887+
DatumGetPointer(DirectFunctionCall2(is_jsonb ?
888+
gin_extract_jsonb :
889+
gin_extract_json,
864890
PG_GETARG_DATUM(0),
865891
PointerGetDatum(nentries)));
866892
/* ...although "contains {}" requires a full index scan */
@@ -931,7 +957,19 @@ gin_extract_jsonb_query(PG_FUNCTION_ARGS)
931957
}
932958

933959
Datum
934-
gin_consistent_jsonb(PG_FUNCTION_ARGS)
960+
gin_extract_jsonb_query(PG_FUNCTION_ARGS)
961+
{
962+
return gin_extract_json_query_internal(fcinfo, true);
963+
}
964+
965+
Datum
966+
gin_extract_json_query(PG_FUNCTION_ARGS)
967+
{
968+
return gin_extract_json_query_internal(fcinfo, false);
969+
}
970+
971+
static Datum
972+
gin_consistent_json_internal(FunctionCallInfo fcinfo)
935973
{
936974
bool *check = (bool *) PG_GETARG_POINTER(0);
937975
StrategyNumber strategy = PG_GETARG_UINT16(1);
@@ -1015,7 +1053,19 @@ gin_consistent_jsonb(PG_FUNCTION_ARGS)
10151053
}
10161054

10171055
Datum
1018-
gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
1056+
gin_consistent_jsonb(PG_FUNCTION_ARGS)
1057+
{
1058+
return gin_consistent_json_internal(fcinfo);
1059+
}
1060+
1061+
Datum
1062+
gin_consistent_json(PG_FUNCTION_ARGS)
1063+
{
1064+
return gin_consistent_json_internal(fcinfo);
1065+
}
1066+
1067+
static Datum
1068+
gin_triconsistent_json_internal(FunctionCallInfo fcinfo)
10191069
{
10201070
GinTernaryValue *check = (GinTernaryValue *) PG_GETARG_POINTER(0);
10211071
StrategyNumber strategy = PG_GETARG_UINT16(1);
@@ -1079,6 +1129,18 @@ gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
10791129
PG_RETURN_GIN_TERNARY_VALUE(res);
10801130
}
10811131

1132+
Datum
1133+
gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
1134+
{
1135+
return gin_triconsistent_json_internal(fcinfo);
1136+
}
1137+
1138+
Datum
1139+
gin_triconsistent_json(PG_FUNCTION_ARGS)
1140+
{
1141+
return gin_triconsistent_json_internal(fcinfo);
1142+
}
1143+
10821144
/*
10831145
*
10841146
* jsonb_path_ops GIN opclass support functions
@@ -1091,11 +1153,9 @@ gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
10911153
*
10921154
*/
10931155

1094-
Datum
1095-
gin_extract_jsonb_path(PG_FUNCTION_ARGS)
1156+
static Datum *
1157+
gin_extract_json_path_internal(Json *jb, int32 *nentries)
10961158
{
1097-
Jsonb *jb = PG_GETARG_JSONB_P(0);
1098-
int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
10991159
int total = JB_ROOT_COUNT(jb);
11001160
JsonbIterator *it;
11011161
JsonbValue v;
@@ -1108,7 +1168,7 @@ gin_extract_jsonb_path(PG_FUNCTION_ARGS)
11081168
if (total == 0)
11091169
{
11101170
*nentries = 0;
1111-
PG_RETURN_POINTER(NULL);
1171+
return NULL;
11121172
}
11131173

11141174
if (total < 0)
@@ -1181,11 +1241,25 @@ gin_extract_jsonb_path(PG_FUNCTION_ARGS)
11811241

11821242
*nentries = entries.count;
11831243

1184-
PG_RETURN_POINTER(entries.buf);
1244+
return entries.buf;
11851245
}
11861246

11871247
Datum
1188-
gin_extract_jsonb_query_path(PG_FUNCTION_ARGS)
1248+
gin_extract_jsonb_path(PG_FUNCTION_ARGS)
1249+
{
1250+
PG_RETURN_POINTER(gin_extract_json_path_internal(PG_GETARG_JSONB_P(0),
1251+
(int32 *) PG_GETARG_POINTER(1)));
1252+
}
1253+
1254+
Datum
1255+
gin_extract_json_path(PG_FUNCTION_ARGS)
1256+
{
1257+
PG_RETURN_POINTER(gin_extract_json_path_internal(PG_GETARG_JSONT_P(0),
1258+
(int32 *) PG_GETARG_POINTER(1)));
1259+
}
1260+
1261+
static Datum
1262+
gin_extract_json_query_path_internal(FunctionCallInfo fcinfo, bool is_jsonb)
11891263
{
11901264
int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
11911265
StrategyNumber strategy = PG_GETARG_UINT16(2);
@@ -1196,7 +1270,9 @@ gin_extract_jsonb_query_path(PG_FUNCTION_ARGS)
11961270
{
11971271
/* Query is a jsonb, so just apply gin_extract_jsonb_path ... */
11981272
entries = (Datum *)
1199-
DatumGetPointer(DirectFunctionCall2(gin_extract_jsonb_path,
1273+
DatumGetPointer(DirectFunctionCall2(is_jsonb ?
1274+
gin_extract_jsonb_path :
1275+
gin_extract_json_path,
12001276
PG_GETARG_DATUM(0),
12011277
PointerGetDatum(nentries)));
12021278

@@ -1225,7 +1301,19 @@ gin_extract_jsonb_query_path(PG_FUNCTION_ARGS)
12251301
}
12261302

12271303
Datum
1228-
gin_consistent_jsonb_path(PG_FUNCTION_ARGS)
1304+
gin_extract_jsonb_query_path(PG_FUNCTION_ARGS)
1305+
{
1306+
return gin_extract_json_query_path_internal(fcinfo, true);
1307+
}
1308+
1309+
Datum
1310+
gin_extract_json_query_path(PG_FUNCTION_ARGS)
1311+
{
1312+
return gin_extract_json_query_path_internal(fcinfo, false);
1313+
}
1314+
1315+
static Datum
1316+
gin_consistent_json_path_internal(FunctionCallInfo fcinfo)
12291317
{
12301318
bool *check = (bool *) PG_GETARG_POINTER(0);
12311319
StrategyNumber strategy = PG_GETARG_UINT16(1);
@@ -1277,7 +1365,19 @@ gin_consistent_jsonb_path(PG_FUNCTION_ARGS)
12771365
}
12781366

12791367
Datum
1280-
gin_triconsistent_jsonb_path(PG_FUNCTION_ARGS)
1368+
gin_consistent_jsonb_path(PG_FUNCTION_ARGS)
1369+
{
1370+
return gin_consistent_json_path_internal(fcinfo);
1371+
}
1372+
1373+
Datum
1374+
gin_consistent_json_path(PG_FUNCTION_ARGS)
1375+
{
1376+
return gin_consistent_json_path_internal(fcinfo);
1377+
}
1378+
1379+
static Datum
1380+
gin_triconsistent_json_path_internal(FunctionCallInfo fcinfo)
12811381
{
12821382
GinTernaryValue *check = (GinTernaryValue *) PG_GETARG_POINTER(0);
12831383
StrategyNumber strategy = PG_GETARG_UINT16(1);
@@ -1324,6 +1424,18 @@ gin_triconsistent_jsonb_path(PG_FUNCTION_ARGS)
13241424
PG_RETURN_GIN_TERNARY_VALUE(res);
13251425
}
13261426

1427+
Datum
1428+
gin_triconsistent_jsonb_path(PG_FUNCTION_ARGS)
1429+
{
1430+
return gin_triconsistent_json_path_internal(fcinfo);
1431+
}
1432+
1433+
Datum
1434+
gin_triconsistent_json_path(PG_FUNCTION_ARGS)
1435+
{
1436+
return gin_triconsistent_json_path_internal(fcinfo);
1437+
}
1438+
13271439
/*
13281440
* Construct a jsonb_ops GIN key from a flag byte and a textual representation
13291441
* (which need not be null-terminated). This function is responsible

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