@@ -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 ((unsignedchar * )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 ((unsignedchar * )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
}