@@ -1422,15 +1422,18 @@ invoke_init_callback_internal(init_callback_params *cb_params)
14221422{
14231423#define JSB_INIT_VAL (value , val_type , val_cstring ) \
14241424 do { \
1425- (value)->type = jbvString; \
1426- (value)->val.string.len = strlen(val_cstring); \
1427- (value)->val.string.val = val_cstring; \
1428- pushJsonbValue(&jsonb_state, val_type, (value)); \
1429- } while (0)
1430-
1431- #define JSB_INIT_NULL_VAL (value , val_type ) \
1432- do { \
1433- (value)->type = jbvNull; \
1425+ if ((val_cstring) != NULL) \
1426+ { \
1427+ (value)->type = jbvString; \
1428+ (value)->val.string.len = strlen(val_cstring); \
1429+ (value)->val.string.val = val_cstring; \
1430+ } \
1431+ else \
1432+ { \
1433+ (value)->type = jbvNull; \
1434+ Assert((val_type) != WJB_KEY); \
1435+ } \
1436+ \
14341437 pushJsonbValue(&jsonb_state, val_type, (value)); \
14351438 } while (0)
14361439
@@ -1445,6 +1448,12 @@ invoke_init_callback_internal(init_callback_params *cb_params)
14451448 key ,
14461449 val ;
14471450
1451+ char * parent_name ,
1452+ * parent_namespace ,
1453+ * partition_name ,
1454+ * partition_namespace ;
1455+
1456+
14481457 /* Fetch & cache callback's Oid if needed */
14491458 if (!cb_params -> callback_is_cached )
14501459 {
@@ -1472,8 +1481,10 @@ invoke_init_callback_internal(init_callback_params *cb_params)
14721481 errmsg ("callback function \"%s\" does not exist" ,
14731482 TextDatumGetCString (init_cb_datum ))));
14741483 }
1475- else
1476- cb_params -> callback = InvalidOid ;
1484+ /* There's no callback */
1485+ else cb_params -> callback = InvalidOid ;
1486+
1487+ /* We've made a lookup */
14771488 cb_params -> callback_is_cached = true;
14781489 }
14791490 }
@@ -1485,6 +1496,12 @@ invoke_init_callback_internal(init_callback_params *cb_params)
14851496 /* Validate the callback's signature */
14861497 validate_part_callback (cb_params -> callback , true);
14871498
1499+ parent_name = get_rel_name (parent_oid );
1500+ parent_namespace = get_namespace_name (get_rel_namespace (parent_oid ));
1501+
1502+ partition_name = get_rel_name (partition_oid );
1503+ partition_namespace = get_namespace_name (get_rel_namespace (partition_oid ));
1504+
14881505 /* Generate JSONB we're going to pass to callback */
14891506 switch (cb_params -> parttype )
14901507 {
@@ -1493,13 +1510,13 @@ invoke_init_callback_internal(init_callback_params *cb_params)
14931510 pushJsonbValue (& jsonb_state , WJB_BEGIN_OBJECT , NULL );
14941511
14951512 JSB_INIT_VAL (& key , WJB_KEY , "parent" );
1496- JSB_INIT_VAL (& val , WJB_VALUE , get_rel_name_or_relid ( parent_oid ) );
1513+ JSB_INIT_VAL (& val , WJB_VALUE , parent_name );
14971514 JSB_INIT_VAL (& key , WJB_KEY , "parent_schema" );
1498- JSB_INIT_VAL (& val , WJB_VALUE , get_namespace_name ( get_rel_namespace ( parent_oid )) );
1515+ JSB_INIT_VAL (& val , WJB_VALUE , parent_namespace );
14991516 JSB_INIT_VAL (& key , WJB_KEY , "partition" );
1500- JSB_INIT_VAL (& val , WJB_VALUE , get_rel_name_or_relid ( partition_oid ) );
1517+ JSB_INIT_VAL (& val , WJB_VALUE , partition_name );
15011518 JSB_INIT_VAL (& key , WJB_KEY , "partition_schema" );
1502- JSB_INIT_VAL (& val , WJB_VALUE , get_namespace_name ( get_rel_namespace ( partition_oid )) );
1519+ JSB_INIT_VAL (& val , WJB_VALUE , partition_namespace );
15031520 JSB_INIT_VAL (& key , WJB_KEY , "parttype" );
15041521 JSB_INIT_VAL (& val , WJB_VALUE , PartTypeToCString (PT_HASH ));
15051522
@@ -1509,46 +1526,40 @@ invoke_init_callback_internal(init_callback_params *cb_params)
15091526
15101527 case PT_RANGE :
15111528 {
1512- char * start_value ,
1513- * end_value ;
1529+ char * start_value = NULL ,
1530+ * end_value = NULL ;
15141531 Bound sv_datum = cb_params -> params .range_params .start_value ,
15151532 ev_datum = cb_params -> params .range_params .end_value ;
15161533 Oid type = cb_params -> params .range_params .value_type ;
15171534
1535+ /* Convert min to CSTRING */
1536+ if (!IsInfinite (& sv_datum ))
1537+ start_value = datum_to_cstring (BoundGetValue (& sv_datum ), type );
1538+
1539+ /* Convert max to CSTRING */
1540+ if (!IsInfinite (& ev_datum ))
1541+ end_value = datum_to_cstring (BoundGetValue (& ev_datum ), type );
1542+
15181543 pushJsonbValue (& jsonb_state , WJB_BEGIN_OBJECT , NULL );
15191544
15201545 JSB_INIT_VAL (& key , WJB_KEY , "parent" );
1521- JSB_INIT_VAL (& val , WJB_VALUE , get_rel_name_or_relid ( parent_oid ) );
1546+ JSB_INIT_VAL (& val , WJB_VALUE , parent_name );
15221547 JSB_INIT_VAL (& key , WJB_KEY , "parent_schema" );
1523- JSB_INIT_VAL (& val , WJB_VALUE , get_namespace_name ( get_rel_namespace ( parent_oid )) );
1548+ JSB_INIT_VAL (& val , WJB_VALUE , parent_namespace );
15241549 JSB_INIT_VAL (& key , WJB_KEY , "partition" );
1525- JSB_INIT_VAL (& val , WJB_VALUE , get_rel_name_or_relid ( partition_oid ) );
1550+ JSB_INIT_VAL (& val , WJB_VALUE , partition_name );
15261551 JSB_INIT_VAL (& key , WJB_KEY , "partition_schema" );
1527- JSB_INIT_VAL (& val , WJB_VALUE , get_namespace_name ( get_rel_namespace ( partition_oid )) );
1552+ JSB_INIT_VAL (& val , WJB_VALUE , partition_namespace );
15281553 JSB_INIT_VAL (& key , WJB_KEY , "parttype" );
15291554 JSB_INIT_VAL (& val , WJB_VALUE , PartTypeToCString (PT_RANGE ));
15301555
15311556 /* Lower bound */
15321557 JSB_INIT_VAL (& key , WJB_KEY , "range_min" );
1533- if (!IsInfinite (& sv_datum ))
1534- {
1535- /* Convert min to CSTRING */
1536- start_value = datum_to_cstring (BoundGetValue (& sv_datum ), type );
1537- JSB_INIT_VAL (& val , WJB_VALUE , start_value );
1538- }
1539- else
1540- JSB_INIT_NULL_VAL (& val , WJB_VALUE );
1558+ JSB_INIT_VAL (& val , WJB_VALUE , start_value );
15411559
15421560 /* Upper bound */
15431561 JSB_INIT_VAL (& key , WJB_KEY , "range_max" );
1544- if (!IsInfinite (& ev_datum ))
1545- {
1546- /* Convert max to CSTRING */
1547- end_value = datum_to_cstring (BoundGetValue (& ev_datum ), type );
1548- JSB_INIT_VAL (& val , WJB_VALUE , end_value );
1549- }
1550- else
1551- JSB_INIT_NULL_VAL (& val , WJB_VALUE );
1562+ JSB_INIT_VAL (& val , WJB_VALUE , end_value );
15521563
15531564 result = pushJsonbValue (& jsonb_state , WJB_END_OBJECT , NULL );
15541565 }
0 commit comments