From 5441915ddb26af9b7d861c988b6d99757130424e Mon Sep 17 00:00:00 2001 From: Euler Taveira Date: Sat, 20 Jun 2020 14:14:49 -0300 Subject: [PATCH] EXPLAIN JSON format should not add quotes in index names JSON format does not have to quote relation names. However, index names are quoted twice. It was reported in bug #16502. --- src/backend/commands/explain.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 67bdcb2b27..250af77a1a 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -115,7 +115,7 @@ static void show_instrumentation_count(const char *qlabel, int which, PlanState *planstate, ExplainState *es); static void show_foreignscan_info(ForeignScanState *fsstate, ExplainState *es); static void show_eval_params(Bitmapset *bms_params, ExplainState *es); -static const char *explain_get_index_name(Oid indexId); +static const char *explain_get_index_name(Oid indexId, ExplainState *es); static void show_buffer_usage(ExplainState *es, const BufferUsage *usage); static void show_wal_usage(ExplainState *es, const WalUsage *usage); static void ExplainIndexScanDetails(Oid indexid, ScanDirection indexorderdir, @@ -1453,7 +1453,7 @@ ExplainNode(PlanState *planstate, List *ancestors, { BitmapIndexScan *bitmapindexscan = (BitmapIndexScan *) plan; const char *indexname = - explain_get_index_name(bitmapindexscan->indexid); + explain_get_index_name(bitmapindexscan->indexid, es); if (es->format == EXPLAIN_FORMAT_TEXT) appendStringInfo(es->str, " on %s", indexname); @@ -3269,7 +3269,7 @@ show_eval_params(Bitmapset *bms_params, ExplainState *es) * indexes can be explained. */ static const char * -explain_get_index_name(Oid indexId) +explain_get_index_name(Oid indexId, ExplainState *es) { const char *result; @@ -3283,7 +3283,9 @@ explain_get_index_name(Oid indexId) result = get_rel_name(indexId); if (result == NULL) elog(ERROR, "cache lookup failed for index %u", indexId); - result = quote_identifier(result); + /* don't quote all formats, some formats have its own quote routine */ + if (es->format == EXPLAIN_FORMAT_TEXT) + result = quote_identifier(result); } return result; } @@ -3457,7 +3459,7 @@ static void ExplainIndexScanDetails(Oid indexid, ScanDirection indexorderdir, ExplainState *es) { - const char *indexname = explain_get_index_name(indexid); + const char *indexname = explain_get_index_name(indexid, es); if (es->format == EXPLAIN_FORMAT_TEXT) { -- 2.20.1