Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
P
postgres-lambda-diff
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jakob Huber
postgres-lambda-diff
Commits
290428dd
Commit
290428dd
authored
26 years ago
by
Bruce Momjian
Browse files
Options
Downloads
Patches
Plain Diff
Fix for regproc so proc name can be supplied if unique, if not, oid.
parent
820f9f8b
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/backend/catalog/indexing.c
+12
-6
12 additions, 6 deletions
src/backend/catalog/indexing.c
src/backend/utils/adt/regproc.c
+66
-33
66 additions, 33 deletions
src/backend/utils/adt/regproc.c
with
78 additions
and
39 deletions
src/backend/catalog/indexing.c
+
12
−
6
View file @
290428dd
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.3
2
1998/
09/23 04:21:59
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.3
3
1998/
10/02 05:10:10
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -62,9 +62,9 @@ char *Name_pg_trigger_indices[Num_pg_trigger_indices] = {TriggerRelidIndex};
static
HeapTuple
CatalogIndexFetchTuple
(
Relation
heapRelation
,
Relation
idesc
,
ScanKey
skey
,
int16
num_keys
);
Relation
idesc
,
ScanKey
skey
,
int16
num_keys
);
/*
...
...
@@ -213,6 +213,7 @@ CatalogHasIndex(char *catName, Oid catId)
return
pgRelP
->
relhasindex
;
}
/*
* CatalogIndexFetchTuple() -- Get a tuple that satisfies a scan key
* from a catalog relation.
...
...
@@ -253,6 +254,7 @@ CatalogIndexFetchTuple(Relation heapRelation,
return
tuple
;
}
/*
* The remainder of the file is for individual index scan routines. Each
* index should be scanned according to how it was defined during bootstrap
...
...
@@ -288,6 +290,7 @@ AttributeNameIndexScan(Relation heapRelation,
return
tuple
;
}
HeapTuple
AttributeNumIndexScan
(
Relation
heapRelation
,
Oid
relid
,
...
...
@@ -317,6 +320,7 @@ AttributeNumIndexScan(Relation heapRelation,
return
tuple
;
}
HeapTuple
ProcedureOidIndexScan
(
Relation
heapRelation
,
Oid
procId
)
{
...
...
@@ -339,7 +343,6 @@ ProcedureOidIndexScan(Relation heapRelation, Oid procId)
}
HeapTuple
ProcedureNameIndexScan
(
Relation
heapRelation
,
char
*
procName
,
...
...
@@ -377,7 +380,6 @@ ProcedureNameIndexScan(Relation heapRelation,
}
HeapTuple
ProcedureSrcIndexScan
(
Relation
heapRelation
,
text
*
procSrc
)
{
...
...
@@ -399,6 +401,7 @@ ProcedureSrcIndexScan(Relation heapRelation, text *procSrc)
return
tuple
;
}
HeapTuple
TypeOidIndexScan
(
Relation
heapRelation
,
Oid
typeId
)
{
...
...
@@ -420,6 +423,7 @@ TypeOidIndexScan(Relation heapRelation, Oid typeId)
return
tuple
;
}
HeapTuple
TypeNameIndexScan
(
Relation
heapRelation
,
char
*
typeName
)
{
...
...
@@ -441,6 +445,7 @@ TypeNameIndexScan(Relation heapRelation, char *typeName)
return
tuple
;
}
HeapTuple
ClassNameIndexScan
(
Relation
heapRelation
,
char
*
relName
)
{
...
...
@@ -461,6 +466,7 @@ ClassNameIndexScan(Relation heapRelation, char *relName)
return
tuple
;
}
HeapTuple
ClassOidIndexScan
(
Relation
heapRelation
,
Oid
relId
)
{
...
...
This diff is collapsed.
Click to expand it.
src/backend/utils/adt/regproc.c
+
66
−
33
View file @
290428dd
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.3
0
1998/
09/25 03:36:33
momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.3
1
1998/
10/02 05:10:11
momjian Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -15,12 +15,16 @@
#include
"postgres.h"
#include
"miscadmin.h"
#include
"access/heapam.h"
#include
"access/genam.h"
#include
"access/itup.h"
#include
"access/relscan.h"
#include
"storage/bufmgr.h"
#include
"fmgr.h"
#include
"utils/palloc.h"
#include
"utils/syscache.h"
#include
"catalog/catname.h"
#include
"catalog/indexing.h"
#include
"catalog/pg_proc.h"
#include
"catalog/pg_type.h"
#include
"utils/builtins.h"
/* where function declarations go */
...
...
@@ -30,45 +34,81 @@
*****************************************************************************/
/*
* regprocin - converts "proname" to proid
* regprocin - converts "proname"
or "proid"
to proid
*
* proid of NULL signifies unknown
*/
int32
regprocin
(
char
*
pro_name_
and
_oid
)
regprocin
(
char
*
pro_name_
or
_oid
)
{
HeapTuple
proctup
=
NULL
;
RegProcedure
result
=
(
Oid
)
0
;
if
(
pro_name_and_oid
==
NULL
)
return
0
;
HeapTuple
proctup
=
NULL
;
RegProcedure
result
=
InvalidOid
;
if
(
pro_name_or_oid
==
NULL
)
return
InvalidOid
;
if
(
!
IsBootstrapProcessingMode
())
{
/*
* we need to use the oid because there can be multiple entries
* with the same name. We accept int4eq_1323 and 1323.
*/
if
(
strrchr
(
pro_name_and_oid
,
'_'
)
!=
NULL
)
if
(
pro_name_or_oid
[
0
]
>=
'0'
&&
pro_name_or_oid
[
0
]
<=
'9'
)
{
proctup
=
SearchSysCacheTuple
(
PROOID
,
ObjectIdGetDatum
(
atoi
(
strrchr
(
pro_name_
and
_oid
,
'_'
)
+
1
)),
ObjectIdGetDatum
(
oidin
(
pro_name_
or
_oid
)),
0
,
0
,
0
);
if
(
HeapTupleIsValid
(
proctup
))
result
=
(
RegProcedure
)
proctup
->
t_oid
;
else
elog
(
ERROR
,
"No such procedure with oid %s"
,
pro_name_or_oid
);
}
else
if
(
atoi
(
pro_name_and_oid
)
!=
InvalidOid
)
else
{
proctup
=
SearchSysCacheTuple
(
PROOID
,
/* atoi stops at the _ */
ObjectIdGetDatum
(
atoi
(
pro_name_and_oid
)),
0
,
0
,
0
);
Relation
hdesc
;
Relation
idesc
;
IndexScanDesc
sd
;
ScanKeyData
skey
[
1
];
RetrieveIndexResult
indexRes
;
Buffer
buffer
;
int
matches
=
0
;
ScanKeyEntryInitialize
(
&
skey
[
0
],
(
bits16
)
0x0
,
(
AttrNumber
)
1
,
(
RegProcedure
)
F_NAMEEQ
,
PointerGetDatum
(
pro_name_or_oid
));
hdesc
=
heap_openr
(
ProcedureRelationName
);
idesc
=
index_openr
(
ProcedureNameIndex
);
sd
=
index_beginscan
(
idesc
,
false
,
1
,
skey
);
while
((
indexRes
=
index_getnext
(
sd
,
ForwardScanDirection
)))
{
proctup
=
heap_fetch
(
hdesc
,
SnapshotNow
,
&
indexRes
->
heap_iptr
,
&
buffer
);
pfree
(
indexRes
);
if
(
HeapTupleIsValid
(
proctup
))
{
result
=
(
RegProcedure
)
proctup
->
t_oid
;
ReleaseBuffer
(
buffer
);
if
(
++
matches
>
1
)
break
;
}
}
index_endscan
(
sd
);
pfree
(
sd
);
index_close
(
idesc
);
if
(
matches
>
1
)
elog
(
ERROR
,
"There is more than one %s procedure, supply oid in quotes."
,
pro_name_or_oid
);
else
if
(
matches
==
0
)
elog
(
ERROR
,
"No such procedure %s"
,
pro_name_or_oid
);
}
if
(
HeapTupleIsValid
(
proctup
))
result
=
(
RegProcedure
)
proctup
->
t_oid
;
else
elog
(
ERROR
,
"regprocin: no such procedure %s"
,
pro_name_and_oid
);
}
else
{
...
...
@@ -88,7 +128,7 @@ regprocin(char *pro_name_and_oid)
(
bits16
)
0
,
(
AttrNumber
)
1
,
(
RegProcedure
)
F_NAMEEQ
,
(
Datum
)
pro_name_
and
_oid
);
(
Datum
)
pro_name_
or
_oid
);
procscan
=
heap_beginscan
(
proc
,
0
,
SnapshotNow
,
1
,
&
key
);
if
(
!
HeapScanIsValid
(
procscan
))
...
...
@@ -106,7 +146,7 @@ regprocin(char *pro_name_and_oid)
RelationGetDescr
(
proc
),
&
isnull
);
if
(
isnull
)
elog
(
FATAL
,
"regprocin: null procedure %s"
,
pro_name_
and
_oid
);
elog
(
FATAL
,
"regprocin: null procedure %s"
,
pro_name_
or
_oid
);
}
else
result
=
(
RegProcedure
)
0
;
...
...
@@ -115,14 +155,11 @@ regprocin(char *pro_name_and_oid)
heap_close
(
proc
);
}
#ifdef EBUG
elog
(
DEBUG
,
"regprocin: no such procedure %s"
,
pro_name_and_oid
);
#endif
/* defined(EBUG) */
return
(
int32
)
result
;
}
/*
* regprocout - converts proid to "pro_name
_and_oid
"
* regprocout - converts proid to "pro_name"
*/
char
*
regprocout
(
RegProcedure
proid
)
...
...
@@ -143,7 +180,7 @@ regprocout(RegProcedure proid)
char
*
s
;
s
=
((
Form_pg_proc
)
GETSTRUCT
(
proctup
))
->
proname
.
data
;
snprintf
(
result
,
NAMEDATALEN
,
"%s_%d"
,
s
,
proid
);
StrNCpy
(
result
,
s
,
NAMEDATALEN
);
}
else
{
...
...
@@ -160,8 +197,7 @@ regprocout(RegProcedure proid)
proc
=
heap_openr
(
ProcedureRelationName
);
if
(
!
RelationIsValid
(
proc
))
{
elog
(
ERROR
,
"regprocout: could not open %s"
,
ProcedureRelationName
);
elog
(
ERROR
,
"regprocout: could not open %s"
,
ProcedureRelationName
);
return
0
;
}
ScanKeyEntryInitialize
(
&
key
,
...
...
@@ -201,9 +237,6 @@ regprocout(RegProcedure proid)
return
result
;
}
#ifdef EBUG
elog
(
DEBUG
,
"regprocout: no such procedure %d"
,
proid
);
#endif
/* defined(EBUG) */
return
result
;
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment