mirror of
https://github.com/postgres/postgres.git
synced 2025-10-25 13:17:41 +03:00
Standardize get_whatever_oid functions for other object types.
- Rename TSParserGetPrsid to get_ts_parser_oid. - Rename TSDictionaryGetDictid to get_ts_dict_oid. - Rename TSTemplateGetTmplid to get_ts_template_oid. - Rename TSConfigGetCfgid to get_ts_config_oid. - Rename FindConversionByName to get_conversion_oid. - Rename GetConstraintName to get_constraint_oid. - Add new functions get_opclass_oid, get_opfamily_oid, get_rewrite_oid, get_rewrite_oid_without_relid, get_trigger_oid, and get_cast_oid. The name of each function matches the corresponding catalog. Thanks to KaiGai Kohei for the review.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* Copyright (c) 1996-2010, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/comment.c,v 1.116 2010/08/05 14:44:58 rhaas Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/comment.c,v 1.117 2010/08/05 15:25:35 rhaas Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -45,12 +45,14 @@
|
||||
#include "commands/defrem.h"
|
||||
#include "commands/proclang.h"
|
||||
#include "commands/tablespace.h"
|
||||
#include "commands/trigger.h"
|
||||
#include "libpq/be-fsstubs.h"
|
||||
#include "miscadmin.h"
|
||||
#include "nodes/makefuncs.h"
|
||||
#include "parser/parse_func.h"
|
||||
#include "parser/parse_oper.h"
|
||||
#include "parser/parse_type.h"
|
||||
#include "rewrite/rewriteSupport.h"
|
||||
#include "utils/acl.h"
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/fmgroids.h"
|
||||
@@ -826,7 +828,6 @@ CommentRule(List *qualname, char *comment)
|
||||
char *rulename;
|
||||
RangeVar *rel;
|
||||
Relation relation;
|
||||
HeapTuple tuple;
|
||||
Oid reloid;
|
||||
Oid ruleoid;
|
||||
|
||||
@@ -834,46 +835,8 @@ CommentRule(List *qualname, char *comment)
|
||||
nnames = list_length(qualname);
|
||||
if (nnames == 1)
|
||||
{
|
||||
/* Old-style: only a rule name is given */
|
||||
Relation RewriteRelation;
|
||||
HeapScanDesc scanDesc;
|
||||
ScanKeyData scanKeyData;
|
||||
|
||||
rulename = strVal(linitial(qualname));
|
||||
|
||||
/* Search pg_rewrite for such a rule */
|
||||
ScanKeyInit(&scanKeyData,
|
||||
Anum_pg_rewrite_rulename,
|
||||
BTEqualStrategyNumber, F_NAMEEQ,
|
||||
PointerGetDatum(rulename));
|
||||
|
||||
RewriteRelation = heap_open(RewriteRelationId, AccessShareLock);
|
||||
scanDesc = heap_beginscan(RewriteRelation, SnapshotNow,
|
||||
1, &scanKeyData);
|
||||
|
||||
tuple = heap_getnext(scanDesc, ForwardScanDirection);
|
||||
if (HeapTupleIsValid(tuple))
|
||||
{
|
||||
reloid = ((Form_pg_rewrite) GETSTRUCT(tuple))->ev_class;
|
||||
ruleoid = HeapTupleGetOid(tuple);
|
||||
}
|
||||
else
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("rule \"%s\" does not exist", rulename)));
|
||||
reloid = ruleoid = 0; /* keep compiler quiet */
|
||||
}
|
||||
|
||||
if (HeapTupleIsValid(tuple = heap_getnext(scanDesc,
|
||||
ForwardScanDirection)))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DUPLICATE_OBJECT),
|
||||
errmsg("there are multiple rules named \"%s\"", rulename),
|
||||
errhint("Specify a relation name as well as a rule name.")));
|
||||
|
||||
heap_endscan(scanDesc);
|
||||
heap_close(RewriteRelation, AccessShareLock);
|
||||
ruleoid = get_rewrite_oid_without_relid(rulename, &reloid);
|
||||
|
||||
/* Open the owning relation to ensure it won't go away meanwhile */
|
||||
relation = heap_open(reloid, AccessShareLock);
|
||||
@@ -891,17 +854,7 @@ CommentRule(List *qualname, char *comment)
|
||||
reloid = RelationGetRelid(relation);
|
||||
|
||||
/* Find the rule's pg_rewrite tuple, get its OID */
|
||||
tuple = SearchSysCache2(RULERELNAME,
|
||||
ObjectIdGetDatum(reloid),
|
||||
PointerGetDatum(rulename));
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("rule \"%s\" for relation \"%s\" does not exist",
|
||||
rulename, RelationGetRelationName(relation))));
|
||||
Assert(reloid == ((Form_pg_rewrite) GETSTRUCT(tuple))->ev_class);
|
||||
ruleoid = HeapTupleGetOid(tuple);
|
||||
ReleaseSysCache(tuple);
|
||||
ruleoid = get_rewrite_oid(reloid, rulename, false);
|
||||
}
|
||||
|
||||
/* Check object security */
|
||||
@@ -1046,11 +999,7 @@ CommentTrigger(List *qualname, char *comment)
|
||||
List *relname;
|
||||
char *trigname;
|
||||
RangeVar *rel;
|
||||
Relation pg_trigger,
|
||||
relation;
|
||||
HeapTuple triggertuple;
|
||||
SysScanDesc scan;
|
||||
ScanKeyData entry[2];
|
||||
Relation relation;
|
||||
Oid oid;
|
||||
|
||||
/* Separate relname and trig name */
|
||||
@@ -1065,46 +1014,16 @@ CommentTrigger(List *qualname, char *comment)
|
||||
relation = heap_openrv(rel, AccessShareLock);
|
||||
|
||||
/* Check object security */
|
||||
|
||||
if (!pg_class_ownercheck(RelationGetRelid(relation), GetUserId()))
|
||||
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS,
|
||||
RelationGetRelationName(relation));
|
||||
|
||||
/*
|
||||
* Fetch the trigger tuple from pg_trigger. There can be only one because
|
||||
* of the unique index.
|
||||
*/
|
||||
pg_trigger = heap_open(TriggerRelationId, AccessShareLock);
|
||||
ScanKeyInit(&entry[0],
|
||||
Anum_pg_trigger_tgrelid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(RelationGetRelid(relation)));
|
||||
ScanKeyInit(&entry[1],
|
||||
Anum_pg_trigger_tgname,
|
||||
BTEqualStrategyNumber, F_NAMEEQ,
|
||||
CStringGetDatum(trigname));
|
||||
scan = systable_beginscan(pg_trigger, TriggerRelidNameIndexId, true,
|
||||
SnapshotNow, 2, entry);
|
||||
triggertuple = systable_getnext(scan);
|
||||
|
||||
/* If no trigger exists for the relation specified, notify user */
|
||||
|
||||
if (!HeapTupleIsValid(triggertuple))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("trigger \"%s\" for table \"%s\" does not exist",
|
||||
trigname, RelationGetRelationName(relation))));
|
||||
|
||||
oid = HeapTupleGetOid(triggertuple);
|
||||
|
||||
systable_endscan(scan);
|
||||
oid = get_trigger_oid(RelationGetRelid(relation), trigname, false);
|
||||
|
||||
/* Call CreateComments() to create/drop the comments */
|
||||
CreateComments(oid, TriggerRelationId, 0, comment);
|
||||
|
||||
/* Done, but hold lock on relation */
|
||||
|
||||
heap_close(pg_trigger, AccessShareLock);
|
||||
heap_close(relation, NoLock);
|
||||
}
|
||||
|
||||
@@ -1143,7 +1062,7 @@ CommentConstraint(List *qualname, char *comment)
|
||||
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS,
|
||||
RelationGetRelationName(relation));
|
||||
|
||||
conOid = GetConstraintByName(RelationGetRelid(relation), conName);
|
||||
conOid = get_constraint_oid(RelationGetRelid(relation), conName, false);
|
||||
|
||||
/* Call CreateComments() to create/drop the comments */
|
||||
CreateComments(conOid, ConstraintRelationId, 0, comment);
|
||||
@@ -1166,12 +1085,7 @@ CommentConversion(List *qualname, char *comment)
|
||||
{
|
||||
Oid conversionOid;
|
||||
|
||||
conversionOid = FindConversionByName(qualname);
|
||||
if (!OidIsValid(conversionOid))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("conversion \"%s\" does not exist",
|
||||
NameListToString(qualname))));
|
||||
conversionOid = get_conversion_oid(qualname, false);
|
||||
|
||||
/* Check object security */
|
||||
if (!pg_conversion_ownercheck(conversionOid, GetUserId()))
|
||||
@@ -1228,65 +1142,23 @@ static void
|
||||
CommentOpClass(List *qualname, List *arguments, char *comment)
|
||||
{
|
||||
char *amname;
|
||||
char *schemaname;
|
||||
char *opcname;
|
||||
Oid amID;
|
||||
Oid opcID;
|
||||
HeapTuple tuple;
|
||||
|
||||
Assert(list_length(arguments) == 1);
|
||||
amname = strVal(linitial(arguments));
|
||||
|
||||
/*
|
||||
* Get the access method's OID.
|
||||
* Get the operator class OID.
|
||||
*/
|
||||
amID = get_am_oid(amname, false);
|
||||
|
||||
/*
|
||||
* Look up the opclass.
|
||||
*/
|
||||
|
||||
/* deconstruct the name list */
|
||||
DeconstructQualifiedName(qualname, &schemaname, &opcname);
|
||||
|
||||
if (schemaname)
|
||||
{
|
||||
/* Look in specific schema only */
|
||||
Oid namespaceId;
|
||||
|
||||
namespaceId = LookupExplicitNamespace(schemaname);
|
||||
tuple = SearchSysCache3(CLAAMNAMENSP,
|
||||
ObjectIdGetDatum(amID),
|
||||
PointerGetDatum(opcname),
|
||||
ObjectIdGetDatum(namespaceId));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Unqualified opclass name, so search the search path */
|
||||
opcID = OpclassnameGetOpcid(amID, opcname);
|
||||
if (!OidIsValid(opcID))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
opcname, amname)));
|
||||
tuple = SearchSysCache1(CLAOID, ObjectIdGetDatum(opcID));
|
||||
}
|
||||
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(qualname), amname)));
|
||||
|
||||
opcID = HeapTupleGetOid(tuple);
|
||||
opcID = get_opclass_oid(amID, qualname, false);
|
||||
|
||||
/* Permission check: must own opclass */
|
||||
if (!pg_opclass_ownercheck(opcID, GetUserId()))
|
||||
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPCLASS,
|
||||
NameListToString(qualname));
|
||||
|
||||
ReleaseSysCache(tuple);
|
||||
|
||||
/* Call CreateComments() to create/drop the comments */
|
||||
CreateComments(opcID, OperatorClassRelationId, 0, comment);
|
||||
}
|
||||
@@ -1304,65 +1176,21 @@ static void
|
||||
CommentOpFamily(List *qualname, List *arguments, char *comment)
|
||||
{
|
||||
char *amname;
|
||||
char *schemaname;
|
||||
char *opfname;
|
||||
Oid amID;
|
||||
Oid opfID;
|
||||
HeapTuple tuple;
|
||||
|
||||
Assert(list_length(arguments) == 1);
|
||||
amname = strVal(linitial(arguments));
|
||||
|
||||
/*
|
||||
* Get the access method's OID.
|
||||
*/
|
||||
/* Get the opfamily OID. */
|
||||
amID = get_am_oid(amname, false);
|
||||
|
||||
/*
|
||||
* Look up the opfamily.
|
||||
*/
|
||||
|
||||
/* deconstruct the name list */
|
||||
DeconstructQualifiedName(qualname, &schemaname, &opfname);
|
||||
|
||||
if (schemaname)
|
||||
{
|
||||
/* Look in specific schema only */
|
||||
Oid namespaceId;
|
||||
|
||||
namespaceId = LookupExplicitNamespace(schemaname);
|
||||
tuple = SearchSysCache3(OPFAMILYAMNAMENSP,
|
||||
ObjectIdGetDatum(amID),
|
||||
PointerGetDatum(opfname),
|
||||
ObjectIdGetDatum(namespaceId));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Unqualified opfamily name, so search the search path */
|
||||
opfID = OpfamilynameGetOpfid(amID, opfname);
|
||||
if (!OidIsValid(opfID))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator family \"%s\" does not exist for access method \"%s\"",
|
||||
opfname, amname)));
|
||||
tuple = SearchSysCache1(OPFAMILYOID, ObjectIdGetDatum(opfID));
|
||||
}
|
||||
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator family \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(qualname), amname)));
|
||||
|
||||
opfID = HeapTupleGetOid(tuple);
|
||||
opfID = get_opfamily_oid(amID, qualname, false);
|
||||
|
||||
/* Permission check: must own opfamily */
|
||||
if (!pg_opfamily_ownercheck(opfID, GetUserId()))
|
||||
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPFAMILY,
|
||||
NameListToString(qualname));
|
||||
|
||||
ReleaseSysCache(tuple);
|
||||
|
||||
/* Call CreateComments() to create/drop the comments */
|
||||
CreateComments(opfID, OperatorFamilyRelationId, 0, comment);
|
||||
}
|
||||
@@ -1423,7 +1251,6 @@ CommentCast(List *qualname, List *arguments, char *comment)
|
||||
TypeName *targettype;
|
||||
Oid sourcetypeid;
|
||||
Oid targettypeid;
|
||||
HeapTuple tuple;
|
||||
Oid castOid;
|
||||
|
||||
Assert(list_length(qualname) == 1);
|
||||
@@ -1436,18 +1263,8 @@ CommentCast(List *qualname, List *arguments, char *comment)
|
||||
sourcetypeid = typenameTypeId(NULL, sourcetype, NULL);
|
||||
targettypeid = typenameTypeId(NULL, targettype, NULL);
|
||||
|
||||
tuple = SearchSysCache2(CASTSOURCETARGET,
|
||||
ObjectIdGetDatum(sourcetypeid),
|
||||
ObjectIdGetDatum(targettypeid));
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("cast from type %s to type %s does not exist",
|
||||
format_type_be(sourcetypeid),
|
||||
format_type_be(targettypeid))));
|
||||
|
||||
/* Get the OID of the cast */
|
||||
castOid = HeapTupleGetOid(tuple);
|
||||
castOid = get_cast_oid(sourcetypeid, targettypeid, false);
|
||||
|
||||
/* Permission check */
|
||||
if (!pg_type_ownercheck(sourcetypeid, GetUserId())
|
||||
@@ -1458,8 +1275,6 @@ CommentCast(List *qualname, List *arguments, char *comment)
|
||||
format_type_be(sourcetypeid),
|
||||
format_type_be(targettypeid))));
|
||||
|
||||
ReleaseSysCache(tuple);
|
||||
|
||||
/* Call CreateComments() to create/drop the comments */
|
||||
CreateComments(castOid, CastRelationId, 0, comment);
|
||||
}
|
||||
@@ -1469,7 +1284,7 @@ CommentTSParser(List *qualname, char *comment)
|
||||
{
|
||||
Oid prsId;
|
||||
|
||||
prsId = TSParserGetPrsid(qualname, false);
|
||||
prsId = get_ts_parser_oid(qualname, false);
|
||||
|
||||
if (!superuser())
|
||||
ereport(ERROR,
|
||||
@@ -1484,7 +1299,7 @@ CommentTSDictionary(List *qualname, char *comment)
|
||||
{
|
||||
Oid dictId;
|
||||
|
||||
dictId = TSDictionaryGetDictid(qualname, false);
|
||||
dictId = get_ts_dict_oid(qualname, false);
|
||||
|
||||
if (!pg_ts_dict_ownercheck(dictId, GetUserId()))
|
||||
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TSDICTIONARY,
|
||||
@@ -1498,7 +1313,7 @@ CommentTSTemplate(List *qualname, char *comment)
|
||||
{
|
||||
Oid tmplId;
|
||||
|
||||
tmplId = TSTemplateGetTmplid(qualname, false);
|
||||
tmplId = get_ts_template_oid(qualname, false);
|
||||
|
||||
if (!superuser())
|
||||
ereport(ERROR,
|
||||
@@ -1513,7 +1328,7 @@ CommentTSConfiguration(List *qualname, char *comment)
|
||||
{
|
||||
Oid cfgId;
|
||||
|
||||
cfgId = TSConfigGetCfgid(qualname, false);
|
||||
cfgId = get_ts_config_oid(qualname, false);
|
||||
|
||||
if (!pg_ts_config_ownercheck(cfgId, GetUserId()))
|
||||
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TSCONFIGURATION,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/conversioncmds.c,v 1.41 2010/02/14 18:42:14 rhaas Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/conversioncmds.c,v 1.42 2010/08/05 15:25:35 rhaas Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -142,23 +142,13 @@ DropConversionsCommand(DropStmt *drop)
|
||||
Form_pg_conversion con;
|
||||
ObjectAddress object;
|
||||
|
||||
conversionOid = FindConversionByName(name);
|
||||
conversionOid = get_conversion_oid(name, drop->missing_ok);
|
||||
|
||||
if (!OidIsValid(conversionOid))
|
||||
{
|
||||
if (!drop->missing_ok)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("conversion \"%s\" does not exist",
|
||||
NameListToString(name))));
|
||||
}
|
||||
else
|
||||
{
|
||||
ereport(NOTICE,
|
||||
(errmsg("conversion \"%s\" does not exist, skipping",
|
||||
NameListToString(name))));
|
||||
}
|
||||
ereport(NOTICE,
|
||||
(errmsg("conversion \"%s\" does not exist, skipping",
|
||||
NameListToString(name))));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -202,12 +192,7 @@ RenameConversion(List *name, const char *newname)
|
||||
|
||||
rel = heap_open(ConversionRelationId, RowExclusiveLock);
|
||||
|
||||
conversionOid = FindConversionByName(name);
|
||||
if (!OidIsValid(conversionOid))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("conversion \"%s\" does not exist",
|
||||
NameListToString(name))));
|
||||
conversionOid = get_conversion_oid(name, false);
|
||||
|
||||
tup = SearchSysCacheCopy1(CONVOID, ObjectIdGetDatum(conversionOid));
|
||||
if (!HeapTupleIsValid(tup)) /* should not happen */
|
||||
@@ -255,12 +240,7 @@ AlterConversionOwner(List *name, Oid newOwnerId)
|
||||
|
||||
rel = heap_open(ConversionRelationId, RowExclusiveLock);
|
||||
|
||||
conversionOid = FindConversionByName(name);
|
||||
if (!OidIsValid(conversionOid))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("conversion \"%s\" does not exist",
|
||||
NameListToString(name))));
|
||||
conversionOid = get_conversion_oid(name, false);
|
||||
|
||||
AlterConversionOwner_internal(rel, conversionOid, newOwnerId);
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/functioncmds.c,v 1.118 2010/02/26 02:00:39 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/functioncmds.c,v 1.119 2010/08/05 15:25:35 rhaas Exp $
|
||||
*
|
||||
* DESCRIPTION
|
||||
* These routines take the parse tree and pick out the
|
||||
@@ -1759,30 +1759,23 @@ DropCast(DropCastStmt *stmt)
|
||||
{
|
||||
Oid sourcetypeid;
|
||||
Oid targettypeid;
|
||||
HeapTuple tuple;
|
||||
ObjectAddress object;
|
||||
|
||||
/* when dropping a cast, the types must exist even if you use IF EXISTS */
|
||||
sourcetypeid = typenameTypeId(NULL, stmt->sourcetype, NULL);
|
||||
targettypeid = typenameTypeId(NULL, stmt->targettype, NULL);
|
||||
|
||||
tuple = SearchSysCache2(CASTSOURCETARGET,
|
||||
ObjectIdGetDatum(sourcetypeid),
|
||||
ObjectIdGetDatum(targettypeid));
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
object.classId = CastRelationId;
|
||||
object.objectId = get_cast_oid(sourcetypeid, targettypeid,
|
||||
stmt->missing_ok);
|
||||
object.objectSubId = 0;
|
||||
|
||||
if (!OidIsValid(object.objectId))
|
||||
{
|
||||
if (!stmt->missing_ok)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("cast from type %s to type %s does not exist",
|
||||
format_type_be(sourcetypeid),
|
||||
format_type_be(targettypeid))));
|
||||
else
|
||||
ereport(NOTICE,
|
||||
ereport(NOTICE,
|
||||
(errmsg("cast from type %s to type %s does not exist, skipping",
|
||||
format_type_be(sourcetypeid),
|
||||
format_type_be(targettypeid))));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1798,15 +1791,31 @@ DropCast(DropCastStmt *stmt)
|
||||
/*
|
||||
* Do the deletion
|
||||
*/
|
||||
object.classId = CastRelationId;
|
||||
object.objectId = HeapTupleGetOid(tuple);
|
||||
object.objectSubId = 0;
|
||||
|
||||
ReleaseSysCache(tuple);
|
||||
|
||||
performDeletion(&object, stmt->behavior);
|
||||
}
|
||||
|
||||
/*
|
||||
* get_cast_oid - given two type OIDs, look up a cast OID
|
||||
*
|
||||
* If missing_ok is false, throw an error if the cast is not found. If
|
||||
* true, just return InvalidOid.
|
||||
*/
|
||||
Oid
|
||||
get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok)
|
||||
{
|
||||
Oid oid;
|
||||
|
||||
oid = GetSysCacheOid2(CASTSOURCETARGET,
|
||||
ObjectIdGetDatum(sourcetypeid),
|
||||
ObjectIdGetDatum(targettypeid));
|
||||
if (!OidIsValid(oid) && !missing_ok)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("cast from type %s to type %s does not exist",
|
||||
format_type_be(sourcetypeid),
|
||||
format_type_be(targettypeid))));
|
||||
return oid;
|
||||
}
|
||||
|
||||
void
|
||||
DropCastById(Oid castOid)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.70 2010/08/05 14:45:01 rhaas Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/opclasscmds.c,v 1.71 2010/08/05 15:25:35 rhaas Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -90,10 +90,11 @@ static void AlterOpFamilyOwner_internal(Relation rel, HeapTuple tuple,
|
||||
* Returns a syscache tuple reference, or NULL if not found.
|
||||
*/
|
||||
static HeapTuple
|
||||
OpFamilyCacheLookup(Oid amID, List *opfamilyname)
|
||||
OpFamilyCacheLookup(Oid amID, List *opfamilyname, bool missing_ok)
|
||||
{
|
||||
char *schemaname;
|
||||
char *opfname;
|
||||
HeapTuple htup;
|
||||
|
||||
/* deconstruct the name list */
|
||||
DeconstructQualifiedName(opfamilyname, &schemaname, &opfname);
|
||||
@@ -104,7 +105,7 @@ OpFamilyCacheLookup(Oid amID, List *opfamilyname)
|
||||
Oid namespaceId;
|
||||
|
||||
namespaceId = LookupExplicitNamespace(schemaname);
|
||||
return SearchSysCache3(OPFAMILYAMNAMENSP,
|
||||
htup = SearchSysCache3(OPFAMILYAMNAMENSP,
|
||||
ObjectIdGetDatum(amID),
|
||||
PointerGetDatum(opfname),
|
||||
ObjectIdGetDatum(namespaceId));
|
||||
@@ -115,9 +116,47 @@ OpFamilyCacheLookup(Oid amID, List *opfamilyname)
|
||||
Oid opfID = OpfamilynameGetOpfid(amID, opfname);
|
||||
|
||||
if (!OidIsValid(opfID))
|
||||
return NULL;
|
||||
return SearchSysCache1(OPFAMILYOID, ObjectIdGetDatum(opfID));
|
||||
htup = NULL;
|
||||
else
|
||||
htup = SearchSysCache1(OPFAMILYOID, ObjectIdGetDatum(opfID));
|
||||
}
|
||||
|
||||
if (!HeapTupleIsValid(htup) && !missing_ok)
|
||||
{
|
||||
HeapTuple amtup;
|
||||
|
||||
amtup = SearchSysCache1(AMOID, ObjectIdGetDatum(amID));
|
||||
if (!HeapTupleIsValid(amtup))
|
||||
elog(ERROR, "cache lookup failed for access method %u", amID);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator family \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(opfamilyname),
|
||||
NameStr(((Form_pg_am) GETSTRUCT(amtup))->amname))));
|
||||
}
|
||||
|
||||
return htup;
|
||||
}
|
||||
|
||||
/*
|
||||
* get_opfamily_oid
|
||||
* find an opfamily OID by possibly qualified name
|
||||
*
|
||||
* If not found, returns InvalidOid if missing_ok, else throws error.
|
||||
*/
|
||||
Oid
|
||||
get_opfamily_oid(Oid amID, List *opfamilyname, bool missing_ok)
|
||||
{
|
||||
HeapTuple htup;
|
||||
Oid opfID;
|
||||
|
||||
htup = OpFamilyCacheLookup(amID, opfamilyname, missing_ok);
|
||||
if (!HeapTupleIsValid(htup))
|
||||
return InvalidOid;
|
||||
opfID = HeapTupleGetOid(htup);
|
||||
ReleaseSysCache(htup);
|
||||
|
||||
return opfID;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -127,10 +166,11 @@ OpFamilyCacheLookup(Oid amID, List *opfamilyname)
|
||||
* Returns a syscache tuple reference, or NULL if not found.
|
||||
*/
|
||||
static HeapTuple
|
||||
OpClassCacheLookup(Oid amID, List *opclassname)
|
||||
OpClassCacheLookup(Oid amID, List *opclassname, bool missing_ok)
|
||||
{
|
||||
char *schemaname;
|
||||
char *opcname;
|
||||
HeapTuple htup;
|
||||
|
||||
/* deconstruct the name list */
|
||||
DeconstructQualifiedName(opclassname, &schemaname, &opcname);
|
||||
@@ -141,7 +181,7 @@ OpClassCacheLookup(Oid amID, List *opclassname)
|
||||
Oid namespaceId;
|
||||
|
||||
namespaceId = LookupExplicitNamespace(schemaname);
|
||||
return SearchSysCache3(CLAAMNAMENSP,
|
||||
htup = SearchSysCache3(CLAAMNAMENSP,
|
||||
ObjectIdGetDatum(amID),
|
||||
PointerGetDatum(opcname),
|
||||
ObjectIdGetDatum(namespaceId));
|
||||
@@ -152,9 +192,47 @@ OpClassCacheLookup(Oid amID, List *opclassname)
|
||||
Oid opcID = OpclassnameGetOpcid(amID, opcname);
|
||||
|
||||
if (!OidIsValid(opcID))
|
||||
return NULL;
|
||||
return SearchSysCache1(CLAOID, ObjectIdGetDatum(opcID));
|
||||
htup = NULL;
|
||||
else
|
||||
htup = SearchSysCache1(CLAOID, ObjectIdGetDatum(opcID));
|
||||
}
|
||||
|
||||
if (!HeapTupleIsValid(htup) && !missing_ok)
|
||||
{
|
||||
HeapTuple amtup;
|
||||
|
||||
amtup = SearchSysCache1(AMOID, ObjectIdGetDatum(amID));
|
||||
if (!HeapTupleIsValid(amtup))
|
||||
elog(ERROR, "cache lookup failed for access method %u", amID);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(opclassname),
|
||||
NameStr(((Form_pg_am) GETSTRUCT(amtup))->amname))));
|
||||
}
|
||||
|
||||
return htup;
|
||||
}
|
||||
|
||||
/*
|
||||
* get_opclass_oid
|
||||
* find an opclass OID by possibly qualified name
|
||||
*
|
||||
* If not found, returns InvalidOid if missing_ok, else throws error.
|
||||
*/
|
||||
Oid
|
||||
get_opclass_oid(Oid amID, List *opclassname, bool missing_ok)
|
||||
{
|
||||
HeapTuple htup;
|
||||
Oid opcID;
|
||||
|
||||
htup = OpClassCacheLookup(amID, opclassname, missing_ok);
|
||||
if (!HeapTupleIsValid(htup))
|
||||
return InvalidOid;
|
||||
opcID = HeapTupleGetOid(htup);
|
||||
ReleaseSysCache(htup);
|
||||
|
||||
return opcID;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -336,19 +414,7 @@ DefineOpClass(CreateOpClassStmt *stmt)
|
||||
*/
|
||||
if (stmt->opfamilyname)
|
||||
{
|
||||
tup = OpFamilyCacheLookup(amoid, stmt->opfamilyname);
|
||||
if (!HeapTupleIsValid(tup))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator family \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(stmt->opfamilyname), stmt->amname)));
|
||||
opfamilyoid = HeapTupleGetOid(tup);
|
||||
|
||||
/*
|
||||
* XXX given the superuser check above, there's no need for an
|
||||
* ownership check here
|
||||
*/
|
||||
ReleaseSysCache(tup);
|
||||
opfamilyoid = get_opfamily_oid(amoid, stmt->opfamilyname, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -711,14 +777,7 @@ AlterOpFamily(AlterOpFamilyStmt *stmt)
|
||||
ReleaseSysCache(tup);
|
||||
|
||||
/* Look up the opfamily */
|
||||
tup = OpFamilyCacheLookup(amoid, stmt->opfamilyname);
|
||||
if (!HeapTupleIsValid(tup))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator family \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(stmt->opfamilyname), stmt->amname)));
|
||||
opfamilyoid = HeapTupleGetOid(tup);
|
||||
ReleaseSysCache(tup);
|
||||
opfamilyoid = get_opfamily_oid(amoid, stmt->opfamilyname, false);
|
||||
|
||||
/*
|
||||
* Currently, we require superuser privileges to alter an opfamily.
|
||||
@@ -1414,26 +1473,16 @@ RemoveOpClass(RemoveOpClassStmt *stmt)
|
||||
HeapTuple tuple;
|
||||
ObjectAddress object;
|
||||
|
||||
/*
|
||||
* Get the access method's OID.
|
||||
*/
|
||||
/* Get the access method's OID. */
|
||||
amID = get_am_oid(stmt->amname, false);
|
||||
|
||||
/*
|
||||
* Look up the opclass.
|
||||
*/
|
||||
tuple = OpClassCacheLookup(amID, stmt->opclassname);
|
||||
/* Look up the opclass. */
|
||||
tuple = OpClassCacheLookup(amID, stmt->opclassname, stmt->missing_ok);
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
{
|
||||
if (!stmt->missing_ok)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(stmt->opclassname), stmt->amname)));
|
||||
else
|
||||
ereport(NOTICE,
|
||||
(errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(stmt->opclassname), stmt->amname)));
|
||||
ereport(NOTICE,
|
||||
(errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(stmt->opclassname), stmt->amname)));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1478,18 +1527,13 @@ RemoveOpFamily(RemoveOpFamilyStmt *stmt)
|
||||
/*
|
||||
* Look up the opfamily.
|
||||
*/
|
||||
tuple = OpFamilyCacheLookup(amID, stmt->opfamilyname);
|
||||
tuple = OpFamilyCacheLookup(amID, stmt->opfamilyname, stmt->missing_ok);
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
{
|
||||
if (!stmt->missing_ok)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator family \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(stmt->opfamilyname), stmt->amname)));
|
||||
else
|
||||
ereport(NOTICE,
|
||||
(errmsg("operator family \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(stmt->opfamilyname), stmt->amname)));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator family \"%s\" does not exist for access method \"%s\"",
|
||||
NameListToString(stmt->opfamilyname), stmt->amname)));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1624,8 +1668,7 @@ RenameOpClass(List *name, const char *access_method, const char *newname)
|
||||
Oid opcOid;
|
||||
Oid amOid;
|
||||
Oid namespaceOid;
|
||||
char *schemaname;
|
||||
char *opcname;
|
||||
HeapTuple origtup;
|
||||
HeapTuple tup;
|
||||
Relation rel;
|
||||
AclResult aclresult;
|
||||
@@ -1634,42 +1677,12 @@ RenameOpClass(List *name, const char *access_method, const char *newname)
|
||||
|
||||
rel = heap_open(OperatorClassRelationId, RowExclusiveLock);
|
||||
|
||||
/*
|
||||
* Look up the opclass
|
||||
*/
|
||||
DeconstructQualifiedName(name, &schemaname, &opcname);
|
||||
|
||||
if (schemaname)
|
||||
{
|
||||
namespaceOid = LookupExplicitNamespace(schemaname);
|
||||
|
||||
tup = SearchSysCacheCopy3(CLAAMNAMENSP,
|
||||
ObjectIdGetDatum(amOid),
|
||||
PointerGetDatum(opcname),
|
||||
ObjectIdGetDatum(namespaceOid));
|
||||
if (!HeapTupleIsValid(tup))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
opcname, access_method)));
|
||||
|
||||
opcOid = HeapTupleGetOid(tup);
|
||||
}
|
||||
else
|
||||
{
|
||||
opcOid = OpclassnameGetOpcid(amOid, opcname);
|
||||
if (!OidIsValid(opcOid))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
opcname, access_method)));
|
||||
|
||||
tup = SearchSysCacheCopy1(CLAOID, ObjectIdGetDatum(opcOid));
|
||||
if (!HeapTupleIsValid(tup)) /* should not happen */
|
||||
elog(ERROR, "cache lookup failed for opclass %u", opcOid);
|
||||
|
||||
namespaceOid = ((Form_pg_opclass) GETSTRUCT(tup))->opcnamespace;
|
||||
}
|
||||
/* Look up the opclass. */
|
||||
origtup = OpClassCacheLookup(amOid, name, false);
|
||||
tup = heap_copytuple(origtup);
|
||||
ReleaseSysCache(origtup);
|
||||
opcOid = HeapTupleGetOid(tup);
|
||||
namespaceOid = ((Form_pg_opclass) GETSTRUCT(tup))->opcnamespace;
|
||||
|
||||
/* make sure the new name doesn't exist */
|
||||
if (SearchSysCacheExists3(CLAAMNAMENSP,
|
||||
@@ -1802,49 +1815,16 @@ AlterOpClassOwner(List *name, const char *access_method, Oid newOwnerId)
|
||||
Oid amOid;
|
||||
Relation rel;
|
||||
HeapTuple tup;
|
||||
char *opcname;
|
||||
char *schemaname;
|
||||
HeapTuple origtup;
|
||||
|
||||
amOid = get_am_oid(access_method, false);
|
||||
|
||||
rel = heap_open(OperatorClassRelationId, RowExclusiveLock);
|
||||
|
||||
/*
|
||||
* Look up the opclass
|
||||
*/
|
||||
DeconstructQualifiedName(name, &schemaname, &opcname);
|
||||
|
||||
if (schemaname)
|
||||
{
|
||||
Oid namespaceOid;
|
||||
|
||||
namespaceOid = LookupExplicitNamespace(schemaname);
|
||||
|
||||
tup = SearchSysCacheCopy3(CLAAMNAMENSP,
|
||||
ObjectIdGetDatum(amOid),
|
||||
PointerGetDatum(opcname),
|
||||
ObjectIdGetDatum(namespaceOid));
|
||||
if (!HeapTupleIsValid(tup))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
opcname, access_method)));
|
||||
}
|
||||
else
|
||||
{
|
||||
Oid opcOid;
|
||||
|
||||
opcOid = OpclassnameGetOpcid(amOid, opcname);
|
||||
if (!OidIsValid(opcOid))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("operator class \"%s\" does not exist for access method \"%s\"",
|
||||
opcname, access_method)));
|
||||
|
||||
tup = SearchSysCacheCopy1(CLAOID, ObjectIdGetDatum(opcOid));
|
||||
if (!HeapTupleIsValid(tup)) /* should not happen */
|
||||
elog(ERROR, "cache lookup failed for opclass %u", opcOid);
|
||||
}
|
||||
/* Look up the opclass. */
|
||||
origtup = OpClassCacheLookup(amOid, name, false);
|
||||
tup = heap_copytuple(origtup);
|
||||
ReleaseSysCache(origtup);
|
||||
|
||||
AlterOpClassOwner_internal(rel, tup, newOwnerId);
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.263 2010/07/28 05:22:24 sriggs Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.264 2010/08/05 15:25:35 rhaas Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -967,46 +967,17 @@ void
|
||||
DropTrigger(Oid relid, const char *trigname, DropBehavior behavior,
|
||||
bool missing_ok)
|
||||
{
|
||||
Relation tgrel;
|
||||
ScanKeyData skey[2];
|
||||
SysScanDesc tgscan;
|
||||
HeapTuple tup;
|
||||
ObjectAddress object;
|
||||
|
||||
/*
|
||||
* Find the trigger, verify permissions, set up object address
|
||||
*/
|
||||
tgrel = heap_open(TriggerRelationId, AccessShareLock);
|
||||
object.classId = TriggerRelationId;
|
||||
object.objectId = get_trigger_oid(relid, trigname, missing_ok);
|
||||
object.objectSubId = 0;
|
||||
|
||||
ScanKeyInit(&skey[0],
|
||||
Anum_pg_trigger_tgrelid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(relid));
|
||||
|
||||
ScanKeyInit(&skey[1],
|
||||
Anum_pg_trigger_tgname,
|
||||
BTEqualStrategyNumber, F_NAMEEQ,
|
||||
CStringGetDatum(trigname));
|
||||
|
||||
tgscan = systable_beginscan(tgrel, TriggerRelidNameIndexId, true,
|
||||
SnapshotNow, 2, skey);
|
||||
|
||||
tup = systable_getnext(tgscan);
|
||||
|
||||
if (!HeapTupleIsValid(tup))
|
||||
if (!OidIsValid(object.objectId))
|
||||
{
|
||||
if (!missing_ok)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("trigger \"%s\" for table \"%s\" does not exist",
|
||||
trigname, get_rel_name(relid))));
|
||||
else
|
||||
ereport(NOTICE,
|
||||
(errmsg("trigger \"%s\" for table \"%s\" does not exist, skipping",
|
||||
trigname, get_rel_name(relid))));
|
||||
/* cleanup */
|
||||
systable_endscan(tgscan);
|
||||
heap_close(tgrel, AccessShareLock);
|
||||
ereport(NOTICE,
|
||||
(errmsg("trigger \"%s\" for table \"%s\" does not exist, skipping",
|
||||
trigname, get_rel_name(relid))));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1014,13 +985,6 @@ DropTrigger(Oid relid, const char *trigname, DropBehavior behavior,
|
||||
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_CLASS,
|
||||
get_rel_name(relid));
|
||||
|
||||
object.classId = TriggerRelationId;
|
||||
object.objectId = HeapTupleGetOid(tup);
|
||||
object.objectSubId = 0;
|
||||
|
||||
systable_endscan(tgscan);
|
||||
heap_close(tgrel, AccessShareLock);
|
||||
|
||||
/*
|
||||
* Do the deletion
|
||||
*/
|
||||
@@ -1102,6 +1066,59 @@ RemoveTriggerById(Oid trigOid)
|
||||
heap_close(rel, NoLock);
|
||||
}
|
||||
|
||||
/*
|
||||
* get_trigger_oid - Look up a trigger by name to find its OID.
|
||||
*
|
||||
* If missing_ok is false, throw an error if trigger not found. If
|
||||
* true, just return InvalidOid.
|
||||
*/
|
||||
Oid
|
||||
get_trigger_oid(Oid relid, const char *trigname, bool missing_ok)
|
||||
{
|
||||
Relation tgrel;
|
||||
ScanKeyData skey[2];
|
||||
SysScanDesc tgscan;
|
||||
HeapTuple tup;
|
||||
Oid oid;
|
||||
|
||||
/*
|
||||
* Find the trigger, verify permissions, set up object address
|
||||
*/
|
||||
tgrel = heap_open(TriggerRelationId, AccessShareLock);
|
||||
|
||||
ScanKeyInit(&skey[0],
|
||||
Anum_pg_trigger_tgrelid,
|
||||
BTEqualStrategyNumber, F_OIDEQ,
|
||||
ObjectIdGetDatum(relid));
|
||||
ScanKeyInit(&skey[1],
|
||||
Anum_pg_trigger_tgname,
|
||||
BTEqualStrategyNumber, F_NAMEEQ,
|
||||
CStringGetDatum(trigname));
|
||||
|
||||
tgscan = systable_beginscan(tgrel, TriggerRelidNameIndexId, true,
|
||||
SnapshotNow, 2, skey);
|
||||
|
||||
tup = systable_getnext(tgscan);
|
||||
|
||||
if (!HeapTupleIsValid(tup))
|
||||
{
|
||||
if (!missing_ok)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("trigger \"%s\" for table \"%s\" does not exist",
|
||||
trigname, get_rel_name(relid))));
|
||||
oid = InvalidOid;
|
||||
}
|
||||
else
|
||||
{
|
||||
oid = HeapTupleGetOid(tup);
|
||||
}
|
||||
|
||||
systable_endscan(tgscan);
|
||||
heap_close(tgrel, AccessShareLock);
|
||||
return oid;
|
||||
}
|
||||
|
||||
/*
|
||||
* renametrig - changes the name of a trigger on a relation
|
||||
*
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/tsearchcmds.c,v 1.20 2010/02/14 18:42:14 rhaas Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/tsearchcmds.c,v 1.21 2010/08/05 15:25:35 rhaas Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -295,7 +295,7 @@ RemoveTSParsers(DropStmt *drop)
|
||||
Oid prsOid;
|
||||
ObjectAddress object;
|
||||
|
||||
prsOid = TSParserGetPrsid(names, true);
|
||||
prsOid = get_ts_parser_oid(names, true);
|
||||
|
||||
if (!OidIsValid(prsOid))
|
||||
{
|
||||
@@ -368,7 +368,7 @@ RenameTSParser(List *oldname, const char *newname)
|
||||
|
||||
rel = heap_open(TSParserRelationId, RowExclusiveLock);
|
||||
|
||||
prsId = TSParserGetPrsid(oldname, false);
|
||||
prsId = get_ts_parser_oid(oldname, false);
|
||||
|
||||
tup = SearchSysCacheCopy1(TSPARSEROID, ObjectIdGetDatum(prsId));
|
||||
|
||||
@@ -517,7 +517,7 @@ DefineTSDictionary(List *names, List *parameters)
|
||||
|
||||
if (pg_strcasecmp(defel->defname, "template") == 0)
|
||||
{
|
||||
templId = TSTemplateGetTmplid(defGetQualifiedName(defel), false);
|
||||
templId = get_ts_template_oid(defGetQualifiedName(defel), false);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -582,7 +582,7 @@ RenameTSDictionary(List *oldname, const char *newname)
|
||||
|
||||
rel = heap_open(TSDictionaryRelationId, RowExclusiveLock);
|
||||
|
||||
dictId = TSDictionaryGetDictid(oldname, false);
|
||||
dictId = get_ts_dict_oid(oldname, false);
|
||||
|
||||
tup = SearchSysCacheCopy1(TSDICTOID, ObjectIdGetDatum(dictId));
|
||||
|
||||
@@ -643,7 +643,7 @@ RemoveTSDictionaries(DropStmt *drop)
|
||||
HeapTuple tup;
|
||||
Oid namespaceId;
|
||||
|
||||
dictOid = TSDictionaryGetDictid(names, true);
|
||||
dictOid = get_ts_dict_oid(names, true);
|
||||
|
||||
if (!OidIsValid(dictOid))
|
||||
{
|
||||
@@ -731,7 +731,7 @@ AlterTSDictionary(AlterTSDictionaryStmt *stmt)
|
||||
bool repl_null[Natts_pg_ts_dict];
|
||||
bool repl_repl[Natts_pg_ts_dict];
|
||||
|
||||
dictId = TSDictionaryGetDictid(stmt->dictname, false);
|
||||
dictId = get_ts_dict_oid(stmt->dictname, false);
|
||||
|
||||
rel = heap_open(TSDictionaryRelationId, RowExclusiveLock);
|
||||
|
||||
@@ -841,7 +841,7 @@ AlterTSDictionaryOwner(List *name, Oid newOwnerId)
|
||||
|
||||
rel = heap_open(TSDictionaryRelationId, RowExclusiveLock);
|
||||
|
||||
dictId = TSDictionaryGetDictid(name, false);
|
||||
dictId = get_ts_dict_oid(name, false);
|
||||
|
||||
tup = SearchSysCacheCopy1(TSDICTOID, ObjectIdGetDatum(dictId));
|
||||
|
||||
@@ -1073,7 +1073,7 @@ RenameTSTemplate(List *oldname, const char *newname)
|
||||
|
||||
rel = heap_open(TSTemplateRelationId, RowExclusiveLock);
|
||||
|
||||
tmplId = TSTemplateGetTmplid(oldname, false);
|
||||
tmplId = get_ts_template_oid(oldname, false);
|
||||
|
||||
tup = SearchSysCacheCopy1(TSTEMPLATEOID, ObjectIdGetDatum(tmplId));
|
||||
|
||||
@@ -1126,7 +1126,7 @@ RemoveTSTemplates(DropStmt *drop)
|
||||
Oid tmplOid;
|
||||
ObjectAddress object;
|
||||
|
||||
tmplOid = TSTemplateGetTmplid(names, true);
|
||||
tmplOid = get_ts_template_oid(names, true);
|
||||
|
||||
if (!OidIsValid(tmplOid))
|
||||
{
|
||||
@@ -1194,7 +1194,7 @@ GetTSConfigTuple(List *names)
|
||||
HeapTuple tup;
|
||||
Oid cfgId;
|
||||
|
||||
cfgId = TSConfigGetCfgid(names, true);
|
||||
cfgId = get_ts_config_oid(names, true);
|
||||
if (!OidIsValid(cfgId))
|
||||
return NULL;
|
||||
|
||||
@@ -1329,9 +1329,9 @@ DefineTSConfiguration(List *names, List *parameters)
|
||||
DefElem *defel = (DefElem *) lfirst(pl);
|
||||
|
||||
if (pg_strcasecmp(defel->defname, "parser") == 0)
|
||||
prsOid = TSParserGetPrsid(defGetQualifiedName(defel), false);
|
||||
prsOid = get_ts_parser_oid(defGetQualifiedName(defel), false);
|
||||
else if (pg_strcasecmp(defel->defname, "copy") == 0)
|
||||
sourceOid = TSConfigGetCfgid(defGetQualifiedName(defel), false);
|
||||
sourceOid = get_ts_config_oid(defGetQualifiedName(defel), false);
|
||||
else
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
@@ -1461,7 +1461,7 @@ RenameTSConfiguration(List *oldname, const char *newname)
|
||||
|
||||
rel = heap_open(TSConfigRelationId, RowExclusiveLock);
|
||||
|
||||
cfgId = TSConfigGetCfgid(oldname, false);
|
||||
cfgId = get_ts_config_oid(oldname, false);
|
||||
|
||||
tup = SearchSysCacheCopy1(TSCONFIGOID, ObjectIdGetDatum(cfgId));
|
||||
|
||||
@@ -1626,7 +1626,7 @@ AlterTSConfigurationOwner(List *name, Oid newOwnerId)
|
||||
|
||||
rel = heap_open(TSConfigRelationId, RowExclusiveLock);
|
||||
|
||||
cfgId = TSConfigGetCfgid(name, false);
|
||||
cfgId = get_ts_config_oid(name, false);
|
||||
|
||||
tup = SearchSysCacheCopy1(TSCONFIGOID, ObjectIdGetDatum(cfgId));
|
||||
|
||||
@@ -1828,7 +1828,7 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt,
|
||||
{
|
||||
List *names = (List *) lfirst(c);
|
||||
|
||||
dictIds[i] = TSDictionaryGetDictid(names, false);
|
||||
dictIds[i] = get_ts_dict_oid(names, false);
|
||||
i++;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user