Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * ecpg_keywords.c
4 : : * lexical token lookup for reserved words in postgres embedded SQL
5 : : *
6 : : * IDENTIFICATION
7 : : * src/interfaces/ecpg/preproc/ecpg_keywords.c
8 : : *
9 : : *-------------------------------------------------------------------------
10 : : */
11 : :
12 : : #include "postgres_fe.h"
13 : :
14 : : #include <ctype.h>
15 : :
16 : : /* ScanKeywordList lookup data for ECPG keywords */
17 : : #include "ecpg_kwlist_d.h"
18 : : #include "preproc_extern.h"
19 : : #include "preproc.h"
20 : :
21 : : /* Token codes for ECPG keywords */
22 : : #define PG_KEYWORD(kwname, value) value,
23 : :
24 : : static const uint16 ECPGScanKeywordTokens[] = {
25 : : #include "ecpg_kwlist.h"
26 : : };
27 : :
28 : : #undef PG_KEYWORD
29 : :
30 : :
31 : : /*
32 : : * ScanECPGKeywordLookup - see if a given word is a keyword
33 : : *
34 : : * Returns the token value of the keyword, or -1 if no match.
35 : : *
36 : : * Keywords are matched using the same case-folding rules as in the backend.
37 : : */
38 : : int
5808 meskes@postgresql.or 39 :CBC 5536 : ScanECPGKeywordLookup(const char *text)
40 : : {
41 : : int kwnum;
42 : :
43 : : /* First check SQL symbols defined by the backend. */
1925 tgl@sss.pgh.pa.us 44 : 5536 : kwnum = ScanKeywordLookup(text, &ScanKeywords);
45 [ + + ]: 5536 : if (kwnum >= 0)
46 : 3033 : return SQLScanKeywordTokens[kwnum];
47 : :
48 : : /* Try ECPG-specific keywords. */
49 : 2503 : kwnum = ScanKeywordLookup(text, &ScanECPGKeywords);
50 [ + + ]: 2503 : if (kwnum >= 0)
51 : 919 : return ECPGScanKeywordTokens[kwnum];
52 : :
53 : 1584 : return -1;
54 : : }
|