diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:46:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:46:48 +0000 |
commit | 311bcfc6b3acdd6fd152798c7f287ddf74fa2a98 (patch) | |
tree | 0ec307299b1dada3701e42f4ca6eda57d708261e /src/interfaces/ecpg/preproc/ecpg_keywords.c | |
parent | Initial commit. (diff) | |
download | postgresql-15-upstream.tar.xz postgresql-15-upstream.zip |
Adding upstream version 15.4.upstream/15.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/interfaces/ecpg/preproc/ecpg_keywords.c')
-rw-r--r-- | src/interfaces/ecpg/preproc/ecpg_keywords.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/interfaces/ecpg/preproc/ecpg_keywords.c b/src/interfaces/ecpg/preproc/ecpg_keywords.c new file mode 100644 index 0000000..a2db06f --- /dev/null +++ b/src/interfaces/ecpg/preproc/ecpg_keywords.c @@ -0,0 +1,54 @@ +/*------------------------------------------------------------------------- + * + * ecpg_keywords.c + * lexical token lookup for reserved words in postgres embedded SQL + * + * IDENTIFICATION + * src/interfaces/ecpg/preproc/ecpg_keywords.c + * + *------------------------------------------------------------------------- + */ + +#include "postgres_fe.h" + +#include <ctype.h> + +/* ScanKeywordList lookup data for ECPG keywords */ +#include "ecpg_kwlist_d.h" +#include "preproc_extern.h" +#include "preproc.h" + +/* Token codes for ECPG keywords */ +#define PG_KEYWORD(kwname, value) value, + +static const uint16 ECPGScanKeywordTokens[] = { +#include "ecpg_kwlist.h" +}; + +#undef PG_KEYWORD + + +/* + * ScanECPGKeywordLookup - see if a given word is a keyword + * + * Returns the token value of the keyword, or -1 if no match. + * + * Keywords are matched using the same case-folding rules as in the backend. + */ +int +ScanECPGKeywordLookup(const char *text) +{ + int kwnum; + + /* First check SQL symbols defined by the backend. */ + kwnum = ScanKeywordLookup(text, &ScanKeywords); + if (kwnum >= 0) + return SQLScanKeywordTokens[kwnum]; + + /* Try ECPG-specific keywords. */ + kwnum = ScanKeywordLookup(text, &ScanECPGKeywords); + if (kwnum >= 0) + return ECPGScanKeywordTokens[kwnum]; + + return -1; +} |