55 lines
1.2 KiB
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;
|
|
}
|