Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 27abf8d

Browse files
committed
Merge branch 'PGPRO10' into PGPROEE10
2 parents 63b55ea + 3552116 commit 27abf8d

File tree

1 file changed

+34
-16
lines changed

1 file changed

+34
-16
lines changed

src/backend/optimizer/path/indxpath.c

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3277,6 +3277,38 @@ static Oid mmGTOid = InvalidOid;
32773277
static Oid mcharOid = InvalidOid;
32783278
static Oid mvarcharOid = InvalidOid;
32793279

3280+
static Oid
3281+
findTypeOid(char *typname)
3282+
{
3283+
CatCList *catlist;
3284+
HeapTuple tup;
3285+
int n_members;
3286+
Oid typoid;
3287+
3288+
catlist = SearchSysCacheList(TYPENAMENSP, 1,
3289+
CStringGetDatum(typname),
3290+
0, 0, 0);
3291+
3292+
n_members = catlist->n_members;
3293+
3294+
if (n_members != 1)
3295+
{
3296+
ReleaseSysCacheList(catlist);
3297+
if (n_members > 1)
3298+
elog(ERROR,"There are %d candidates for '%s' type",
3299+
n_members, typname);
3300+
return InvalidOid;
3301+
}
3302+
3303+
tup = &catlist->members[0]->tuple;
3304+
3305+
typoid = HeapTupleGetOid(tup);
3306+
3307+
ReleaseSysCacheList(catlist);
3308+
3309+
return typoid;
3310+
}
3311+
32803312
static bool
32813313
fillMCharOIDS() {
32823314
CatCList *catlist;
@@ -3299,27 +3331,13 @@ fillMCharOIDS() {
32993331
tup = &catlist->members[0]->tuple;
33003332

33013333
if ( HeapTupleGetOid(tup) != mmPFPOid ) {
3302-
TypeName *typename;
3303-
Type typtup;
33043334
char *quals_funcname = "mchar_greaterstring";
33053335
Oid tmp_mmPFPOid = HeapTupleGetOid(tup);
33063336

33073337
ReleaseSysCacheList(catlist);
33083338

3309-
typename = makeTypeName("mchar");
3310-
typtup = LookupTypeName(NULL, typename, NULL, true);
3311-
if ( typtup ) {
3312-
mcharOid = typeTypeId(typtup);
3313-
ReleaseSysCache(typtup);
3314-
}
3315-
3316-
typename = makeTypeName("mvarchar");
3317-
typtup = LookupTypeName(NULL, typename, NULL, true);
3318-
if ( typtup ) {
3319-
mvarcharOid = typeTypeId(typtup);
3320-
ReleaseSysCache(typtup);
3321-
}
3322-
3339+
mcharOid = findTypeOid("mchar");
3340+
mvarcharOid = findTypeOid("mvarchar");
33233341

33243342
if ( mcharOid == InvalidOid || mvarcharOid == InvalidOid ) {
33253343
elog(LOG,"Can't find mchar/mvarvarchar types: mchar=%d mvarchar=%d",

0 commit comments

Comments
 (0)