aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/cache/syscache.c
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2019-11-07 16:51:04 +1300
committerThomas Munro <tmunro@postgresql.org>2019-11-07 17:00:48 +1300
commit7815e7efdb4ce9575b5d8460beb0dd2569d7ca3a (patch)
treedc3d1795259ab8c2dafc371cbd89725b43abc2da /src/backend/utils/cache/syscache.c
parent3feb6ace7cfe8edbf6db702de06dc9295f307a8e (diff)
downloadpostgresql-7815e7efdb4ce9575b5d8460beb0dd2569d7ca3a.tar.gz
postgresql-7815e7efdb4ce9575b5d8460beb0dd2569d7ca3a.zip
Add reusable routine for making arrays unique.
Introduce qunique() and qunique_arg(), which can be used after qsort() and qsort_arg() respectively to remove duplicate values. Use it where appropriate. Author: Thomas Munro Reviewed-by: Tom Lane (in an earlier version) Discussion: https://postgr.es/m/CAEepm%3D2vmFTNpAmwbGGD2WaryM6T3hSDVKQPfUwjdD_5XY6vAA%40mail.gmail.com
Diffstat (limited to 'src/backend/utils/cache/syscache.c')
-rw-r--r--src/backend/utils/cache/syscache.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index 16297a52a19..36aee74ab02 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -74,6 +74,7 @@
#include "catalog/pg_ts_template.h"
#include "catalog/pg_type.h"
#include "catalog/pg_user_mapping.h"
+#include "lib/qunique.h"
#include "utils/rel.h"
#include "utils/catcache.h"
#include "utils/syscache.h"
@@ -1010,8 +1011,6 @@ void
InitCatalogCache(void)
{
int cacheId;
- int i,
- j;
StaticAssertStmt(SysCacheSize == (int) lengthof(cacheinfo),
"SysCacheSize does not match syscache.c's array");
@@ -1048,21 +1047,15 @@ InitCatalogCache(void)
/* Sort and de-dup OID arrays, so we can use binary search. */
pg_qsort(SysCacheRelationOid, SysCacheRelationOidSize,
sizeof(Oid), oid_compare);
- for (i = 1, j = 0; i < SysCacheRelationOidSize; i++)
- {
- if (SysCacheRelationOid[i] != SysCacheRelationOid[j])
- SysCacheRelationOid[++j] = SysCacheRelationOid[i];
- }
- SysCacheRelationOidSize = j + 1;
+ SysCacheRelationOidSize =
+ qunique(SysCacheRelationOid, SysCacheRelationOidSize, sizeof(Oid),
+ oid_compare);
pg_qsort(SysCacheSupportingRelOid, SysCacheSupportingRelOidSize,
sizeof(Oid), oid_compare);
- for (i = 1, j = 0; i < SysCacheSupportingRelOidSize; i++)
- {
- if (SysCacheSupportingRelOid[i] != SysCacheSupportingRelOid[j])
- SysCacheSupportingRelOid[++j] = SysCacheSupportingRelOid[i];
- }
- SysCacheSupportingRelOidSize = j + 1;
+ SysCacheSupportingRelOidSize =
+ qunique(SysCacheSupportingRelOid, SysCacheSupportingRelOidSize,
+ sizeof(Oid), oid_compare);
CacheInitialized = true;
}