postgresql/src/interfaces/ecpg/preproc/ecpg_keywords.c

55 lines
1.2 KiB
C

/*-------------------------------------------------------------------------
*
* 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;
}