Unmark gen_random_uuid() function leakproof.
[pgsql.git] / src / include / fe_utils / psqlscan.h
blobea489efbec26f89c7e5b05507a3f27f235685d97
1 /*-------------------------------------------------------------------------
3 * psqlscan.h
4 * lexical scanner for SQL commands
6 * This lexer used to be part of psql, and that heritage is reflected in
7 * the file name as well as function and typedef names, though it can now
8 * be used by other frontend programs as well. It's also possible to extend
9 * this lexer with a compatible add-on lexer to handle program-specific
10 * backslash commands.
13 * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
14 * Portions Copyright (c) 1994, Regents of the University of California
16 * src/include/fe_utils/psqlscan.h
18 *-------------------------------------------------------------------------
20 #ifndef PSQLSCAN_H
21 #define PSQLSCAN_H
23 #include "pqexpbuffer.h"
26 /* Abstract type for lexer's internal state */
27 typedef struct PsqlScanStateData *PsqlScanState;
29 /* Termination states for psql_scan() */
30 typedef enum
32 PSCAN_SEMICOLON, /* found command-ending semicolon */
33 PSCAN_BACKSLASH, /* found backslash command */
34 PSCAN_INCOMPLETE, /* end of line, SQL statement incomplete */
35 PSCAN_EOL, /* end of line, SQL possibly complete */
36 } PsqlScanResult;
38 /* Prompt type returned by psql_scan() */
39 typedef enum _promptStatus
41 PROMPT_READY,
42 PROMPT_CONTINUE,
43 PROMPT_COMMENT,
44 PROMPT_SINGLEQUOTE,
45 PROMPT_DOUBLEQUOTE,
46 PROMPT_DOLLARQUOTE,
47 PROMPT_PAREN,
48 PROMPT_COPY,
49 } promptStatus_t;
51 /* Quoting request types for get_variable() callback */
52 typedef enum
54 PQUOTE_PLAIN, /* just return the actual value */
55 PQUOTE_SQL_LITERAL, /* add quotes to make a valid SQL literal */
56 PQUOTE_SQL_IDENT, /* quote if needed to make a SQL identifier */
57 PQUOTE_SHELL_ARG, /* quote if needed to be safe in a shell cmd */
58 } PsqlScanQuoteType;
60 /* Callback functions to be used by the lexer */
61 typedef struct PsqlScanCallbacks
63 /* Fetch value of a variable, as a free'able string; NULL if unknown */
64 /* This pointer can be NULL if no variable substitution is wanted */
65 char *(*get_variable) (const char *varname, PsqlScanQuoteType quote,
66 void *passthrough);
67 } PsqlScanCallbacks;
70 extern PsqlScanState psql_scan_create(const PsqlScanCallbacks *callbacks);
71 extern void psql_scan_destroy(PsqlScanState state);
73 extern void psql_scan_set_passthrough(PsqlScanState state, void *passthrough);
75 extern void psql_scan_setup(PsqlScanState state,
76 const char *line, int line_len,
77 int encoding, bool std_strings);
78 extern void psql_scan_finish(PsqlScanState state);
80 extern PsqlScanResult psql_scan(PsqlScanState state,
81 PQExpBuffer query_buf,
82 promptStatus_t *prompt);
84 extern void psql_scan_reset(PsqlScanState state);
86 extern void psql_scan_reselect_sql_lexer(PsqlScanState state);
88 extern bool psql_scan_in_quote(PsqlScanState state);
90 #endif /* PSQLSCAN_H */