Avoid casting away const in sepgsql's quote_object_name.

quote_identifier's API is designed on the assumption that it's
not worth worrying about a short-term memory leak when we have
to produce a quoted version of the given identifier.  Whoever wrote
quote_object_name took it on themselves to override that judgment,
but the only way to do so is to cast away const someplace.  We can
avoid that and substantially shorten the function by going along
with quote_identifier's opinion.  AFAICS quote_object_name is not
used in any way where this would be unsustainable.

Per discussion of commit 45987aae2, which exposed that we had
a casting-away-const situation here.

Discussion: https://postgr.es/m/20220827112304.GL2342@telsasoft.com
This commit is contained in:
Tom Lane 2022-08-27 12:52:39 -04:00
parent d1ce745db2
commit 94077df1c2

View File

@ -646,45 +646,24 @@ sepgsql_mcstrans_out(PG_FUNCTION_ARGS)
/*
* quote_object_name
*
* It tries to quote the supplied identifiers
* Concatenate as many of the given strings as aren't NULL, with dots between.
* Quote any of the strings that wouldn't be valid identifiers otherwise.
*/
static char *
quote_object_name(const char *src1, const char *src2,
const char *src3, const char *src4)
{
StringInfoData result;
const char *temp;
initStringInfo(&result);
if (src1)
{
temp = quote_identifier(src1);
appendStringInfoString(&result, temp);
if (src1 != temp)
pfree(temp);
}
appendStringInfoString(&result, quote_identifier(src1));
if (src2)
{
temp = quote_identifier(src2);
appendStringInfo(&result, ".%s", temp);
if (src2 != temp)
pfree(temp);
}
appendStringInfo(&result, ".%s", quote_identifier(src2));
if (src3)
{
temp = quote_identifier(src3);
appendStringInfo(&result, ".%s", temp);
if (src3 != temp)
pfree(temp);
}
appendStringInfo(&result, ".%s", quote_identifier(src3));
if (src4)
{
temp = quote_identifier(src4);
appendStringInfo(&result, ".%s", temp);
if (src4 != temp)
pfree(temp);
}
appendStringInfo(&result, ".%s", quote_identifier(src4));
return result.data;
}