1 /*-------------------------------------------------------------------------
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
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 *-------------------------------------------------------------------------
23 #include "pqexpbuffer.h"
26 /* Abstract type for lexer's internal state */
27 typedef struct PsqlScanStateData
*PsqlScanState
;
29 /* Termination states for psql_scan() */
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 */
38 /* Prompt type returned by psql_scan() */
39 typedef enum _promptStatus
51 /* Quoting request types for get_variable() callback */
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 */
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
,
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 */