From 61c1f58c3f43f61b9add912f62de7173bb9fef1c Mon Sep 17 00:00:00 2001 From: reshke kirill Date: Thu, 28 Nov 2024 05:19:58 +0000 Subject: [PATCH v2] Pass ParseState as down to utility functions. ParseState was lacking in a number of places, for example typenameType call inside DefineDomain. This patch fixes that. Now error-message for create domain also show error location. --- src/backend/commands/typecmds.c | 14 +++++--------- src/backend/parser/parse_utilcmd.c | 2 +- src/backend/tcop/utility.c | 4 ++-- src/include/commands/typecmds.h | 4 ++-- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 859e2191f08..11548da1fd5 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -348,7 +348,7 @@ DefineType(ParseState *pstate, List *names, List *parameters) Type likeType; Form_pg_type likeForm; - likeType = typenameType(NULL, defGetTypeName(likeTypeEl), NULL); + likeType = typenameType(pstate, defGetTypeName(likeTypeEl), NULL); likeForm = (Form_pg_type) GETSTRUCT(likeType); internalLength = likeForm->typlen; byValue = likeForm->typbyval; @@ -694,7 +694,7 @@ RemoveTypeById(Oid typeOid) * Registers a new domain. */ ObjectAddress -DefineDomain(CreateDomainStmt *stmt) +DefineDomain(ParseState *pstate, CreateDomainStmt *stmt) { char *domainName; char *domainArrayName; @@ -761,7 +761,7 @@ DefineDomain(CreateDomainStmt *stmt) /* * Look up the base type. */ - typeTup = typenameType(NULL, stmt->typeName, &basetypeMod); + typeTup = typenameType(pstate, stmt->typeName, &basetypeMod); baseType = (Form_pg_type) GETSTRUCT(typeTup); basetypeoid = baseType->oid; @@ -885,12 +885,8 @@ DefineDomain(CreateDomainStmt *stmt) if (constr->raw_expr) { - ParseState *pstate; Node *defaultExpr; - /* Create a dummy ParseState for transformExpr */ - pstate = make_parsestate(NULL); - /* * Cook the constr->raw_expr into an expression. Note: * name is strictly for error message @@ -4315,7 +4311,7 @@ AlterTypeNamespaceInternal(Oid typeOid, Oid nspOid, * adding new flexibility. */ ObjectAddress -AlterType(AlterTypeStmt *stmt) +AlterType(ParseState *pstate, AlterTypeStmt *stmt) { ObjectAddress address; Relation catalog; @@ -4331,7 +4327,7 @@ AlterType(AlterTypeStmt *stmt) /* Make a TypeName so we can use standard type lookup machinery */ typename = makeTypeNameFromNameList(stmt->typeName); - tup = typenameType(NULL, typename, NULL); + tup = typenameType(pstate, typename, NULL); typeOid = typeTypeId(tup); typForm = (Form_pg_type) GETSTRUCT(tup); diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 0f324ee4e31..95dad766834 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -1615,7 +1615,7 @@ transformOfType(CreateStmtContext *cxt, TypeName *ofTypename) Assert(ofTypename); - tuple = typenameType(NULL, ofTypename, NULL); + tuple = typenameType(cxt->pstate, ofTypename, NULL); check_of_type(tuple); ofTypeId = ((Form_pg_type) GETSTRUCT(tuple))->oid; ofTypename->typeOid = ofTypeId; /* cached for later */ diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index f28bf371059..aa24283efff 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -1712,7 +1712,7 @@ ProcessUtilitySlow(ParseState *pstate, break; case T_CreateDomainStmt: - address = DefineDomain((CreateDomainStmt *) parsetree); + address = DefineDomain(pstate, (CreateDomainStmt *) parsetree); break; case T_CreateConversionStmt: @@ -1801,7 +1801,7 @@ ProcessUtilitySlow(ParseState *pstate, break; case T_AlterTypeStmt: - address = AlterType((AlterTypeStmt *) parsetree); + address = AlterType(pstate, (AlterTypeStmt *) parsetree); break; case T_CommentStmt: diff --git a/src/include/commands/typecmds.h b/src/include/commands/typecmds.h index e1b02927c4b..6e493b896c2 100644 --- a/src/include/commands/typecmds.h +++ b/src/include/commands/typecmds.h @@ -23,7 +23,7 @@ extern ObjectAddress DefineType(ParseState *pstate, List *names, List *parameters); extern void RemoveTypeById(Oid typeOid); -extern ObjectAddress DefineDomain(CreateDomainStmt *stmt); +extern ObjectAddress DefineDomain(ParseState *pstate, CreateDomainStmt *stmt); extern ObjectAddress DefineEnum(CreateEnumStmt *stmt); extern ObjectAddress DefineRange(ParseState *pstate, CreateRangeStmt *stmt); extern ObjectAddress AlterEnum(AlterEnumStmt *stmt); @@ -58,6 +58,6 @@ extern Oid AlterTypeNamespaceInternal(Oid typeOid, Oid nspOid, bool errorOnTableType, ObjectAddresses *objsMoved); -extern ObjectAddress AlterType(AlterTypeStmt *stmt); +extern ObjectAddress AlterType(ParseState *pstate, AlterTypeStmt *stmt); #endif /* TYPECMDS_H */ -- 2.34.1