123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*-------------------------------------------------------------------------
- *
- * psqlscan.h
- * lexical scanner for SQL commands
- *
- * This lexer used to be part of psql, and that heritage is reflected in
- * the file name as well as function and typedef names, though it can now
- * be used by other frontend programs as well. It's also possible to extend
- * this lexer with a compatible add-on lexer to handle program-specific
- * backslash commands.
- *
- *
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/fe_utils/psqlscan.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef PSQLSCAN_H
- #define PSQLSCAN_H
- #include "pqexpbuffer.h"
- /* Abstract type for lexer's internal state */
- typedef struct PsqlScanStateData *PsqlScanState;
- /* Termination states for psql_scan() */
- typedef enum
- {
- PSCAN_SEMICOLON, /* found command-ending semicolon */
- PSCAN_BACKSLASH, /* found backslash command */
- PSCAN_INCOMPLETE, /* end of line, SQL statement incomplete */
- PSCAN_EOL /* end of line, SQL possibly complete */
- } PsqlScanResult;
- /* Prompt type returned by psql_scan() */
- typedef enum _promptStatus
- {
- PROMPT_READY,
- PROMPT_CONTINUE,
- PROMPT_COMMENT,
- PROMPT_SINGLEQUOTE,
- PROMPT_DOUBLEQUOTE,
- PROMPT_DOLLARQUOTE,
- PROMPT_PAREN,
- PROMPT_COPY
- } promptStatus_t;
- /* Quoting request types for get_variable() callback */
- typedef enum
- {
- PQUOTE_PLAIN, /* just return the actual value */
- PQUOTE_SQL_LITERAL, /* add quotes to make a valid SQL literal */
- PQUOTE_SQL_IDENT, /* quote if needed to make a SQL identifier */
- PQUOTE_SHELL_ARG /* quote if needed to be safe in a shell cmd */
- } PsqlScanQuoteType;
- /* Callback functions to be used by the lexer */
- typedef struct PsqlScanCallbacks
- {
- /* Fetch value of a variable, as a free'able string; NULL if unknown */
- /* This pointer can be NULL if no variable substitution is wanted */
- char *(*get_variable) (const char *varname, PsqlScanQuoteType quote,
- void *passthrough);
- } 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);
- extern void psql_scan_finish(PsqlScanState state);
- extern PsqlScanResult psql_scan(PsqlScanState state,
- PQExpBuffer query_buf,
- promptStatus_t *prompt);
- extern void psql_scan_reset(PsqlScanState state);
- extern void psql_scan_reselect_sql_lexer(PsqlScanState state);
- extern bool psql_scan_in_quote(PsqlScanState state);
- #endif /* PSQLSCAN_H */
|