Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf2d70d3

Browse files
committed
Functions live in namespaces. Qualified function names work, eg
SELECT schema1.func2(...). Aggregate names can be qualified at thesyntactic level, but the qualification is ignored for the moment.
1 parentc419c22 commitf2d70d3

36 files changed

+657
-663
lines changed

‎src/backend/bootstrap/bootparse.y‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*
1111
* IDENTIFICATION
12-
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.43 2002/04/01 14:22:41 momjian Exp $
12+
* $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.44 2002/04/09 20:35:46 tgl Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -272,6 +272,7 @@ boot_index_param:
272272
{
273273
IndexElem *n =makeNode(IndexElem);
274274
n->name =LexIDStr($1);
275+
n->funcname = n->args = NIL;/* no func indexes*/
275276
n->class =LexIDStr($2);
276277
$$ = n;
277278
}

‎src/backend/catalog/aclchk.c‎

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.61 2002/03/31 06:26:29 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.62 2002/04/09 20:35:46 tgl Exp $
1212
*
1313
* NOTES
1414
* See acl.h.
@@ -283,51 +283,6 @@ ExecuteGrantStmt_Table(GrantStmt *stmt)
283283
}
284284

285285

286-
staticOid
287-
find_function_with_arglist(char*name,List*arguments)
288-
{
289-
Oidoid;
290-
Oidargoids[FUNC_MAX_ARGS];
291-
inti;
292-
int16argcount;
293-
294-
MemSet(argoids,0,FUNC_MAX_ARGS*sizeof(Oid));
295-
argcount=length(arguments);
296-
if (argcount>FUNC_MAX_ARGS)
297-
elog(ERROR,"functions cannot have more than %d arguments",
298-
FUNC_MAX_ARGS);
299-
300-
for (i=0;i<argcount;i++)
301-
{
302-
TypeName*t= (TypeName*)lfirst(arguments);
303-
304-
argoids[i]=LookupTypeName(t);
305-
if (!OidIsValid(argoids[i]))
306-
{
307-
char*typnam=TypeNameToString(t);
308-
309-
if (strcmp(typnam,"opaque")==0)
310-
argoids[i]=InvalidOid;
311-
else
312-
elog(ERROR,"Type \"%s\" does not exist",typnam);
313-
}
314-
315-
arguments=lnext(arguments);
316-
}
317-
318-
oid=GetSysCacheOid(PROCNAME,
319-
PointerGetDatum(name),
320-
Int16GetDatum(argcount),
321-
PointerGetDatum(argoids),
322-
0);
323-
324-
if (!OidIsValid(oid))
325-
func_error(NULL,name,argcount,argoids,NULL);
326-
327-
returnoid;
328-
}
329-
330-
331286
staticvoid
332287
ExecuteGrantStmt_Function(GrantStmt*stmt)
333288
{
@@ -365,7 +320,8 @@ ExecuteGrantStmt_Function(GrantStmt *stmt)
365320
charnulls[Natts_pg_proc];
366321
charreplaces[Natts_pg_proc];
367322

368-
oid=find_function_with_arglist(func->funcname,func->funcargs);
323+
oid=LookupFuncNameTypeNames(func->funcname,func->funcargs,
324+
true,"GRANT");
369325
relation=heap_openr(ProcedureRelationName,RowExclusiveLock);
370326
tuple=SearchSysCache(PROCOID,ObjectIdGetDatum(oid),0,0,0);
371327
if (!HeapTupleIsValid(tuple))

‎src/backend/catalog/namespace.c‎

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* Portions Copyright (c) 1994, Regents of the University of California
1414
*
1515
* IDENTIFICATION
16-
* $Header: /cvsroot/pgsql/src/backend/catalog/namespace.c,v 1.6 2002/04/06 06:59:21 tgl Exp $
16+
* $Header: /cvsroot/pgsql/src/backend/catalog/namespace.c,v 1.7 2002/04/09 20:35:47 tgl Exp $
1717
*
1818
*-------------------------------------------------------------------------
1919
*/
@@ -28,6 +28,7 @@
2828
#include"catalog/pg_namespace.h"
2929
#include"catalog/pg_proc.h"
3030
#include"catalog/pg_shadow.h"
31+
#include"lib/stringinfo.h"
3132
#include"miscadmin.h"
3233
#include"nodes/makefuncs.h"
3334
#include"storage/backendid.h"
@@ -367,7 +368,7 @@ FuncnameGetCandidates(List *names, int nargs)
367368
}
368369

369370
/* Search syscache by name and nargs only */
370-
catlist=SearchSysCacheList(PROCNAME,2,
371+
catlist=SearchSysCacheList(PROCNAMENSP,2,
371372
CStringGetDatum(funcname),
372373
Int16GetDatum(nargs),
373374
0,0);
@@ -564,6 +565,29 @@ makeRangeVarFromNameList(List *names)
564565
returnrel;
565566
}
566567

568+
/*
569+
* NameListToString
570+
*Utility routine to convert a qualified-name list into a string.
571+
*Used primarily to form error messages.
572+
*/
573+
char*
574+
NameListToString(List*names)
575+
{
576+
StringInfoDatastring;
577+
List*l;
578+
579+
initStringInfo(&string);
580+
581+
foreach(l,names)
582+
{
583+
if (l!=names)
584+
appendStringInfoChar(&string,'.');
585+
appendStringInfo(&string,"%s",strVal(lfirst(l)));
586+
}
587+
588+
returnstring.data;
589+
}
590+
567591
/*
568592
* isTempNamespace - is the given namespace my temporary-table namespace?
569593
*/

‎src/backend/catalog/pg_aggregate.c‎

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.42 2002/03/29 19:06:01 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.43 2002/04/09 20:35:47 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -17,6 +17,7 @@
1717
#include"access/heapam.h"
1818
#include"catalog/catname.h"
1919
#include"catalog/indexing.h"
20+
#include"catalog/namespace.h"
2021
#include"catalog/pg_aggregate.h"
2122
#include"catalog/pg_proc.h"
2223
#include"catalog/pg_type.h"
@@ -33,8 +34,8 @@
3334
void
3435
AggregateCreate(constchar*aggName,
3536
OidaggNamespace,
36-
char*aggtransfnName,
37-
char*aggfinalfnName,
37+
List*aggtransfnName,
38+
List*aggfinalfnName,
3839
OidaggBaseType,
3940
OidaggTransType,
4041
constchar*agginitval)
@@ -79,19 +80,18 @@ AggregateCreate(const char *aggName,
7980
}
8081
else
8182
nargs=1;
82-
tup=SearchSysCache(PROCNAME,
83-
PointerGetDatum(aggtransfnName),
84-
Int32GetDatum(nargs),
85-
PointerGetDatum(fnArgs),
86-
0);
83+
transfn=LookupFuncName(aggtransfnName,nargs,fnArgs);
84+
if (!OidIsValid(transfn))
85+
func_error("AggregateCreate",aggtransfnName,nargs,fnArgs,NULL);
86+
tup=SearchSysCache(PROCOID,
87+
ObjectIdGetDatum(transfn),
88+
0,0,0);
8789
if (!HeapTupleIsValid(tup))
8890
func_error("AggregateCreate",aggtransfnName,nargs,fnArgs,NULL);
89-
transfn=tup->t_data->t_oid;
90-
Assert(OidIsValid(transfn));
9191
proc= (Form_pg_proc)GETSTRUCT(tup);
9292
if (proc->prorettype!=aggTransType)
9393
elog(ERROR,"return type of transition function %s is not %s",
94-
aggtransfnName,typeidTypeName(aggTransType));
94+
NameListToString(aggtransfnName),typeidTypeName(aggTransType));
9595

9696
/*
9797
* If the transfn is strict and the initval is NULL, make sure input
@@ -111,15 +111,14 @@ AggregateCreate(const char *aggName,
111111
{
112112
fnArgs[0]=aggTransType;
113113
fnArgs[1]=0;
114-
tup=SearchSysCache(PROCNAME,
115-
PointerGetDatum(aggfinalfnName),
116-
Int32GetDatum(1),
117-
PointerGetDatum(fnArgs),
118-
0);
114+
finalfn=LookupFuncName(aggfinalfnName,1,fnArgs);
115+
if (!OidIsValid(finalfn))
116+
func_error("AggregateCreate",aggfinalfnName,1,fnArgs,NULL);
117+
tup=SearchSysCache(PROCOID,
118+
ObjectIdGetDatum(finalfn),
119+
0,0,0);
119120
if (!HeapTupleIsValid(tup))
120121
func_error("AggregateCreate",aggfinalfnName,1,fnArgs,NULL);
121-
finalfn=tup->t_data->t_oid;
122-
Assert(OidIsValid(finalfn));
123122
proc= (Form_pg_proc)GETSTRUCT(tup);
124123
finaltype=proc->prorettype;
125124
ReleaseSysCache(tup);

‎src/backend/catalog/pg_operator.c‎

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.64 2002/03/29 19:06:01 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.65 2002/04/09 20:35:47 tgl Exp $
1212
*
1313
* NOTES
1414
* these routines moved here from commands/define.c and somewhat cleaned up.
@@ -27,6 +27,7 @@
2727
#include"parser/parse_func.h"
2828
#include"utils/builtins.h"
2929
#include"utils/fmgroids.h"
30+
#include"utils/lsyscache.h"
3031
#include"utils/syscache.h"
3132

3233

@@ -42,13 +43,13 @@ static Oid OperatorShellMake(const char *operatorName,
4243
staticvoidOperatorDef(constchar*operatorName,
4344
OidleftTypeId,
4445
OidrightTypeId,
45-
constchar*procedureName,
46+
List*procedureName,
4647
uint16precedence,
4748
boolisLeftAssociative,
4849
constchar*commutatorName,
4950
constchar*negatorName,
50-
constchar*restrictionName,
51-
constchar*joinName,
51+
List*restrictionName,
52+
List*joinName,
5253
boolcanHash,
5354
constchar*leftSortName,
5455
constchar*rightSortName);
@@ -373,13 +374,13 @@ static void
373374
OperatorDef(constchar*operatorName,
374375
OidleftTypeId,
375376
OidrightTypeId,
376-
constchar*procedureName,
377+
List*procedureName,
377378
uint16precedence,
378379
boolisLeftAssociative,
379380
constchar*commutatorName,
380381
constchar*negatorName,
381-
constchar*restrictionName,
382-
constchar*joinName,
382+
List*restrictionName,
383+
List*joinName,
383384
boolcanHash,
384385
constchar*leftSortName,
385386
constchar*rightSortName)
@@ -398,6 +399,7 @@ OperatorDef(const char *operatorName,
398399
constchar*name[4];
399400
OidtypeId[FUNC_MAX_ARGS];
400401
intnargs;
402+
OidprocOid;
401403
NameDataoname;
402404
TupleDesctupDesc;
403405
ScanKeyDataopKey[3];
@@ -456,19 +458,12 @@ OperatorDef(const char *operatorName,
456458
typeId[1]=rightTypeId;
457459
nargs=2;
458460
}
459-
tup=SearchSysCache(PROCNAME,
460-
PointerGetDatum(procedureName),
461-
Int32GetDatum(nargs),
462-
PointerGetDatum(typeId),
463-
0);
464-
if (!HeapTupleIsValid(tup))
461+
procOid=LookupFuncName(procedureName,nargs,typeId);
462+
if (!OidIsValid(procOid))
465463
func_error("OperatorDef",procedureName,nargs,typeId,NULL);
466464

467-
values[Anum_pg_operator_oprcode-1]=ObjectIdGetDatum(tup->t_data->t_oid);
468-
values[Anum_pg_operator_oprresult-1]=ObjectIdGetDatum(((Form_pg_proc)
469-
GETSTRUCT(tup))->prorettype);
470-
471-
ReleaseSysCache(tup);
465+
values[Anum_pg_operator_oprcode-1]=ObjectIdGetDatum(procOid);
466+
values[Anum_pg_operator_oprresult-1]=ObjectIdGetDatum(get_func_rettype(procOid));
472467

473468
/*
474469
* find restriction estimator
@@ -483,11 +478,7 @@ OperatorDef(const char *operatorName,
483478
typeId[2]=0;/* args list (opaque type) */
484479
typeId[3]=INT4OID;/* varRelid */
485480

486-
restOid=GetSysCacheOid(PROCNAME,
487-
PointerGetDatum(restrictionName),
488-
Int32GetDatum(4),
489-
PointerGetDatum(typeId),
490-
0);
481+
restOid=LookupFuncName(restrictionName,4,typeId);
491482
if (!OidIsValid(restOid))
492483
func_error("OperatorDef",restrictionName,4,typeId,NULL);
493484

@@ -508,11 +499,7 @@ OperatorDef(const char *operatorName,
508499
typeId[1]=OIDOID;/* operator OID */
509500
typeId[2]=0;/* args list (opaque type) */
510501

511-
joinOid=GetSysCacheOid(PROCNAME,
512-
PointerGetDatum(joinName),
513-
Int32GetDatum(3),
514-
PointerGetDatum(typeId),
515-
0);
502+
joinOid=LookupFuncName(joinName,3,typeId);
516503
if (!OidIsValid(joinOid))
517504
func_error("OperatorDef",joinName,3,typeId,NULL);
518505

@@ -950,13 +937,13 @@ OperatorCreate(const char *operatorName,
950937
OperatorDef(operatorName,
951938
leftTypeId,
952939
rightTypeId,
953-
procedureName,
940+
makeList1(makeString((char*)procedureName)),/* XXX */
954941
precedence,
955942
isLeftAssociative,
956943
commutatorName,
957944
negatorName,
958-
restrictionName,
959-
joinName,
945+
restrictionName ?makeList1(makeString((char*)restrictionName)) :NIL,/* XXX */
946+
joinName ?makeList1(makeString((char*)joinName)) :NIL,/* XXX */
960947
canHash,
961948
leftSortName,
962949
rightSortName);

‎src/backend/catalog/pg_proc.c‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.68 2002/04/05 00:31:25 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.69 2002/04/09 20:35:47 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -271,11 +271,11 @@ ProcedureCreate(const char *procedureName,
271271
tupDesc=rel->rd_att;
272272

273273
/* Check for pre-existing definition */
274-
oldtup=SearchSysCache(PROCNAME,
274+
oldtup=SearchSysCache(PROCNAMENSP,
275275
PointerGetDatum(procedureName),
276276
UInt16GetDatum(parameterCount),
277277
PointerGetDatum(typev),
278-
0);
278+
ObjectIdGetDatum(procNamespace));
279279

280280
if (HeapTupleIsValid(oldtup))
281281
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp