* normal non-error case: computing character indexes would be much more
* expensive than storing token offsets.)
*/
-void
+int
executor_errposition(EState *estate, int location)
{
int pos;
/* No-op if location was not provided */
if (location < 0)
- return;
+ return 0;
/* Can't do anything if source text is not available */
if (estate == NULL || estate->es_sourceText == NULL)
- return;
+ return 0;
/* Convert offset to character number */
pos = pg_mbstrlen_with_len(estate->es_sourceText, location) + 1;
/* And pass it to the ereport mechanism */
- errposition(pos);
+ return errposition(pos);
}
/*
* XXX possibly this is more generally useful than coercion errors;
* if so, should rename and place with parser_errposition.
*/
-void
+int
parser_coercion_errposition(ParseState *pstate,
int coerce_location,
Node *input_expr)
{
if (coerce_location >= 0)
- parser_errposition(pstate, coerce_location);
+ return parser_errposition(pstate, coerce_location);
else
- parser_errposition(pstate, exprLocation(input_expr));
+ return parser_errposition(pstate, exprLocation(input_expr));
}
* normal non-error case: computing character indexes would be much more
* expensive than storing token offsets.)
*/
-void
+int
parser_errposition(ParseState *pstate, int location)
{
int pos;
/* No-op if location was not provided */
if (location < 0)
- return;
+ return 0;
/* Can't do anything if source text is not available */
if (pstate == NULL || pstate->p_sourcetext == NULL)
- return;
+ return 0;
/* Convert offset to character number */
pos = pg_mbstrlen_with_len(pstate->p_sourcetext, location) + 1;
/* And pass it to the ereport mechanism */
- errposition(pos);
+ return errposition(pos);
}
* (essentially, scan.l, parser.c, and gram.y), since it requires the
* yyscanner struct to still be available.
*/
-void
+int
scanner_errposition(int location, core_yyscan_t yyscanner)
{
int pos;
if (location < 0)
- return; /* no-op if location is unknown */
+ return 0; /* no-op if location is unknown */
/* Convert byte offset to character number */
pos = pg_mbstrlen_with_len(yyextra->scanbuf, location) + 1;
/* And pass it to the ereport mechanism */
- errposition(pos);
+ return errposition(pos);
}
/*
void **impl_private, void **mapped_address,
Size *mapped_size, int elevel);
#endif
-static void errcode_for_dynamic_shared_memory(void);
+static int errcode_for_dynamic_shared_memory(void);
const struct config_enum_entry dynamic_shared_memory_options[] = {
#ifdef USE_DSM_POSIX
}
}
-static void
+static int
errcode_for_dynamic_shared_memory(void)
{
if (errno == EFBIG || errno == ENOMEM)
- errcode(ERRCODE_OUT_OF_MEMORY);
+ return errcode(ERRCODE_OUT_OF_MEMORY);
else
- errcode_for_file_access();
+ return errcode_for_file_access();
}
hash_destroy((jso)->val.json_hash); \
} while (0)
-static void report_json_context(JsonLexContext *lex);
+static int report_json_context(JsonLexContext *lex);
/* semantic action functions for json_object_keys */
static void okeys_object_field_start(void *state, char *fname, bool isnull);
* The return value isn't meaningful, but we make it non-void so that this
* can be invoked inside ereport().
*/
-static void
+static int
report_json_context(JsonLexContext *lex)
{
const char *context_start;
prefix = (context_start > line_start) ? "..." : "";
suffix = (lex->token_type != JSON_TOKEN_END && context_end - lex->input < lex->input_length && *context_end != '\n' && *context_end != '\r') ? "..." : "";
- errcontext("JSON data, line %d: %s%s%s",
- line_number, prefix, ctxt, suffix);
+ return errcontext("JSON data, line %d: %s%s%s",
+ line_number, prefix, ctxt, suffix);
}
*
* The code is expected to be represented as per MAKE_SQLSTATE().
*/
-void
+int
errcode(int sqlerrcode)
{
ErrorData *edata = &errordata[errordata_stack_depth];
CHECK_STACK_DEPTH();
edata->sqlerrcode = sqlerrcode;
+
+ return 0; /* return value does not matter */
}
* NOTE: the primary error message string should generally include %m
* when this is used.
*/
-void
+int
errcode_for_file_access(void)
{
ErrorData *edata = &errordata[errordata_stack_depth];
edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
break;
}
+
+ return 0; /* return value does not matter */
}
/*
* NOTE: the primary error message string should generally include %m
* when this is used.
*/
-void
+int
errcode_for_socket_access(void)
{
ErrorData *edata = &errordata[errordata_stack_depth];
edata->sqlerrcode = ERRCODE_INTERNAL_ERROR;
break;
}
+
+ return 0; /* return value does not matter */
}
* Note: no newline is needed at the end of the fmt string, since
* ereport will provide one for the output methods that need it.
*/
-void
+int
errmsg(const char *fmt,...)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
/*
* Add a backtrace to the containing ereport() call. This is intended to be
* added temporarily during debugging.
*/
-void
+int
errbacktrace(void)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+
+ return 0;
}
/*
* the message because the translation would fail and result in infinite
* error recursion.
*/
-void
+int
errmsg_internal(const char *fmt,...)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
* errmsg_plural --- add a primary error message text to the current error,
* with support for pluralization of the message text
*/
-void
+int
errmsg_plural(const char *fmt_singular, const char *fmt_plural,
unsigned long n,...)
{
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
/*
* errdetail --- add a detail error message text to the current error
*/
-void
+int
errdetail(const char *fmt,...)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
* messages that seem not worth translating for one reason or another
* (typically, that they don't seem to be useful to average users).
*/
-void
+int
errdetail_internal(const char *fmt,...)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
/*
* errdetail_log --- add a detail_log error message text to the current error
*/
-void
+int
errdetail_log(const char *fmt,...)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
/*
* errdetail_log_plural --- add a detail_log error message text to the current error
* with support for pluralization of the message text
*/
-void
+int
errdetail_log_plural(const char *fmt_singular, const char *fmt_plural,
unsigned long n,...)
{
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
* errdetail_plural --- add a detail error message text to the current error,
* with support for pluralization of the message text
*/
-void
+int
errdetail_plural(const char *fmt_singular, const char *fmt_plural,
unsigned long n,...)
{
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
/*
* errhint --- add a hint error message text to the current error
*/
-void
+int
errhint(const char *fmt,...)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
* context information. We assume earlier calls represent more-closely-nested
* states.
*/
-void
+int
errcontext_msg(const char *fmt,...)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
+ return 0; /* return value does not matter */
}
/*
* a set_errcontext_domain() call to specify the domain. This is usually
* done transparently by the errcontext() macro.
*/
-void
+int
set_errcontext_domain(const char *domain)
{
ErrorData *edata = &errordata[errordata_stack_depth];
/* the default text domain is the backend's */
edata->context_domain = domain ? domain : PG_TEXTDOMAIN("postgres");
+
+ return 0; /* return value does not matter */
}
*
* This should be called if the message text already includes the statement.
*/
-void
+int
errhidestmt(bool hide_stmt)
{
ErrorData *edata = &errordata[errordata_stack_depth];
CHECK_STACK_DEPTH();
edata->hide_stmt = hide_stmt;
+
+ return 0; /* return value does not matter */
}
/*
* This should only be used for verbose debugging messages where the repeated
* inclusion of context would bloat the log volume too much.
*/
-void
+int
errhidecontext(bool hide_ctx)
{
ErrorData *edata = &errordata[errordata_stack_depth];
CHECK_STACK_DEPTH();
edata->hide_ctx = hide_ctx;
+
+ return 0; /* return value does not matter */
}
* name appear in messages sent to old-protocol clients. Note that the
* passed string is expected to be a non-freeable constant string.
*/
-void
+int
errfunction(const char *funcname)
{
ErrorData *edata = &errordata[errordata_stack_depth];
edata->funcname = funcname;
edata->show_funcname = true;
+
+ return 0; /* return value does not matter */
}
/*
* errposition --- add cursor position to the current error
*/
-void
+int
errposition(int cursorpos)
{
ErrorData *edata = &errordata[errordata_stack_depth];
CHECK_STACK_DEPTH();
edata->cursorpos = cursorpos;
+
+ return 0; /* return value does not matter */
}
/*
* internalerrposition --- add internal cursor position to the current error
*/
-void
+int
internalerrposition(int cursorpos)
{
ErrorData *edata = &errordata[errordata_stack_depth];
CHECK_STACK_DEPTH();
edata->internalpos = cursorpos;
+
+ return 0; /* return value does not matter */
}
/*
* is intended for use in error callback subroutines that are editorializing
* on the layout of the error report.
*/
-void
+int
internalerrquery(const char *query)
{
ErrorData *edata = &errordata[errordata_stack_depth];
if (query)
edata->internalquery = MemoryContextStrdup(edata->assoc_context, query);
+
+ return 0; /* return value does not matter */
}
/*
* Most potential callers should not use this directly, but instead prefer
* higher-level abstractions, such as errtablecol() (see relcache.c).
*/
-void
+int
err_generic_string(int field, const char *str)
{
ErrorData *edata = &errordata[errordata_stack_depth];
elog(ERROR, "unsupported ErrorData field id: %d", field);
break;
}
+
+ return 0; /* return value does not matter */
}
/*
extern Relation ExecGetRangeTableRelation(EState *estate, Index rti);
-extern void executor_errposition(EState *estate, int location);
+extern int executor_errposition(EState *estate, int location);
extern void RegisterExprContextCallback(ExprContext *econtext,
ExprContextCallbackFunction function,
Oid targetTypeId, int32 targetTypmod,
const char *constructName);
-extern void parser_coercion_errposition(ParseState *pstate,
+extern int parser_coercion_errposition(ParseState *pstate,
int coerce_location,
Node *input_expr);
extern ParseState *make_parsestate(ParseState *parentParseState);
extern void free_parsestate(ParseState *pstate);
-extern void parser_errposition(ParseState *pstate, int location);
+extern int parser_errposition(ParseState *pstate, int location);
extern void setup_parser_errposition_callback(ParseCallbackState *pcbstate,
ParseState *pstate, int location);
extern void scanner_finish(core_yyscan_t yyscanner);
extern int core_yylex(core_YYSTYPE *lvalp, YYLTYPE *llocp,
core_yyscan_t yyscanner);
-extern void scanner_errposition(int location, core_yyscan_t yyscanner);
+extern int scanner_errposition(int location, core_yyscan_t yyscanner);
extern void setup_scanner_errposition_callback(ScannerCallbackState *scbstate,
core_yyscan_t yyscanner,
int location);
extern bool errstart(int elevel, const char *domain);
extern void errfinish(const char *filename, int lineno, const char *funcname);
-extern void errcode(int sqlerrcode);
+extern int errcode(int sqlerrcode);
-extern void errcode_for_file_access(void);
-extern void errcode_for_socket_access(void);
+extern int errcode_for_file_access(void);
+extern int errcode_for_socket_access(void);
-extern void errmsg(const char *fmt,...) pg_attribute_printf(1, 2);
-extern void errmsg_internal(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errmsg(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errmsg_internal(const char *fmt,...) pg_attribute_printf(1, 2);
-extern void errmsg_plural(const char *fmt_singular, const char *fmt_plural,
+extern int errmsg_plural(const char *fmt_singular, const char *fmt_plural,
unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
-extern void errdetail(const char *fmt,...) pg_attribute_printf(1, 2);
-extern void errdetail_internal(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errdetail(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errdetail_internal(const char *fmt,...) pg_attribute_printf(1, 2);
-extern void errdetail_log(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errdetail_log(const char *fmt,...) pg_attribute_printf(1, 2);
-extern void errdetail_log_plural(const char *fmt_singular,
+extern int errdetail_log_plural(const char *fmt_singular,
const char *fmt_plural,
unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
-extern void errdetail_plural(const char *fmt_singular, const char *fmt_plural,
+extern int errdetail_plural(const char *fmt_singular, const char *fmt_plural,
unsigned long n,...) pg_attribute_printf(1, 4) pg_attribute_printf(2, 4);
-extern void errhint(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errhint(const char *fmt,...) pg_attribute_printf(1, 2);
/*
* errcontext() is typically called in error context callback functions, not
*/
#define errcontext set_errcontext_domain(TEXTDOMAIN), errcontext_msg
-extern void set_errcontext_domain(const char *domain);
+extern int set_errcontext_domain(const char *domain);
-extern void errcontext_msg(const char *fmt,...) pg_attribute_printf(1, 2);
+extern int errcontext_msg(const char *fmt,...) pg_attribute_printf(1, 2);
-extern void errhidestmt(bool hide_stmt);
-extern void errhidecontext(bool hide_ctx);
+extern int errhidestmt(bool hide_stmt);
+extern int errhidecontext(bool hide_ctx);
-extern void errbacktrace(void);
+extern int errbacktrace(void);
-extern void errfunction(const char *funcname);
-extern void errposition(int cursorpos);
+extern int errfunction(const char *funcname);
+extern int errposition(int cursorpos);
-extern void internalerrposition(int cursorpos);
-extern void internalerrquery(const char *query);
+extern int internalerrposition(int cursorpos);
+extern int internalerrquery(const char *query);
-extern void err_generic_string(int field, const char *str);
+extern int err_generic_string(int field, const char *str);
extern int geterrcode(void);
extern int geterrposition(void);
* parsing of a plpgsql function, since it requires the scanorig string
* to still be available.
*/
-void
+int
plpgsql_scanner_errposition(int location)
{
int pos;
if (location < 0 || scanorig == NULL)
- return; /* no-op if location is unknown */
+ return 0; /* no-op if location is unknown */
/* Convert byte offset to character number */
pos = pg_mbstrlen_with_len(scanorig, location) + 1;
/* And pass it to the ereport mechanism */
(void) internalerrposition(pos);
/* Also pass the function body string */
- internalerrquery(scanorig);
+ return internalerrquery(scanorig);
}
/*
extern int plpgsql_peek(void);
extern void plpgsql_peek2(int *tok1_p, int *tok2_p, int *tok1_loc,
int *tok2_loc);
-extern void plpgsql_scanner_errposition(int location);
+extern int plpgsql_scanner_errposition(int location);
extern void plpgsql_yyerror(const char *message) pg_attribute_noreturn();
extern int plpgsql_location_to_lineno(int location);
extern int plpgsql_latest_lineno(void);