mirror of
https://github.com/postgres/postgres.git
synced 2025-10-25 13:17:41 +03:00
Refactor typenameTypeId()
Split the old typenameTypeId() into two functions: A new typenameTypeId() that returns only a type OID, and typenameTypeIdAndMod() that returns type OID and typmod. This isolates call sites better that actually care about the typmod.
This commit is contained in:
@@ -142,7 +142,7 @@ DefineAggregate(List *name, List *args, bool oldstyle, List *parameters)
|
||||
{
|
||||
numArgs = 1;
|
||||
aggArgTypes = (Oid *) palloc(sizeof(Oid));
|
||||
aggArgTypes[0] = typenameTypeId(NULL, baseType, NULL);
|
||||
aggArgTypes[0] = typenameTypeId(NULL, baseType);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -164,7 +164,7 @@ DefineAggregate(List *name, List *args, bool oldstyle, List *parameters)
|
||||
{
|
||||
TypeName *curTypeName = (TypeName *) lfirst(lc);
|
||||
|
||||
aggArgTypes[i++] = typenameTypeId(NULL, curTypeName, NULL);
|
||||
aggArgTypes[i++] = typenameTypeId(NULL, curTypeName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ DefineAggregate(List *name, List *args, bool oldstyle, List *parameters)
|
||||
* worse) by connecting up incompatible internal-using functions in an
|
||||
* aggregate.
|
||||
*/
|
||||
transTypeId = typenameTypeId(NULL, transType, NULL);
|
||||
transTypeId = typenameTypeId(NULL, transType);
|
||||
if (get_typtype(transTypeId) == TYPTYPE_PSEUDO &&
|
||||
!IsPolymorphicType(transTypeId))
|
||||
{
|
||||
|
||||
@@ -607,8 +607,8 @@ CheckCastComment(List *qualname, List *arguments)
|
||||
targettype = (TypeName *) linitial(arguments);
|
||||
Assert(IsA(targettype, TypeName));
|
||||
|
||||
sourcetypeid = typenameTypeId(NULL, sourcetype, NULL);
|
||||
targettypeid = typenameTypeId(NULL, targettype, NULL);
|
||||
sourcetypeid = typenameTypeId(NULL, sourcetype);
|
||||
targettypeid = typenameTypeId(NULL, targettype);
|
||||
|
||||
/* Permission check */
|
||||
if (!pg_type_ownercheck(sourcetypeid, GetUserId())
|
||||
|
||||
@@ -1496,8 +1496,8 @@ CreateCast(CreateCastStmt *stmt)
|
||||
ObjectAddress myself,
|
||||
referenced;
|
||||
|
||||
sourcetypeid = typenameTypeId(NULL, stmt->sourcetype, NULL);
|
||||
targettypeid = typenameTypeId(NULL, stmt->targettype, NULL);
|
||||
sourcetypeid = typenameTypeId(NULL, stmt->sourcetype);
|
||||
targettypeid = typenameTypeId(NULL, stmt->targettype);
|
||||
sourcetyptype = get_typtype(sourcetypeid);
|
||||
targettyptype = get_typtype(targettypeid);
|
||||
|
||||
@@ -1779,8 +1779,8 @@ DropCast(DropCastStmt *stmt)
|
||||
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);
|
||||
sourcetypeid = typenameTypeId(NULL, stmt->sourcetype);
|
||||
targettypeid = typenameTypeId(NULL, stmt->targettype);
|
||||
|
||||
object.classId = CastRelationId;
|
||||
object.objectId = get_cast_oid(sourcetypeid, targettypeid,
|
||||
|
||||
@@ -398,7 +398,7 @@ DefineOpClass(CreateOpClassStmt *stmt)
|
||||
errmsg("must be superuser to create an operator class")));
|
||||
|
||||
/* Look up the datatype */
|
||||
typeoid = typenameTypeId(NULL, stmt->datatype, NULL);
|
||||
typeoid = typenameTypeId(NULL, stmt->datatype);
|
||||
|
||||
#ifdef NOT_USED
|
||||
/* XXX this is unnecessary given the superuser check above */
|
||||
@@ -540,7 +540,7 @@ DefineOpClass(CreateOpClassStmt *stmt)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
|
||||
errmsg("storage type specified more than once")));
|
||||
storageoid = typenameTypeId(NULL, item->storedtype, NULL);
|
||||
storageoid = typenameTypeId(NULL, item->storedtype);
|
||||
|
||||
#ifdef NOT_USED
|
||||
/* XXX this is unnecessary given the superuser check above */
|
||||
@@ -1009,12 +1009,12 @@ processTypesSpec(List *args, Oid *lefttype, Oid *righttype)
|
||||
Assert(args != NIL);
|
||||
|
||||
typeName = (TypeName *) linitial(args);
|
||||
*lefttype = typenameTypeId(NULL, typeName, NULL);
|
||||
*lefttype = typenameTypeId(NULL, typeName);
|
||||
|
||||
if (list_length(args) > 1)
|
||||
{
|
||||
typeName = (TypeName *) lsecond(args);
|
||||
*righttype = typenameTypeId(NULL, typeName, NULL);
|
||||
*righttype = typenameTypeId(NULL, typeName);
|
||||
}
|
||||
else
|
||||
*righttype = *lefttype;
|
||||
|
||||
@@ -167,9 +167,9 @@ DefineOperator(List *names, List *parameters)
|
||||
|
||||
/* Transform type names to type OIDs */
|
||||
if (typeName1)
|
||||
typeId1 = typenameTypeId(NULL, typeName1, NULL);
|
||||
typeId1 = typenameTypeId(NULL, typeName1);
|
||||
if (typeName2)
|
||||
typeId2 = typenameTypeId(NULL, typeName2, NULL);
|
||||
typeId2 = typenameTypeId(NULL, typeName2);
|
||||
|
||||
if (!OidIsValid(typeId1) && !OidIsValid(typeId2))
|
||||
ereport(ERROR,
|
||||
|
||||
@@ -90,7 +90,7 @@ PrepareQuery(PrepareStmt *stmt, const char *queryString)
|
||||
foreach(l, stmt->argtypes)
|
||||
{
|
||||
TypeName *tn = lfirst(l);
|
||||
Oid toid = typenameTypeId(pstate, tn, NULL);
|
||||
Oid toid = typenameTypeId(pstate, tn);
|
||||
|
||||
argtypes[i++] = toid;
|
||||
}
|
||||
|
||||
@@ -464,7 +464,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId)
|
||||
(void) heap_reloptions(relkind, reloptions, true);
|
||||
|
||||
if (stmt->ofTypename)
|
||||
ofTypeId = typenameTypeId(NULL, stmt->ofTypename, NULL);
|
||||
ofTypeId = typenameTypeId(NULL, stmt->ofTypename);
|
||||
else
|
||||
ofTypeId = InvalidOid;
|
||||
|
||||
@@ -1399,7 +1399,7 @@ MergeAttributes(List *schema, List *supers, bool istemp,
|
||||
(errmsg("merging multiple inherited definitions of column \"%s\"",
|
||||
attributeName)));
|
||||
def = (ColumnDef *) list_nth(inhSchema, exist_attno - 1);
|
||||
defTypeId = typenameTypeId(NULL, def->typeName, &deftypmod);
|
||||
typenameTypeIdAndMod(NULL, def->typeName, &defTypeId, &deftypmod);
|
||||
if (defTypeId != attribute->atttypid ||
|
||||
deftypmod != attribute->atttypmod)
|
||||
ereport(ERROR,
|
||||
@@ -1571,8 +1571,8 @@ MergeAttributes(List *schema, List *supers, bool istemp,
|
||||
(errmsg("merging column \"%s\" with inherited definition",
|
||||
attributeName)));
|
||||
def = (ColumnDef *) list_nth(inhSchema, exist_attno - 1);
|
||||
defTypeId = typenameTypeId(NULL, def->typeName, &deftypmod);
|
||||
newTypeId = typenameTypeId(NULL, newdef->typeName, &newtypmod);
|
||||
typenameTypeIdAndMod(NULL, def->typeName, &defTypeId, &deftypmod);
|
||||
typenameTypeIdAndMod(NULL, newdef->typeName, &newTypeId, &newtypmod);
|
||||
if (defTypeId != newTypeId || deftypmod != newtypmod)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATATYPE_MISMATCH),
|
||||
@@ -3910,7 +3910,7 @@ ATExecAddColumn(AlteredTableInfo *tab, Relation rel,
|
||||
int32 ctypmod;
|
||||
|
||||
/* Child column must match by type */
|
||||
ctypeId = typenameTypeId(NULL, colDef->typeName, &ctypmod);
|
||||
typenameTypeIdAndMod(NULL, colDef->typeName, &ctypeId, &ctypmod);
|
||||
if (ctypeId != childatt->atttypid ||
|
||||
ctypmod != childatt->atttypmod)
|
||||
ereport(ERROR,
|
||||
@@ -6100,7 +6100,7 @@ ATPrepAlterColumnType(List **wqueue,
|
||||
colName)));
|
||||
|
||||
/* Look up the target type */
|
||||
targettype = typenameTypeId(NULL, typeName, &targettypmod);
|
||||
typenameTypeIdAndMod(NULL, typeName, &targettype, &targettypmod);
|
||||
|
||||
/* make sure datatype is legal for a column */
|
||||
CheckAttributeType(colName, targettype, false);
|
||||
|
||||
@@ -333,7 +333,7 @@ DefineType(List *names, List *parameters)
|
||||
}
|
||||
if (elemTypeEl)
|
||||
{
|
||||
elemType = typenameTypeId(NULL, defGetTypeName(elemTypeEl), NULL);
|
||||
elemType = typenameTypeId(NULL, defGetTypeName(elemTypeEl));
|
||||
/* disallow arrays of pseudotypes */
|
||||
if (get_typtype(elemType) == TYPTYPE_PSEUDO)
|
||||
ereport(ERROR,
|
||||
@@ -1205,7 +1205,7 @@ AlterEnum(AlterEnumStmt *stmt)
|
||||
|
||||
/* Make a TypeName so we can use standard type lookup machinery */
|
||||
typename = makeTypeNameFromNameList(stmt->typeName);
|
||||
enum_type_oid = typenameTypeId(NULL, typename, NULL);
|
||||
enum_type_oid = typenameTypeId(NULL, typename);
|
||||
|
||||
tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(enum_type_oid));
|
||||
if (!HeapTupleIsValid(tup))
|
||||
@@ -1620,7 +1620,7 @@ AlterDomainDefault(List *names, Node *defaultRaw)
|
||||
|
||||
/* Make a TypeName so we can use standard type lookup machinery */
|
||||
typename = makeTypeNameFromNameList(names);
|
||||
domainoid = typenameTypeId(NULL, typename, NULL);
|
||||
domainoid = typenameTypeId(NULL, typename);
|
||||
|
||||
/* Look up the domain in the type table */
|
||||
rel = heap_open(TypeRelationId, RowExclusiveLock);
|
||||
@@ -1746,7 +1746,7 @@ AlterDomainNotNull(List *names, bool notNull)
|
||||
|
||||
/* Make a TypeName so we can use standard type lookup machinery */
|
||||
typename = makeTypeNameFromNameList(names);
|
||||
domainoid = typenameTypeId(NULL, typename, NULL);
|
||||
domainoid = typenameTypeId(NULL, typename);
|
||||
|
||||
/* Look up the domain in the type table */
|
||||
typrel = heap_open(TypeRelationId, RowExclusiveLock);
|
||||
@@ -1846,7 +1846,7 @@ AlterDomainDropConstraint(List *names, const char *constrName,
|
||||
|
||||
/* Make a TypeName so we can use standard type lookup machinery */
|
||||
typename = makeTypeNameFromNameList(names);
|
||||
domainoid = typenameTypeId(NULL, typename, NULL);
|
||||
domainoid = typenameTypeId(NULL, typename);
|
||||
|
||||
/* Look up the domain in the type table */
|
||||
rel = heap_open(TypeRelationId, RowExclusiveLock);
|
||||
@@ -1919,7 +1919,7 @@ AlterDomainAddConstraint(List *names, Node *newConstraint)
|
||||
|
||||
/* Make a TypeName so we can use standard type lookup machinery */
|
||||
typename = makeTypeNameFromNameList(names);
|
||||
domainoid = typenameTypeId(NULL, typename, NULL);
|
||||
domainoid = typenameTypeId(NULL, typename);
|
||||
|
||||
/* Look up the domain in the type table */
|
||||
typrel = heap_open(TypeRelationId, RowExclusiveLock);
|
||||
@@ -2540,7 +2540,7 @@ RenameType(List *names, const char *newTypeName)
|
||||
|
||||
/* Make a TypeName so we can use standard type lookup machinery */
|
||||
typename = makeTypeNameFromNameList(names);
|
||||
typeOid = typenameTypeId(NULL, typename, NULL);
|
||||
typeOid = typenameTypeId(NULL, typename);
|
||||
|
||||
/* Look up the type in the type table */
|
||||
rel = heap_open(TypeRelationId, RowExclusiveLock);
|
||||
@@ -2769,7 +2769,7 @@ AlterTypeNamespace(List *names, const char *newschema)
|
||||
|
||||
/* Make a TypeName so we can use standard type lookup machinery */
|
||||
typename = makeTypeNameFromNameList(names);
|
||||
typeOid = typenameTypeId(NULL, typename, NULL);
|
||||
typeOid = typenameTypeId(NULL, typename);
|
||||
|
||||
/* check permissions on type */
|
||||
if (!pg_type_ownercheck(typeOid, GetUserId()))
|
||||
|
||||
Reference in New Issue
Block a user