v3-0004-GUC-optimize-for-already-case-folded-names.patch
text/x-patch
Filename: v3-0004-GUC-optimize-for-already-case-folded-names.patch
Type: text/x-patch
Part: 1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v3-0004
Subject: GUC: optimize for already case-folded names.
| File | + | − |
|---|---|---|
| src/backend/utils/misc/guc.c | 15 | 8 |
From 5ba89f4bdfc6b1056d6e7b78a5577c711cebd0af Mon Sep 17 00:00:00 2001
From: Jeff Davis <jeff@j-davis.com>
Date: Sun, 19 Nov 2023 14:00:23 -0800
Subject: [PATCH v3 4/5] GUC: optimize for already case-folded names.
---
src/backend/utils/misc/guc.c | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 5e3b95e3f2..bcadbface6 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -1310,17 +1310,24 @@ find_option(const char *name, bool create_placeholders, bool skip_errors,
{
GUCHashEntry *hentry;
int i;
- char *name_key;
Assert(name);
- /* Look it up using the hash table. */
- name_key = guc_name_key(elevel, name);
- if (name_key == NULL)
- return NULL;
- hentry = GUCHash_lookup(guc_hashtab, name_key);
- guc_free(name_key);
- name_key = NULL;
+ /*
+ * Look it up using the hash table without case-folding first, as an
+ * optimization.
+ */
+ hentry = GUCHash_lookup(guc_hashtab, name);
+
+ /* Try again with case folding. */
+ if (!hentry)
+ {
+ char *name_key = guc_name_key(elevel, name);
+ if (name_key == NULL)
+ return NULL;
+ hentry = GUCHash_lookup(guc_hashtab, name_key);
+ guc_free(name_key);
+ }
if (hentry)
return hentry->gucvar;
--
2.34.1