@@ -258,51 +258,54 @@ make_gin_key(JsonbValue *v, uint32 hash)
258
258
{
259
259
GINKey * key ;
260
260
261
- if (v -> type == jbvNull )
261
+ switch (v -> type )
262
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" );
263
+ case jbvNull :
264
+ case jbvObject :
265
+ {
266
+ key = (GINKey * )palloc (GINKEYLEN );
267
+ key -> type = v -> type ;
268
+ SET_VARSIZE (key , GINKEYLEN );
269
+ break ;
270
+ }
271
+ case jbvBool :
272
+ {
273
+ key = (GINKey * )palloc (GINKEYLEN );
274
+ key -> type = v -> type | (v -> val .boolean ? GINKeyTrue : 0 );
275
+ SET_VARSIZE (key , GINKEYLEN );
276
+ break ;
277
+ }
278
+ case jbvArray :
279
+ {
280
+ key = (GINKey * )palloc (GINKEYLEN );
281
+ key -> type = v -> type ;
282
+ if (v -> val .array .nElems == 0 )
283
+ key -> type |= GINKeyEmptyArray ;
284
+
285
+ SET_VARSIZE (key , GINKEYLEN );
286
+ break ;
287
+ }
288
+ case jbvNumeric :
289
+ {
290
+ key = (GINKey * ) palloc0 (GINKeyLenNumeric (VARSIZE_ANY (v -> val .numeric )));
291
+ key -> type = v -> type ;
292
+ memcpy (GINKeyDataNumeric (key ), v -> val .numeric , VARSIZE_ANY (v -> val .numeric ));
293
+ SET_VARSIZE (key , GINKeyLenNumeric (VARSIZE_ANY (v -> val .numeric )));
294
+ break ;
295
+ }
296
+ case jbvString :
297
+ {
298
+ key = (GINKey * ) palloc0 (GINKeyLenString );
299
+ key -> type = v -> type ;
300
+ GINKeyDataString (key ) = hash_any ((unsigned char * )v -> val .string .val ,
301
+ v -> val .string .len );
302
+ SET_VARSIZE (key , GINKeyLenString );
303
+ break ;
304
+ }
305
+ default :
306
+ elog (ERROR , "GINKey must be scalar" );
305
307
}
308
+
306
309
key -> hash = hash ;
307
310
return key ;
308
311
}
0 commit comments