Thread

  1. [PATCH 1/4] Make propgraph object descriptions translatable

    Kyotaro Horiguchi <horikyota.ntt@gmail.com> — 2026-05-26T07:14:54Z

    getObjectDescription() currently constructs propgraph-related object
    descriptions incrementally with appendStringInfo(). This effectively
    fixes the word order in English, which makes the messages difficult to
    translate naturally into languages such as Japanese.
    
    Build the whole object description from a single format string
    instead.
    ---
     src/backend/catalog/objectaddress.c | 61 ++++++++++++++++++++---------
     1 file changed, 43 insertions(+), 18 deletions(-)
    
    diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
    index 050b7829eb0..c107d0fb0e4 100644
    --- a/src/backend/catalog/objectaddress.c
    +++ b/src/backend/catalog/objectaddress.c
    @@ -4077,6 +4077,9 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     			{
     				HeapTuple	tup;
     				Form_pg_propgraph_element pgeform;
    +				StringInfoData objdesc;
    +
    +				initStringInfo(&objdesc);
     
     				tup = SearchSysCache1(PROPGRAPHELOID, ObjectIdGetDatum(object->objectId));
     				if (!HeapTupleIsValid(tup))
    @@ -4089,15 +4092,15 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     
     				pgeform = (Form_pg_propgraph_element) GETSTRUCT(tup);
     
    +				getRelationDescription(&objdesc, pgeform->pgepgid, false);
    +				Assert(objdesc.len > 0);
    +
     				if (pgeform->pgekind == PGEKIND_VERTEX)
    -					/* translator: followed by, e.g., "property graph %s" */
    -					appendStringInfo(&buffer, _("vertex %s of "), NameStr(pgeform->pgealias));
    +					appendStringInfo(&buffer, _("vertex %s of %s"), NameStr(pgeform->pgealias), objdesc.data);
     				else if (pgeform->pgekind == PGEKIND_EDGE)
    -					/* translator: followed by, e.g., "property graph %s" */
    -					appendStringInfo(&buffer, _("edge %s of "), NameStr(pgeform->pgealias));
    +					appendStringInfo(&buffer, _("edge %s of %s"), NameStr(pgeform->pgealias), objdesc.data);
     				else
    -					appendStringInfo(&buffer, "??? element %s of ", NameStr(pgeform->pgealias));
    -				getRelationDescription(&buffer, pgeform->pgepgid, false);
    +					appendStringInfo(&buffer, "??? element %s of %s", NameStr(pgeform->pgealias), objdesc.data);
     
     				ReleaseSysCache(tup);
     				break;
    @@ -4109,6 +4112,9 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     				HeapTuple	tuple;
     				Form_pg_propgraph_element_label pgelform;
     				ObjectAddress oa;
    +				StringInfoData objdesc;
    +
    +				initStringInfo(&objdesc);
     
     				rel = table_open(PropgraphElementLabelRelationId, AccessShareLock);
     				tuple = get_catalog_object_by_oid(rel,
    @@ -4125,9 +4131,13 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     
     				pgelform = (Form_pg_propgraph_element_label) GETSTRUCT(tuple);
     
    -				appendStringInfo(&buffer, _("label %s of "), get_propgraph_label_name(pgelform->pgellabelid));
    -				ObjectAddressSet(oa, PropgraphElementRelationId, pgelform->pgelelid);
    -				appendStringInfoString(&buffer, getObjectDescription(&oa, false));
    +				ObjectAddressSet(oa, PropgraphElementRelationId,
    +								 pgelform->pgelelid);
    +				appendStringInfoString(&objdesc,
    +									   getObjectDescription(&oa, false));
    +				Assert(objdesc.len > 0);
    +
    +				appendStringInfo(&buffer, _("label %s of %s"), get_propgraph_label_name(pgelform->pgellabelid), objdesc.data);
     
     				table_close(rel, AccessShareLock);
     				break;
    @@ -4137,6 +4147,9 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     			{
     				HeapTuple	tuple;
     				Form_pg_propgraph_label pglform;
    +				StringInfoData objdesc;
    +
    +				initStringInfo(&objdesc);
     
     				tuple = SearchSysCache1(PROPGRAPHLABELOID, ObjectIdGetDatum(object->objectId));
     				if (!HeapTupleIsValid(tuple))
    @@ -4148,9 +4161,10 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     
     				pglform = (Form_pg_propgraph_label) GETSTRUCT(tuple);
     
    -				/* translator: followed by, e.g., "property graph %s" */
    -				appendStringInfo(&buffer, _("label %s of "), NameStr(pglform->pgllabel));
    -				getRelationDescription(&buffer, pglform->pglpgid, false);
    +				getRelationDescription(&objdesc, pglform->pglpgid, false);
    +				Assert(objdesc.len > 0);
    +
    +				appendStringInfo(&buffer, _("label %s of %s"), NameStr(pglform->pgllabel), objdesc.data);
     				ReleaseSysCache(tuple);
     				break;
     			}
    @@ -4161,6 +4175,9 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     				HeapTuple	tuple;
     				Form_pg_propgraph_label_property plpform;
     				ObjectAddress oa;
    +				StringInfoData objdesc;
    +
    +				initStringInfo(&objdesc);
     
     				rel = table_open(PropgraphLabelPropertyRelationId, AccessShareLock);
     				tuple = get_catalog_object_by_oid(rel,
    @@ -4177,9 +4194,13 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     
     				plpform = (Form_pg_propgraph_label_property) GETSTRUCT(tuple);
     
    -				appendStringInfo(&buffer, _("property %s of "), get_propgraph_property_name(plpform->plppropid));
    -				ObjectAddressSet(oa, PropgraphElementLabelRelationId, plpform->plpellabelid);
    -				appendStringInfoString(&buffer, getObjectDescription(&oa, false));
    +				ObjectAddressSet(oa, PropgraphElementLabelRelationId,
    +								 plpform->plpellabelid);
    +				appendStringInfoString(&objdesc,
    +									   getObjectDescription(&oa, false));
    +				Assert(objdesc.len > 0);
    +
    +				appendStringInfo(&buffer, _("property %s of %s"), get_propgraph_property_name(plpform->plppropid), objdesc.data);
     
     				table_close(rel, AccessShareLock);
     				break;
    @@ -4189,6 +4210,9 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     			{
     				HeapTuple	tuple;
     				Form_pg_propgraph_property pgpform;
    +				StringInfoData objdesc;
    +
    +				initStringInfo(&objdesc);
     
     				tuple = SearchSysCache1(PROPGRAPHPROPOID, ObjectIdGetDatum(object->objectId));
     				if (!HeapTupleIsValid(tuple))
    @@ -4200,9 +4224,10 @@ getObjectDescription(const ObjectAddress *object, bool missing_ok)
     
     				pgpform = (Form_pg_propgraph_property) GETSTRUCT(tuple);
     
    -				/* translator: followed by, e.g., "property graph %s" */
    -				appendStringInfo(&buffer, _("property %s of "), NameStr(pgpform->pgpname));
    -				getRelationDescription(&buffer, pgpform->pgppgid, false);
    +				getRelationDescription(&objdesc, pgpform->pgppgid, false);
    +				Assert(objdesc.len > 0);
    +
    +				appendStringInfo(&buffer, _("property %s of %s"), NameStr(pgpform->pgpname), objdesc.data);
     				ReleaseSysCache(tuple);
     				break;
     			}
    -- 
    2.47.3
    
    
    ----Next_Part(Thu_May_28_12_16_22_2026_214)--
    Content-Type: Text/X-Patch; charset=us-ascii
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment;
     filename="0002-Use-double-quotes-in-message.patch"