mirror of
https://github.com/postgres/postgres.git
synced 2025-08-27 07:42:10 +03:00
Add a "void *" passthrough pointer for psqlscan.l's callback functions.
The immediate motivation for this is to provide clean infrastructure for the proposed \if...\endif patch for psql; but it seems like a good thing to have even if that patch doesn't get in. Previously the callback functions could only make use of application-global state, which is a pretty severe handicap. For the moment, the pointer is only passed through to the get_variable callback function. I considered also passing it to the write_error callback, but for now let's not. Neither psql nor pgbench has a use for that, and in the case of psql we'd have to invent a separate wrapper function because we would certainly not want to change the signature of psql_error(). Discussion: https://postgr.es/m/10108.1489418309@sss.pgh.pa.us
This commit is contained in:
@@ -53,7 +53,8 @@ typedef struct PsqlScanCallbacks
|
||||
{
|
||||
/* Fetch value of a variable, as a pfree'able string; NULL if unknown */
|
||||
/* This pointer can be NULL if no variable substitution is wanted */
|
||||
char *(*get_variable) (const char *varname, bool escape, bool as_ident);
|
||||
char *(*get_variable) (const char *varname, bool escape,
|
||||
bool as_ident, void *passthrough);
|
||||
/* Print an error message someplace appropriate */
|
||||
/* (very old gcc versions don't support attributes on function pointers) */
|
||||
#if defined(__GNUC__) && __GNUC__ < 4
|
||||
@@ -67,6 +68,8 @@ typedef struct PsqlScanCallbacks
|
||||
extern PsqlScanState psql_scan_create(const PsqlScanCallbacks *callbacks);
|
||||
extern void psql_scan_destroy(PsqlScanState state);
|
||||
|
||||
extern void psql_scan_set_passthrough(PsqlScanState state, void *passthrough);
|
||||
|
||||
extern void psql_scan_setup(PsqlScanState state,
|
||||
const char *line, int line_len,
|
||||
int encoding, bool std_strings);
|
||||
|
Reference in New Issue
Block a user