@@ -258,51 +258,45 @@ make_gin_key(JsonbValue *v, uint32 hash)
258
258
{
259
259
GINKey * key ;
260
260
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" );
305
298
}
299
+
306
300
key -> hash = hash ;
307
301
return key ;
308
302
}
0 commit comments