Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit d48b4d5

Browse files
ildusvbwagner
authored andcommitted
Fix valgrind error in jsquery
1 parent e1d7017 commit d48b4d5

File tree

1 file changed

+38
-44
lines changed

1 file changed

+38
-44
lines changed

contrib/jsquery/jsonb_gin_ops.c

Lines changed: 38 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -258,51 +258,45 @@ make_gin_key(JsonbValue *v, uint32 hash)
258258
{
259259
GINKey *key;
260260

261-
if (v->type == jbvNull)
262-
{
263-
key = (GINKey *)palloc(GINKEYLEN);
264-
key->type = v->type;
265-
SET_VARSIZE(key, GINKEYLEN);
266-
}
267-
else if (v->type == jbvBool)
268-
{
269-
key = (GINKey *)palloc(GINKEYLEN);
270-
key->type = v->type | (v->val.boolean ? GINKeyTrue : 0);
271-
SET_VARSIZE(key, GINKEYLEN);
272-
}
273-
else if (v->type == jbvArray)
274-
{
275-
key = (GINKey *)palloc(GINKEYLEN);
276-
key->type = v->type;
277-
if (v->val.array.nElems == 0)
278-
key->type |= GINKeyEmptyArray;
279-
SET_VARSIZE(key, GINKEYLEN);
280-
}
281-
else if (v->type == jbvObject)
282-
{
283-
key = (GINKey *)palloc(GINKEYLEN);
284-
key->type = v->type;
285-
SET_VARSIZE(key, GINKEYLEN);
286-
}
287-
else if (v->type == jbvNumeric)
288-
{
289-
key = (GINKey *)palloc(GINKeyLenNumeric(VARSIZE_ANY(v->val.numeric)));
290-
key->type = v->type;
291-
memcpy(GINKeyDataNumeric(key), v->val.numeric, VARSIZE_ANY(v->val.numeric));
292-
SET_VARSIZE(key, GINKeyLenNumeric(VARSIZE_ANY(v->val.numeric)));
293-
}
294-
else if (v->type == jbvString)
295-
{
296-
key = (GINKey *)palloc(GINKeyLenString);
297-
key->type = v->type;
298-
GINKeyDataString(key) = hash_any((unsigned char *)v->val.string.val,
299-
v->val.string.len);
300-
SET_VARSIZE(key, GINKeyLenString);
301-
}
302-
else
303-
{
304-
elog(ERROR, "GINKey must be scalar");
261+
switch (v->type) {
262+
case jbvObject:
263+
case jbvNull:
264+
key = (GINKey *)palloc(GINKEYLEN);
265+
key->type = v->type;
266+
SET_VARSIZE(key, GINKEYLEN);
267+
break;
268+
case jbvBool:
269+
key = (GINKey *)palloc(GINKEYLEN);
270+
key->type = v->type | (v->val.boolean ? GINKeyTrue : 0);
271+
SET_VARSIZE(key, GINKEYLEN);
272+
break;
273+
case jbvArray:
274+
key = (GINKey *)palloc(GINKEYLEN);
275+
key->type = v->type;
276+
if (v->val.array.nElems == 0)
277+
key->type |= GINKeyEmptyArray;
278+
SET_VARSIZE(key, GINKEYLEN);
279+
break;
280+
case jbvNumeric:
281+
{
282+
int len = GINKeyLenNumeric(VARSIZE_ANY(v->val.numeric));
283+
key = (GINKey *)palloc0(len);
284+
key->type = v->type;
285+
memcpy(GINKeyDataNumeric(key), v->val.numeric, VARSIZE_ANY(v->val.numeric));
286+
SET_VARSIZE(key, len);
287+
break;
288+
}
289+
case jbvString:
290+
key = (GINKey *)palloc0(GINKeyLenString);
291+
key->type = v->type;
292+
GINKeyDataString(key) = hash_any((unsigned char *)v->val.string.val,
293+
v->val.string.len);
294+
SET_VARSIZE(key, GINKeyLenString);
295+
break;
296+
default:
297+
elog(ERROR, "GINKey must be scalar");
305298
}
299+
306300
key->hash = hash;
307301
return key;
308302
}

0 commit comments

Comments
 (0)