diff options
| author | Peter Eisentraut | 2016-09-06 16:00:00 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2016-09-06 16:00:00 +0000 |
| commit | 49eb0fd0972d14014dd3533b1f1bf8c94c899883 (patch) | |
| tree | bcbfa5cf8f49c1b73066a5c4eaf80f33fc4ecc53 /src/include | |
| parent | 975768f8eae2581b89ceafe8b16a77ff375207fe (diff) | |
Add location field to DefElem
Add a location field to the DefElem struct, used to parse many utility
commands. Update various error messages to supply error position
information.
To propogate the error position information in a more systematic way,
create a ParseState in standard_ProcessUtility() and pass that to
interested functions implementing the utility commands. This seems
better than passing the query string and then reassembling a parse state
ad hoc, which violates the encapsulation of the ParseState type.
Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/commands/collationcmds.h | 2 | ||||
| -rw-r--r-- | src/include/commands/copy.h | 7 | ||||
| -rw-r--r-- | src/include/commands/dbcommands.h | 4 | ||||
| -rw-r--r-- | src/include/commands/defrem.h | 13 | ||||
| -rw-r--r-- | src/include/commands/explain.h | 3 | ||||
| -rw-r--r-- | src/include/commands/extension.h | 4 | ||||
| -rw-r--r-- | src/include/commands/sequence.h | 5 | ||||
| -rw-r--r-- | src/include/commands/typecmds.h | 2 | ||||
| -rw-r--r-- | src/include/commands/user.h | 3 | ||||
| -rw-r--r-- | src/include/nodes/makefuncs.h | 4 | ||||
| -rw-r--r-- | src/include/nodes/parsenodes.h | 1 | ||||
| -rw-r--r-- | src/include/utils/acl.h | 3 |
12 files changed, 28 insertions, 23 deletions
diff --git a/src/include/commands/collationcmds.h b/src/include/commands/collationcmds.h index d1e5e0ad847..073314e76d3 100644 --- a/src/include/commands/collationcmds.h +++ b/src/include/commands/collationcmds.h @@ -18,7 +18,7 @@ #include "catalog/objectaddress.h" #include "nodes/parsenodes.h" -extern ObjectAddress DefineCollation(List *names, List *parameters); +extern ObjectAddress DefineCollation(ParseState *pstate, List *names, List *parameters); extern void IsThereCollationInNamespace(const char *collname, Oid nspOid); #endif /* COLLATIONCMDS_H */ diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h index 314d1f7e279..65eb347b3f2 100644 --- a/src/include/commands/copy.h +++ b/src/include/commands/copy.h @@ -16,16 +16,17 @@ #include "nodes/execnodes.h" #include "nodes/parsenodes.h" +#include "parser/parse_node.h" #include "tcop/dest.h" /* CopyStateData is private in commands/copy.c */ typedef struct CopyStateData *CopyState; -extern Oid DoCopy(const CopyStmt *stmt, const char *queryString, +extern Oid DoCopy(ParseState *state, const CopyStmt *stmt, uint64 *processed); -extern void ProcessCopyOptions(CopyState cstate, bool is_from, List *options); -extern CopyState BeginCopyFrom(Relation rel, const char *filename, +extern void ProcessCopyOptions(ParseState *pstate, CopyState cstate, bool is_from, List *options); +extern CopyState BeginCopyFrom(ParseState *pstate, Relation rel, const char *filename, bool is_program, List *attnamelist, List *options); extern void EndCopyFrom(CopyState cstate); extern bool NextCopyFrom(CopyState cstate, ExprContext *econtext, diff --git a/src/include/commands/dbcommands.h b/src/include/commands/dbcommands.h index b6436f18124..9bea085e1fb 100644 --- a/src/include/commands/dbcommands.h +++ b/src/include/commands/dbcommands.h @@ -19,10 +19,10 @@ #include "lib/stringinfo.h" #include "nodes/parsenodes.h" -extern Oid createdb(const CreatedbStmt *stmt); +extern Oid createdb(ParseState *pstate, const CreatedbStmt *stmt); extern void dropdb(const char *dbname, bool missing_ok); extern ObjectAddress RenameDatabase(const char *oldname, const char *newname); -extern Oid AlterDatabase(AlterDatabaseStmt *stmt, bool isTopLevel); +extern Oid AlterDatabase(ParseState *pstate, AlterDatabaseStmt *stmt, bool isTopLevel); extern Oid AlterDatabaseSet(AlterDatabaseSetStmt *stmt); extern ObjectAddress AlterDatabaseOwner(const char *dbname, Oid newOwnerId); diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index b064eb4836a..2b894ff262f 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -44,11 +44,11 @@ extern bool CheckIndexCompatible(Oid oldId, extern Oid GetDefaultOpClass(Oid type_id, Oid am_id); /* commands/functioncmds.c */ -extern ObjectAddress CreateFunction(CreateFunctionStmt *stmt, const char *queryString); +extern ObjectAddress CreateFunction(ParseState *pstate, CreateFunctionStmt *stmt); extern void RemoveFunctionById(Oid funcOid); extern void SetFunctionReturnType(Oid funcOid, Oid newRetType); extern void SetFunctionArgType(Oid funcOid, int argIndex, Oid newArgType); -extern ObjectAddress AlterFunction(AlterFunctionStmt *stmt); +extern ObjectAddress AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt); extern ObjectAddress CreateCast(CreateCastStmt *stmt); extern void DropCastById(Oid castOid); extern ObjectAddress CreateTransform(CreateTransformStmt *stmt); @@ -58,10 +58,10 @@ extern void IsThereFunctionInNamespace(const char *proname, int pronargs, extern void ExecuteDoStmt(DoStmt *stmt); extern Oid get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok); extern Oid get_transform_oid(Oid type_id, Oid lang_id, bool missing_ok); -extern void interpret_function_parameter_list(List *parameters, +extern void interpret_function_parameter_list(ParseState *pstate, + List *parameters, Oid languageOid, bool is_aggregate, - const char *queryString, oidvector **parameterTypes, ArrayType **allParameterTypes, ArrayType **parameterModes, @@ -76,8 +76,8 @@ extern void RemoveOperatorById(Oid operOid); extern ObjectAddress AlterOperator(AlterOperatorStmt *stmt); /* commands/aggregatecmds.c */ -extern ObjectAddress DefineAggregate(List *name, List *args, bool oldstyle, - List *parameters, const char *queryString); +extern ObjectAddress DefineAggregate(ParseState *pstate, List *name, List *args, bool oldstyle, + List *parameters); /* commands/opclasscmds.c */ extern ObjectAddress DefineOpClass(CreateOpClassStmt *stmt); @@ -152,6 +152,5 @@ extern int64 defGetInt64(DefElem *def); extern List *defGetQualifiedName(DefElem *def); extern TypeName *defGetTypeName(DefElem *def); extern int defGetTypeLength(DefElem *def); -extern DefElem *defWithOids(bool value); #endif /* DEFREM_H */ diff --git a/src/include/commands/explain.h b/src/include/commands/explain.h index 3d0a5abbc2f..8b3acab0f25 100644 --- a/src/include/commands/explain.h +++ b/src/include/commands/explain.h @@ -15,6 +15,7 @@ #include "executor/executor.h" #include "lib/stringinfo.h" +#include "parser/parse_node.h" typedef enum ExplainFormat { @@ -59,7 +60,7 @@ typedef const char *(*explain_get_index_name_hook_type) (Oid indexId); extern PGDLLIMPORT explain_get_index_name_hook_type explain_get_index_name_hook; -extern void ExplainQuery(ExplainStmt *stmt, const char *queryString, +extern void ExplainQuery(ParseState *pstate, ExplainStmt *stmt, const char *queryString, ParamListInfo params, DestReceiver *dest); extern ExplainState *NewExplainState(void); diff --git a/src/include/commands/extension.h b/src/include/commands/extension.h index 94354ab04d2..e98b245ac11 100644 --- a/src/include/commands/extension.h +++ b/src/include/commands/extension.h @@ -28,7 +28,7 @@ extern PGDLLIMPORT bool creating_extension; extern Oid CurrentExtensionObject; -extern ObjectAddress CreateExtension(CreateExtensionStmt *stmt); +extern ObjectAddress CreateExtension(ParseState *pstate, CreateExtensionStmt *stmt); extern void RemoveExtensionById(Oid extId); @@ -37,7 +37,7 @@ extern ObjectAddress InsertExtensionTuple(const char *extName, Oid extOwner, Datum extConfig, Datum extCondition, List *requiredExtensions); -extern ObjectAddress ExecAlterExtensionStmt(AlterExtensionStmt *stmt); +extern ObjectAddress ExecAlterExtensionStmt(ParseState *pstate, AlterExtensionStmt *stmt); extern ObjectAddress ExecAlterExtensionContentsStmt(AlterExtensionContentsStmt *stmt, ObjectAddress *objAddress); diff --git a/src/include/commands/sequence.h b/src/include/commands/sequence.h index 6af60d893bb..392a6265082 100644 --- a/src/include/commands/sequence.h +++ b/src/include/commands/sequence.h @@ -18,6 +18,7 @@ #include "fmgr.h" #include "lib/stringinfo.h" #include "nodes/parsenodes.h" +#include "parser/parse_node.h" #include "storage/relfilenode.h" @@ -73,8 +74,8 @@ extern Datum lastval(PG_FUNCTION_ARGS); extern Datum pg_sequence_parameters(PG_FUNCTION_ARGS); -extern ObjectAddress DefineSequence(CreateSeqStmt *stmt); -extern ObjectAddress AlterSequence(AlterSeqStmt *stmt); +extern ObjectAddress DefineSequence(ParseState *pstate, CreateSeqStmt *stmt); +extern ObjectAddress AlterSequence(ParseState *pstate, AlterSeqStmt *stmt); extern void ResetSequence(Oid seq_relid); extern void ResetSequenceCaches(void); diff --git a/src/include/commands/typecmds.h b/src/include/commands/typecmds.h index 847b770f00c..56b4cecd289 100644 --- a/src/include/commands/typecmds.h +++ b/src/include/commands/typecmds.h @@ -21,7 +21,7 @@ #define DEFAULT_TYPDELIM ',' -extern ObjectAddress DefineType(List *names, List *parameters); +extern ObjectAddress DefineType(ParseState *pstate, List *names, List *parameters); extern void RemoveTypeById(Oid typeOid); extern ObjectAddress DefineDomain(CreateDomainStmt *stmt); extern ObjectAddress DefineEnum(CreateEnumStmt *stmt); diff --git a/src/include/commands/user.h b/src/include/commands/user.h index d35cb0c90de..1f0cfcc86f9 100644 --- a/src/include/commands/user.h +++ b/src/include/commands/user.h @@ -13,6 +13,7 @@ #include "catalog/objectaddress.h" #include "nodes/parsenodes.h" +#include "parser/parse_node.h" /* Hook to check passwords in CreateRole() and AlterRole() */ @@ -23,7 +24,7 @@ typedef void (*check_password_hook_type) (const char *username, const char *pass extern PGDLLIMPORT check_password_hook_type check_password_hook; -extern Oid CreateRole(CreateRoleStmt *stmt); +extern Oid CreateRole(ParseState *pstate, CreateRoleStmt *stmt); extern Oid AlterRole(AlterRoleStmt *stmt); extern Oid AlterRoleSet(AlterRoleSetStmt *stmt); extern void DropRole(DropRoleStmt *stmt); diff --git a/src/include/nodes/makefuncs.h b/src/include/nodes/makefuncs.h index 01c5cb45d53..47500cb44ba 100644 --- a/src/include/nodes/makefuncs.h +++ b/src/include/nodes/makefuncs.h @@ -80,9 +80,9 @@ extern FuncExpr *makeFuncExpr(Oid funcid, Oid rettype, List *args, extern FuncCall *makeFuncCall(List *name, List *args, int location); -extern DefElem *makeDefElem(char *name, Node *arg); +extern DefElem *makeDefElem(char *name, Node *arg, int location); extern DefElem *makeDefElemExtended(char *nameSpace, char *name, Node *arg, - DefElemAction defaction); + DefElemAction defaction, int location); extern GroupingSet *makeGroupingSet(GroupingSetKind kind, List *content, int location); diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 1481fff57de..3716c2eef96 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -666,6 +666,7 @@ typedef struct DefElem char *defname; Node *arg; /* a (Value *) or a (TypeName *) */ DefElemAction defaction; /* unspecified action, or SET/ADD/DROP */ + int location; /* token location, or -1 if unknown */ } DefElem; /* diff --git a/src/include/utils/acl.h b/src/include/utils/acl.h index 4cc49f0c0c2..fda75bb6180 100644 --- a/src/include/utils/acl.h +++ b/src/include/utils/acl.h @@ -26,6 +26,7 @@ #include "access/htup.h" #include "nodes/parsenodes.h" +#include "parser/parse_node.h" #include "utils/array.h" #include "utils/snapshot.h" @@ -259,7 +260,7 @@ extern Datum aclexplode(PG_FUNCTION_ARGS); * prototypes for functions in aclchk.c */ extern void ExecuteGrantStmt(GrantStmt *stmt); -extern void ExecAlterDefaultPrivilegesStmt(AlterDefaultPrivilegesStmt *stmt); +extern void ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivilegesStmt *stmt); extern void RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid); extern void RemoveDefaultACLById(Oid defaclOid); |
