mirror of
https://github.com/postgres/postgres.git
synced 2025-10-22 14:32:25 +03:00
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>
This commit is contained in:
@@ -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 */
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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 */
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user