Hello Robert,
As part of the current reviewfest, I reviewed your patch, and made some
changes on the way.
This was all ok:
*) while proofreading I did not find typos other than the one that
Joachim had already pointed out.
*) the addition of 5-key lookups to the existing ones seems a natural
extension, and the best way to solve finding the index that
can-order-by-op needed for the knngist. Solutions were debated in a
relatively long thread 'knngist patch support', where the first
reference of four columns being too less was in
http://archives.postgresql.org/pgsql-hackers/2010-02/msg01071.php
*) regression test ok
*) performance: comparing make check speeds with and without patch did
not reveal significant differences.
The changes:
*) since the API of the syscache functions is changed, one would expect
a lot of compile errors but none were found. The patch of
http://archives.postgresql.org/pgsql-committers/2010-02/msg00174.php
that introduced macro's around the base functions made that possible.
Two calls in contrib/tsearch2 were overlooked.
*) after changing the calls in contrib/tsearch2 and compiled and
installchecked ok
*) I also removed a few unneeded includes of syscache.h from some
contrib modules
*) In syscache.c the cachedesc structure has a key array that is
increased from 4 to CATCACHE_MAXKEYS. However, each element of the
cacheinfo[] array still has 4 attribute numbers listed, so the 5th
element is undefined. To not rely on compiler or platform and for code
uniformity I changed all syscaches to have 5 attribute numbers.
*) To test the new functions I added an extra syscache and performed a 5
key lookup. This gave the following error FATAL: wrong number of hash
keys: 5 in CatalogCacheComputeHashValue. I changed that as well, but
somebody with intimate knowledge of hash algorithms should probably
decide which bit-shifting on the key values is appropriate. It currently
does the same as key 3: hashValue ^= oneHash << 16; hashValue ^= oneHash
>> 16;
I tested a negative and positive search with SearchSysCacheExists5, that
were executed as expected. Regression test still ok.
Attach is a new patch with all things described above addressed.
regards,
Yeb Havinga
Robert Haas wrote:
> On Mon, Mar 29, 2010 at 4:21 AM, Joachim Wieland <joe@mcknight.de> wrote:
>
>> On Mon, Mar 29, 2010 at 12:32 AM, Robert Haas <robertmhaas@gmail.com> wrote:
>>
>>> Per previous discussion, PFA a patch to change the maximum number of
>>> keys for a syscache from 4 to 5.
>>>
>>> http://archives.postgresql.org/pgsql-hackers/2010-02/msg01105.php
>>>
>>> This is intended for application to 9.1, and is supporting
>>> infrastructure for knngist.
>>>
>> It looks like there should be a 5 rather than a 4 for nkeys of
>> SearchSysCacheList().
>>
>> +#define SearchSysCacheList5(cacheId, key1, key2, key3, key4, key5) \
>> + SearchSysCacheList(cacheId, 4, key1, key2, key3, key4, key5)
>>
>
> Good catch. Will fix.
>
> ...Robert
>
>
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index 82b0730..e803652 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -63,7 +63,6 @@
#include "utils/hsearch.h"
#include "utils/lsyscache.h"
#include "utils/memutils.h"
-#include "utils/syscache.h"
#include "utils/tqual.h"
#include "dblink.h"
diff --git a/contrib/ltree/ltree_op.c b/contrib/ltree/ltree_op.c
index c76e6cc..906d38d 100644
--- a/contrib/ltree/ltree_op.c
+++ b/contrib/ltree/ltree_op.c
@@ -11,7 +11,6 @@
#include "utils/builtins.h"
#include "utils/lsyscache.h"
#include "utils/selfuncs.h"
-#include "utils/syscache.h"
#include "ltree.h"
PG_MODULE_MAGIC;
diff --git a/contrib/tsearch2/tsearch2.c b/contrib/tsearch2/tsearch2.c
index d421f77..224563a 100644
--- a/contrib/tsearch2/tsearch2.c
+++ b/contrib/tsearch2/tsearch2.c
@@ -172,9 +172,8 @@ tsa_set_curdict(PG_FUNCTION_ARGS)
{
Oid dict_oid = PG_GETARG_OID(0);
- if (!SearchSysCacheExists(TSDICTOID,
- ObjectIdGetDatum(dict_oid),
- 0, 0, 0))
+ if (!SearchSysCacheExists1(TSDICTOID,
+ ObjectIdGetDatum(dict_oid)))
elog(ERROR, "cache lookup failed for text search dictionary %u",
dict_oid);
@@ -211,9 +210,8 @@ tsa_set_curprs(PG_FUNCTION_ARGS)
{
Oid parser_oid = PG_GETARG_OID(0);
- if (!SearchSysCacheExists(TSPARSEROID,
- ObjectIdGetDatum(parser_oid),
- 0, 0, 0))
+ if (!SearchSysCacheExists1(TSPARSEROID,
+ ObjectIdGetDatum(parser_oid)))
elog(ERROR, "cache lookup failed for text search parser %u",
parser_oid);
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 07d6d89..c1ef41b 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -183,6 +183,13 @@ CatalogCacheComputeHashValue(CatCache *cache, int nkeys, ScanKey cur_skey)
switch (nkeys)
{
+ case 5:
+ oneHash =
+ DatumGetUInt32(DirectFunctionCall1(cache->cc_hashfunc[4],
+ cur_skey[4].sk_argument));
+ hashValue ^= oneHash << 16;
+ hashValue ^= oneHash >> 16;
+ /* FALLTHROUGH */
case 4:
oneHash =
DatumGetUInt32(DirectFunctionCall1(cache->cc_hashfunc[3],
@@ -1057,7 +1064,8 @@ SearchCatCache(CatCache *cache,
Datum v1,
Datum v2,
Datum v3,
- Datum v4)
+ Datum v4,
+ Datum v5)
{
ScanKeyData cur_skey[CATCACHE_MAXKEYS];
uint32 hashValue;
@@ -1086,6 +1094,7 @@ SearchCatCache(CatCache *cache,
cur_skey[1].sk_argument = v2;
cur_skey[2].sk_argument = v3;
cur_skey[3].sk_argument = v4;
+ cur_skey[4].sk_argument = v5;
/*
* find the hash bucket in which to look for the tuple
@@ -1298,7 +1307,8 @@ SearchCatCacheList(CatCache *cache,
Datum v1,
Datum v2,
Datum v3,
- Datum v4)
+ Datum v4,
+ Datum v5)
{
ScanKeyData cur_skey[CATCACHE_MAXKEYS];
uint32 lHashValue;
@@ -1333,6 +1343,7 @@ SearchCatCacheList(CatCache *cache,
cur_skey[1].sk_argument = v2;
cur_skey[2].sk_argument = v3;
cur_skey[3].sk_argument = v4;
+ cur_skey[4].sk_argument = v5;
/*
* compute a hash value of the given keys for faster search. We don't
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index 61b06ac..8dca335 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -95,7 +95,7 @@ struct cachedesc
Oid reloid; /* OID of the relation being cached */
Oid indoid; /* OID of index relation for this cache */
int nkeys; /* # of keys needed for cache lookup */
- int key[4]; /* attribute numbers of key attrs */
+ int key[CATCACHE_MAXKEYS]; /* attribute numbers of key attrs */
int nbuckets; /* number of hash buckets for this cache */
};
@@ -107,6 +107,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_aggregate_aggfnoid,
0,
0,
+ 0,
0
},
32
@@ -118,6 +119,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_am_amname,
0,
0,
+ 0,
0
},
4
@@ -129,6 +131,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
4
@@ -140,6 +143,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_amop_amopopr,
Anum_pg_amop_amopfamily,
0,
+ 0,
0
},
64
@@ -151,7 +155,8 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_amop_amopfamily,
Anum_pg_amop_amoplefttype,
Anum_pg_amop_amoprighttype,
- Anum_pg_amop_amopstrategy
+ Anum_pg_amop_amopstrategy,
+ 0
},
64
},
@@ -162,7 +167,8 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_amproc_amprocfamily,
Anum_pg_amproc_amproclefttype,
Anum_pg_amproc_amprocrighttype,
- Anum_pg_amproc_amprocnum
+ Anum_pg_amproc_amprocnum,
+ 0
},
64
},
@@ -173,6 +179,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_attribute_attrelid,
Anum_pg_attribute_attname,
0,
+ 0,
0
},
2048
@@ -184,6 +191,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_attribute_attrelid,
Anum_pg_attribute_attnum,
0,
+ 0,
0
},
2048
@@ -195,6 +203,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_auth_members_member,
Anum_pg_auth_members_roleid,
0,
+ 0,
0
},
128
@@ -206,6 +215,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_auth_members_roleid,
Anum_pg_auth_members_member,
0,
+ 0,
0
},
128
@@ -217,6 +227,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_authid_rolname,
0,
0,
+ 0,
0
},
128
@@ -228,6 +239,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
128
@@ -240,6 +252,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_cast_castsource,
Anum_pg_cast_casttarget,
0,
+ 0,
0
},
256
@@ -251,6 +264,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_opclass_opcmethod,
Anum_pg_opclass_opcname,
Anum_pg_opclass_opcnamespace,
+ 0,
0
},
64
@@ -262,6 +276,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
64
@@ -274,6 +289,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_conversion_conforencoding,
Anum_pg_conversion_contoencoding,
ObjectIdAttributeNumber,
+ 0
},
128
},
@@ -284,6 +300,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_conversion_conname,
Anum_pg_conversion_connamespace,
0,
+ 0,
0
},
128
@@ -295,6 +312,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
1024
@@ -306,6 +324,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
128
@@ -317,6 +336,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
4
@@ -328,6 +348,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_default_acl_defaclrole,
Anum_pg_default_acl_defaclnamespace,
Anum_pg_default_acl_defaclobjtype,
+ 0,
0
},
256
@@ -339,6 +360,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
256
@@ -350,6 +372,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_enum_enumtypid,
Anum_pg_enum_enumlabel,
0,
+ 0,
0
},
256
@@ -361,6 +384,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_foreign_data_wrapper_fdwname,
0,
0,
+ 0,
0
},
8
@@ -372,6 +396,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
8
@@ -383,6 +408,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_foreign_server_srvname,
0,
0,
+ 0,
0
},
32
@@ -394,6 +420,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
32
@@ -405,6 +432,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_index_indexrelid,
0,
0,
+ 0,
0
},
1024
@@ -416,6 +444,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_language_lanname,
0,
0,
+ 0,
0
},
4
@@ -427,6 +456,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
4
@@ -438,6 +468,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_namespace_nspname,
0,
0,
+ 0,
0
},
256
@@ -449,6 +480,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
256
@@ -460,7 +492,9 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_operator_oprname,
Anum_pg_operator_oprleft,
Anum_pg_operator_oprright,
- Anum_pg_operator_oprnamespace
+ Anum_pg_operator_oprnamespace,
+ 0
+
},
1024
},
@@ -471,6 +505,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
1024
@@ -482,6 +517,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_opfamily_opfmethod,
Anum_pg_opfamily_opfname,
Anum_pg_opfamily_opfnamespace,
+ 0,
0
},
64
@@ -493,6 +529,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
64
@@ -504,6 +541,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_proc_proname,
Anum_pg_proc_proargtypes,
Anum_pg_proc_pronamespace,
+ 0,
0
},
2048
@@ -515,6 +553,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
2048
@@ -526,6 +565,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_class_relname,
Anum_pg_class_relnamespace,
0,
+ 0,
0
},
1024
@@ -537,6 +577,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
1024
@@ -548,6 +589,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_rewrite_ev_class,
Anum_pg_rewrite_rulename,
0,
+ 0,
0
},
1024
@@ -559,6 +601,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_statistic_starelid,
Anum_pg_statistic_staattnum,
Anum_pg_statistic_stainherit,
+ 0,
0
},
1024
@@ -571,6 +614,7 @@ static const struct cachedesc cacheinfo[] = {
0,
0,
0,
+ 0
},
16
},
@@ -581,6 +625,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_ts_config_map_mapcfg,
Anum_pg_ts_config_map_maptokentype,
Anum_pg_ts_config_map_mapseqno,
+ 0,
0
},
4
@@ -592,6 +637,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_ts_config_cfgname,
Anum_pg_ts_config_cfgnamespace,
0,
+ 0,
0
},
16
@@ -603,6 +649,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
16
@@ -614,6 +661,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_ts_dict_dictname,
Anum_pg_ts_dict_dictnamespace,
0,
+ 0,
0
},
16
@@ -625,6 +673,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
16
@@ -636,6 +685,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_ts_parser_prsname,
Anum_pg_ts_parser_prsnamespace,
0,
+ 0,
0
},
4
@@ -647,6 +697,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
4
@@ -658,6 +709,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_ts_template_tmplname,
Anum_pg_ts_template_tmplnamespace,
0,
+ 0,
0
},
16
@@ -669,6 +721,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
16
@@ -680,6 +733,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_type_typname,
Anum_pg_type_typnamespace,
0,
+ 0,
0
},
1024
@@ -691,6 +745,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
1024
@@ -702,6 +757,7 @@ static const struct cachedesc cacheinfo[] = {
ObjectIdAttributeNumber,
0,
0,
+ 0,
0
},
128
@@ -713,6 +769,7 @@ static const struct cachedesc cacheinfo[] = {
Anum_pg_user_mapping_umuser,
Anum_pg_user_mapping_umserver,
0,
+ 0,
0
},
128
@@ -803,13 +860,14 @@ SearchSysCache(int cacheId,
Datum key1,
Datum key2,
Datum key3,
- Datum key4)
+ Datum key4,
+ Datum key5)
{
if (cacheId < 0 || cacheId >= SysCacheSize ||
!PointerIsValid(SysCache[cacheId]))
elog(ERROR, "invalid cache id: %d", cacheId);
- return SearchCatCache(SysCache[cacheId], key1, key2, key3, key4);
+ return SearchCatCache(SysCache[cacheId], key1, key2, key3, key4, key5);
}
/*
@@ -835,12 +893,13 @@ SearchSysCacheCopy(int cacheId,
Datum key1,
Datum key2,
Datum key3,
- Datum key4)
+ Datum key4,
+ Datum key5)
{
HeapTuple tuple,
newtuple;
- tuple = SearchSysCache(cacheId, key1, key2, key3, key4);
+ tuple = SearchSysCache(cacheId, key1, key2, key3, key4, key5);
if (!HeapTupleIsValid(tuple))
return tuple;
newtuple = heap_copytuple(tuple);
@@ -859,11 +918,12 @@ SearchSysCacheExists(int cacheId,
Datum key1,
Datum key2,
Datum key3,
- Datum key4)
+ Datum key4,
+ Datum key5)
{
HeapTuple tuple;
- tuple = SearchSysCache(cacheId, key1, key2, key3, key4);
+ tuple = SearchSysCache(cacheId, key1, key2, key3, key4, key5);
if (!HeapTupleIsValid(tuple))
return false;
ReleaseSysCache(tuple);
@@ -882,12 +942,13 @@ GetSysCacheOid(int cacheId,
Datum key1,
Datum key2,
Datum key3,
- Datum key4)
+ Datum key4,
+ Datum key5)
{
HeapTuple tuple;
Oid result;
- tuple = SearchSysCache(cacheId, key1, key2, key3, key4);
+ tuple = SearchSysCache(cacheId, key1, key2, key3, key4, key5);
if (!HeapTupleIsValid(tuple))
return InvalidOid;
result = HeapTupleGetOid(tuple);
@@ -1008,12 +1069,12 @@ SysCacheGetAttr(int cacheId, HeapTuple tup,
*/
struct catclist *
SearchSysCacheList(int cacheId, int nkeys,
- Datum key1, Datum key2, Datum key3, Datum key4)
+ Datum key1, Datum key2, Datum key3, Datum key4, Datum key5)
{
if (cacheId < 0 || cacheId >= SysCacheSize ||
!PointerIsValid(SysCache[cacheId]))
elog(ERROR, "invalid cache id: %d", cacheId);
return SearchCatCacheList(SysCache[cacheId], nkeys,
- key1, key2, key3, key4);
+ key1, key2, key3, key4, key5);
}
diff --git a/src/include/utils/catcache.h b/src/include/utils/catcache.h
index 0db116d..64e683e 100644
--- a/src/include/utils/catcache.h
+++ b/src/include/utils/catcache.h
@@ -32,7 +32,7 @@
* struct catcacheheader: information for managing all the caches.
*/
-#define CATCACHE_MAXKEYS 4
+#define CATCACHE_MAXKEYS 5
typedef struct catcache
{
@@ -171,12 +171,14 @@ extern void InitCatCachePhase2(CatCache *cache, bool touch_index);
extern HeapTuple SearchCatCache(CatCache *cache,
Datum v1, Datum v2,
- Datum v3, Datum v4);
+ Datum v3, Datum v4,
+ Datum v5);
extern void ReleaseCatCache(HeapTuple tuple);
extern CatCList *SearchCatCacheList(CatCache *cache, int nkeys,
Datum v1, Datum v2,
- Datum v3, Datum v4);
+ Datum v3, Datum v4,
+ Datum v5);
extern void ReleaseCatCacheList(CatCList *list);
extern void ResetCatalogCaches(void);
diff --git a/src/include/utils/syscache.h b/src/include/utils/syscache.h
index 2f19e5c..fc9bb08 100644
--- a/src/include/utils/syscache.h
+++ b/src/include/utils/syscache.h
@@ -91,16 +91,17 @@ extern void InitCatalogCache(void);
extern void InitCatalogCachePhase2(void);
extern HeapTuple SearchSysCache(int cacheId,
- Datum key1, Datum key2, Datum key3, Datum key4);
+ Datum key1, Datum key2, Datum key3, Datum key4, Datum key5);
extern void ReleaseSysCache(HeapTuple tuple);
/* convenience routines */
extern HeapTuple SearchSysCacheCopy(int cacheId,
- Datum key1, Datum key2, Datum key3, Datum key4);
+ Datum key1, Datum key2, Datum key3, Datum key4, Datum key5);
extern bool SearchSysCacheExists(int cacheId,
- Datum key1, Datum key2, Datum key3, Datum key4);
+ Datum key1, Datum key2, Datum key3,
+ Datum key4, Datum key5);
extern Oid GetSysCacheOid(int cacheId,
- Datum key1, Datum key2, Datum key3, Datum key4);
+ Datum key1, Datum key2, Datum key3, Datum key4, Datum key5);
extern HeapTuple SearchSysCacheAttName(Oid relid, const char *attname);
extern HeapTuple SearchSysCacheCopyAttName(Oid relid, const char *attname);
@@ -111,7 +112,7 @@ extern Datum SysCacheGetAttr(int cacheId, HeapTuple tup,
/* list-search interface. Users of this must import catcache.h too */
extern struct catclist *SearchSysCacheList(int cacheId, int nkeys,
- Datum key1, Datum key2, Datum key3, Datum key4);
+ Datum key1, Datum key2, Datum key3, Datum key4, Datum key5);
/*
* The use of the macros below rather than direct calls to the corresponding
@@ -119,49 +120,59 @@ extern struct catclist *SearchSysCacheList(int cacheId, int nkeys,
* maximum number of keys.
*/
#define SearchSysCache1(cacheId, key1) \
- SearchSysCache(cacheId, key1, 0, 0, 0)
+ SearchSysCache(cacheId, key1, 0, 0, 0, 0)
#define SearchSysCache2(cacheId, key1, key2) \
- SearchSysCache(cacheId, key1, key2, 0, 0)
+ SearchSysCache(cacheId, key1, key2, 0, 0, 0)
#define SearchSysCache3(cacheId, key1, key2, key3) \
- SearchSysCache(cacheId, key1, key2, key3, 0)
+ SearchSysCache(cacheId, key1, key2, key3, 0, 0)
#define SearchSysCache4(cacheId, key1, key2, key3, key4) \
- SearchSysCache(cacheId, key1, key2, key3, key4)
+ SearchSysCache(cacheId, key1, key2, key3, key4, 0)
+#define SearchSysCache5(cacheId, key1, key2, key3, key4, key5) \
+ SearchSysCache(cacheId, key1, key2, key3, key4, key5)
#define SearchSysCacheCopy1(cacheId, key1) \
- SearchSysCacheCopy(cacheId, key1, 0, 0, 0)
+ SearchSysCacheCopy(cacheId, key1, 0, 0, 0, 0)
#define SearchSysCacheCopy2(cacheId, key1, key2) \
- SearchSysCacheCopy(cacheId, key1, key2, 0, 0)
+ SearchSysCacheCopy(cacheId, key1, key2, 0, 0, 0)
#define SearchSysCacheCopy3(cacheId, key1, key2, key3) \
- SearchSysCacheCopy(cacheId, key1, key2, key3, 0)
+ SearchSysCacheCopy(cacheId, key1, key2, key3, 0, 0)
#define SearchSysCacheCopy4(cacheId, key1, key2, key3, key4) \
- SearchSysCacheCopy(cacheId, key1, key2, key3, key4)
+ SearchSysCacheCopy(cacheId, key1, key2, key3, key4, 0)
+#define SearchSysCacheCopy5(cacheId, key1, key2, key3, key4, key5) \
+ SearchSysCacheCopy(cacheId, key1, key2, key3, key4, key5)
#define SearchSysCacheExists1(cacheId, key1) \
- SearchSysCacheExists(cacheId, key1, 0, 0, 0)
+ SearchSysCacheExists(cacheId, key1, 0, 0, 0, 0)
#define SearchSysCacheExists2(cacheId, key1, key2) \
- SearchSysCacheExists(cacheId, key1, key2, 0, 0)
+ SearchSysCacheExists(cacheId, key1, key2, 0, 0, 0)
#define SearchSysCacheExists3(cacheId, key1, key2, key3) \
- SearchSysCacheExists(cacheId, key1, key2, key3, 0)
+ SearchSysCacheExists(cacheId, key1, key2, key3, 0, 0)
#define SearchSysCacheExists4(cacheId, key1, key2, key3, key4) \
- SearchSysCacheExists(cacheId, key1, key2, key3, key4)
+ SearchSysCacheExists(cacheId, key1, key2, key3, key4, 0)
+#define SearchSysCacheExists5(cacheId, key1, key2, key3, key4, key5) \
+ SearchSysCacheExists(cacheId, key1, key2, key3, key4, key5)
#define GetSysCacheOid1(cacheId, key1) \
- GetSysCacheOid(cacheId, key1, 0, 0, 0)
+ GetSysCacheOid(cacheId, key1, 0, 0, 0, 0)
#define GetSysCacheOid2(cacheId, key1, key2) \
- GetSysCacheOid(cacheId, key1, key2, 0, 0)
+ GetSysCacheOid(cacheId, key1, key2, 0, 0, 0)
#define GetSysCacheOid3(cacheId, key1, key2, key3) \
- GetSysCacheOid(cacheId, key1, key2, key3, 0)
+ GetSysCacheOid(cacheId, key1, key2, key3, 0, 0)
#define GetSysCacheOid4(cacheId, key1, key2, key3, key4) \
- GetSysCacheOid(cacheId, key1, key2, key3, key4)
+ GetSysCacheOid(cacheId, key1, key2, key3, key4, 0)
+#define GetSysCacheOid5(cacheId, key1, key2, key3, key4, key5) \
+ GetSysCacheOid(cacheId, key1, key2, key3, key4, key5)
#define SearchSysCacheList1(cacheId, key1) \
- SearchSysCacheList(cacheId, 1, key1, 0, 0, 0)
+ SearchSysCacheList(cacheId, 1, key1, 0, 0, 0, 0)
#define SearchSysCacheList2(cacheId, key1, key2) \
- SearchSysCacheList(cacheId, 2, key1, key2, 0, 0)
+ SearchSysCacheList(cacheId, 2, key1, key2, 0, 0, 0)
#define SearchSysCacheList3(cacheId, key1, key2, key3) \
- SearchSysCacheList(cacheId, 3, key1, key2, key3, 0)
+ SearchSysCacheList(cacheId, 3, key1, key2, key3, 0, 0)
#define SearchSysCacheList4(cacheId, key1, key2, key3, key4) \
- SearchSysCacheList(cacheId, 4, key1, key2, key3, key4)
+ SearchSysCacheList(cacheId, 4, key1, key2, key3, key4, 0)
+#define SearchSysCacheList5(cacheId, key1, key2, key3, key4, key5) \
+ SearchSysCacheList(cacheId, 5, key1, key2, key3, key4, key5)
#define ReleaseSysCacheList(x) ReleaseCatCacheList(x)