#include "catalog/pg_proc.h"
#include "catalog/pg_shdepend.h"
#include "catalog/pg_tablespace.h"
+#include "catalog/pg_ts_config.h"
+#include "catalog/pg_ts_dict.h"
#include "catalog/pg_type.h"
#include "commands/dbcommands.h"
#include "commands/collationcmds.h"
AlterExtensionOwner_oid(sdepForm->objid, newrole);
break;
+ case TSConfigRelationId:
+ AlterTSConfigurationOwner_oid(sdepForm->objid, newrole);
+ break;
+
+ case TSDictionaryRelationId:
+ AlterTSDictionaryOwner_oid(sdepForm->objid, newrole);
+ break;
+
default:
elog(ERROR, "unexpected classid %u", sdepForm->classid);
break;
}
/*
- * ALTER TEXT SEARCH DICTIONARY OWNER
+ * Internal routine for changing the owner of a text search dictionary
*/
-void
-AlterTSDictionaryOwner(List *name, Oid newOwnerId)
+static void
+AlterTSDictionaryOwner_internal(Relation rel, Oid dictId, Oid newOwnerId)
{
HeapTuple tup;
- Relation rel;
- Oid dictId;
Oid namespaceOid;
AclResult aclresult;
Form_pg_ts_dict form;
- rel = heap_open(TSDictionaryRelationId, RowExclusiveLock);
-
- dictId = get_ts_dict_oid(name, false);
-
tup = SearchSysCacheCopy1(TSDICTOID, ObjectIdGetDatum(dictId));
if (!HeapTupleIsValid(tup)) /* should not happen */
/* must be owner */
if (!pg_ts_dict_ownercheck(dictId, GetUserId()))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TSDICTIONARY,
- NameListToString(name));
+ NameStr(form->dictname));
/* Must be able to become new owner */
check_is_member_of_role(GetUserId(), newOwnerId);
newOwnerId);
}
- heap_close(rel, NoLock);
heap_freetuple(tup);
}
+/*
+ * ALTER TEXT SEARCH DICTIONARY OWNER
+ */
+void
+AlterTSDictionaryOwner(List *name, Oid newOwnerId)
+{
+ Relation rel;
+ Oid dictId;
+
+ rel = heap_open(TSDictionaryRelationId, RowExclusiveLock);
+ dictId = get_ts_dict_oid(name, false);
+
+ AlterTSDictionaryOwner_internal(rel, dictId, newOwnerId);
+
+ heap_close(rel, NoLock);
+}
+
+/*
+ * Change text search dictionary owner, by OID
+ */
+void
+AlterTSDictionaryOwner_oid(Oid dictId, Oid newOwnerId)
+{
+ Relation rel;
+
+ rel = heap_open(TSDictionaryRelationId, RowExclusiveLock);
+
+ AlterTSDictionaryOwner_internal(rel, dictId, newOwnerId);
+
+ heap_close(rel, NoLock);
+}
+
/* ---------------------- TS Template commands -----------------------*/
/*
}
/*
- * ALTER TEXT SEARCH CONFIGURATION OWNER
+ * Internal routine for changing the owner of a text search configuration
*/
-void
-AlterTSConfigurationOwner(List *name, Oid newOwnerId)
+static void
+AlterTSConfigurationOwner_internal(Relation rel, Oid cfgId, Oid newOwnerId)
{
HeapTuple tup;
- Relation rel;
- Oid cfgId;
AclResult aclresult;
Oid namespaceOid;
Form_pg_ts_config form;
- rel = heap_open(TSConfigRelationId, RowExclusiveLock);
-
- cfgId = get_ts_config_oid(name, false);
-
tup = SearchSysCacheCopy1(TSCONFIGOID, ObjectIdGetDatum(cfgId));
if (!HeapTupleIsValid(tup)) /* should not happen */
/* must be owner */
if (!pg_ts_config_ownercheck(cfgId, GetUserId()))
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TSCONFIGURATION,
- NameListToString(name));
+ NameStr(form->cfgname));
/* Must be able to become new owner */
check_is_member_of_role(GetUserId(), newOwnerId);
newOwnerId);
}
- heap_close(rel, NoLock);
heap_freetuple(tup);
}
+/*
+ * ALTER TEXT SEARCH CONFIGURATION OWNER
+ */
+void
+AlterTSConfigurationOwner(List *name, Oid newOwnerId)
+{
+ Relation rel;
+ Oid cfgId;
+
+ rel = heap_open(TSConfigRelationId, RowExclusiveLock);
+ cfgId = get_ts_config_oid(name, false);
+
+ AlterTSConfigurationOwner_internal(rel, cfgId, newOwnerId);
+
+ heap_close(rel, NoLock);
+}
+
+void
+AlterTSConfigurationOwner_oid(Oid cfgId, Oid newOwnerId)
+{
+ Relation rel;
+
+ rel = heap_open(TSConfigRelationId, RowExclusiveLock);
+
+ AlterTSConfigurationOwner_internal(rel, cfgId, newOwnerId);
+
+ heap_close(rel, NoLock);
+}
+
+
/*
* ALTER TEXT SEARCH CONFIGURATION - main entry point
*/
extern void RemoveTSDictionaryById(Oid dictId);
extern void AlterTSDictionary(AlterTSDictionaryStmt *stmt);
extern void AlterTSDictionaryOwner(List *name, Oid newOwnerId);
+extern void AlterTSDictionaryOwner_oid(Oid dictId, Oid newOwnerId);
extern void AlterTSDictionaryNamespace(List *name, const char *newschema);
extern Oid AlterTSDictionaryNamespace_oid(Oid dictId, Oid newNspOid);
extern void RemoveTSConfigurationById(Oid cfgId);
extern void AlterTSConfiguration(AlterTSConfigurationStmt *stmt);
extern void AlterTSConfigurationOwner(List *name, Oid newOwnerId);
+extern void AlterTSConfigurationOwner_oid(Oid cfgId, Oid newOwnerId);
extern void AlterTSConfigurationNamespace(List *name, const char *newschema);
extern Oid AlterTSConfigurationNamespace_oid(Oid cfgId, Oid newNspOid);