diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-10-06 23:21:45 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-10-06 23:21:45 +0000 |
| commit | 85801a4dbdee22f230637311681b8b03a72979db (patch) | |
| tree | 28054ba90fda332be0d5254e5bdaba5a2a51f1f2 /src/backend/utils/adt | |
| parent | a965750abf2504e266e5071dc90365be9485395a (diff) | |
| download | postgresql-85801a4dbdee22f230637311681b8b03a72979db.tar.gz | |
Rearrange fmgr.c and relcache so that it's possible to keep FmgrInfo
lookup info in the relcache for index access method support functions.
This makes a huge difference for dynamically loaded support functions,
and should save a few cycles even for built-in ones. Also tweak dfmgr.c
so that load_external_function is called only once, not twice, when
doing fmgr_info for a dynamically loaded function. All per performance
gripe from Teodor Sigaev, 5-Oct-01.
Diffstat (limited to 'src/backend/utils/adt')
| -rw-r--r-- | src/backend/utils/adt/ri_triggers.c | 7 | ||||
| -rw-r--r-- | src/backend/utils/adt/varbit.c | 7 | ||||
| -rw-r--r-- | src/backend/utils/adt/varchar.c | 6 |
3 files changed, 9 insertions, 11 deletions
diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index ebbb8b07ee..a03ca77440 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -18,7 +18,7 @@ * Portions Copyright (c) 2000-2001, PostgreSQL Global Development Group * Copyright 1999 Jan Wieck * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.27 2001/10/05 17:28:12 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.28 2001/10/06 23:21:44 tgl Exp $ * * ---------- */ @@ -3243,7 +3243,6 @@ ri_AttributesEqual(Oid typeid, Datum oldvalue, Datum newvalue) { HeapTuple opr_tup; Oid opr_proc; - MemoryContext oldcontext; FmgrInfo finfo; opr_tup = SearchSysCache(OPERNAME, @@ -3265,9 +3264,7 @@ ri_AttributesEqual(Oid typeid, Datum oldvalue, Datum newvalue) * table entry, we must make sure any subsidiary structures of the * fmgr record are kept in TopMemoryContext. */ - oldcontext = MemoryContextSwitchTo(TopMemoryContext); - fmgr_info(opr_proc, &finfo); - MemoryContextSwitchTo(oldcontext); + fmgr_info_cxt(opr_proc, &finfo, TopMemoryContext); entry = (RI_OpreqHashEntry *) hash_search(ri_opreq_cache, (void *) &typeid, diff --git a/src/backend/utils/adt/varbit.c b/src/backend/utils/adt/varbit.c index d75d05309d..a294bfc9ff 100644 --- a/src/backend/utils/adt/varbit.c +++ b/src/backend/utils/adt/varbit.c @@ -9,7 +9,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varbit.c,v 1.18 2001/05/22 16:37:16 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varbit.c,v 1.19 2001/10/06 23:21:44 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -19,6 +19,7 @@ #include "catalog/pg_type.h" #include "utils/array.h" #include "utils/fmgroids.h" +#include "utils/memutils.h" #include "utils/varbit.h" #define HEXDIG(z) ((z)<10 ? ((z)+'0') : ((z)-10+'A')) @@ -238,7 +239,7 @@ _bit(PG_FUNCTION_ARGS) static FmgrInfo bit_finfo; if (bit_finfo.fn_oid == InvalidOid) - fmgr_info(F_BIT, &bit_finfo); + fmgr_info_cxt(F_BIT, &bit_finfo, TopMemoryContext); MemSet(&locfcinfo, 0, sizeof(locfcinfo)); locfcinfo.flinfo = &bit_finfo; @@ -452,7 +453,7 @@ _varbit(PG_FUNCTION_ARGS) static FmgrInfo varbit_finfo; if (varbit_finfo.fn_oid == InvalidOid) - fmgr_info(F_VARBIT, &varbit_finfo); + fmgr_info_cxt(F_VARBIT, &varbit_finfo, TopMemoryContext); MemSet(&locfcinfo, 0, sizeof(locfcinfo)); locfcinfo.flinfo = &varbit_finfo; diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index 7ed56e7962..c963709ac8 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.83 2001/10/03 05:29:24 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.84 2001/10/06 23:21:44 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -285,7 +285,7 @@ _bpchar(PG_FUNCTION_ARGS) static FmgrInfo bpchar_finfo; if (bpchar_finfo.fn_oid == InvalidOid) - fmgr_info(F_BPCHAR, &bpchar_finfo); + fmgr_info_cxt(F_BPCHAR, &bpchar_finfo, TopMemoryContext); MemSet(&locfcinfo, 0, sizeof(locfcinfo)); locfcinfo.flinfo = &bpchar_finfo; @@ -544,7 +544,7 @@ _varchar(PG_FUNCTION_ARGS) static FmgrInfo varchar_finfo; if (varchar_finfo.fn_oid == InvalidOid) - fmgr_info(F_VARCHAR, &varchar_finfo); + fmgr_info_cxt(F_VARCHAR, &varchar_finfo, TopMemoryContext); MemSet(&locfcinfo, 0, sizeof(locfcinfo)); locfcinfo.flinfo = &varchar_finfo; |
