mirror of
https://github.com/postgres/postgres.git
synced 2025-10-25 13:17:41 +03:00
Improve the internal implementation of ereport().
Change all the auxiliary error-reporting routines to return void, now that we no longer need to pretend they are passing something useful to errfinish(). While this probably doesn't save anything significant at the machine-code level, it allows detection of some additional types of mistakes. Pass the error location details (__FILE__, __LINE__, PG_FUNCNAME_MACRO) to errfinish not errstart. This shaves a few cycles off the case where errstart decides we're not going to emit anything. Re-implement elog() as a trivial wrapper around ereport(), removing the separate support infrastructure it used to have. Aside from getting rid of some now-surplus code, this means that elog() now really does have exactly the same semantics as ereport(), in particular that it can skip evaluation work if the message is not to be emitted. Andres Freund and Tom Lane Discussion: https://postgr.es/m/CA+fd4k6N8EjNvZpM8nme+y+05mz-SM8Z_BgkixzkA34R+ej0Kw@mail.gmail.com
This commit is contained in:
@@ -61,7 +61,7 @@ extern Node *coerce_to_specific_type_typmod(ParseState *pstate, Node *node,
|
||||
Oid targetTypeId, int32 targetTypmod,
|
||||
const char *constructName);
|
||||
|
||||
extern int parser_coercion_errposition(ParseState *pstate,
|
||||
extern void parser_coercion_errposition(ParseState *pstate,
|
||||
int coerce_location,
|
||||
Node *input_expr);
|
||||
|
||||
|
||||
@@ -307,7 +307,7 @@ typedef struct ParseCallbackState
|
||||
|
||||
extern ParseState *make_parsestate(ParseState *parentParseState);
|
||||
extern void free_parsestate(ParseState *pstate);
|
||||
extern int parser_errposition(ParseState *pstate, int location);
|
||||
extern void parser_errposition(ParseState *pstate, int location);
|
||||
|
||||
extern void setup_parser_errposition_callback(ParseCallbackState *pcbstate,
|
||||
ParseState *pstate, int location);
|
||||
|
||||
@@ -140,7 +140,7 @@ extern core_yyscan_t scanner_init(const char *str,
|
||||
extern void scanner_finish(core_yyscan_t yyscanner);
|
||||
extern int core_yylex(core_YYSTYPE *lvalp, YYLTYPE *llocp,
|
||||
core_yyscan_t yyscanner);
|
||||
extern int scanner_errposition(int location, core_yyscan_t yyscanner);
|
||||
extern void scanner_errposition(int location, core_yyscan_t yyscanner);
|
||||
extern void setup_scanner_errposition_callback(ScannerCallbackState *scbstate,
|
||||
core_yyscan_t yyscanner,
|
||||
int location);
|
||||
|
||||
Reference in New Issue
Block a user