PostgreSQL Source Code
git master
Loading...
Searching...
No Matches
c_keywords.c
Go to the documentation of this file.
1
/*-------------------------------------------------------------------------
2
*
3
* c_keywords.c
4
* lexical token lookup for reserved words in postgres embedded SQL
5
*
6
* src/interfaces/ecpg/preproc/c_keywords.c
7
*
8
*-------------------------------------------------------------------------
9
*/
10
#include "
postgres_fe.h
"
11
12
/* ScanKeywordList lookup data for C keywords */
13
#include "c_kwlist_d.h"
14
#include "
preproc_extern.h
"
15
#include "preproc.h"
16
17
/* Token codes for C keywords */
18
#define PG_KEYWORD(kwname, value) value,
19
20
static
const
uint16
ScanCKeywordTokens
[] = {
21
#include "
c_kwlist.h
"
22
};
23
24
#undef PG_KEYWORD
25
26
27
/*
28
* ScanCKeywordLookup - see if a given word is a keyword
29
*
30
* Returns the token value of the keyword, or -1 if no match.
31
*
32
* Do a hash search using plain strcmp() comparison. This is much like
33
* ScanKeywordLookup(), except we want case-sensitive matching.
34
*/
35
int
36
ScanCKeywordLookup
(
const
char
*
text
)
37
{
38
size_t
len
;
39
int
h;
40
const
char
*
kw
;
41
42
/*
43
* Reject immediately if too long to be any keyword. This saves useless
44
* hashing work on long strings.
45
*/
46
len
=
strlen
(
text
);
47
if
(
len
>
ScanCKeywords
.max_kw_len)
48
return
-1;
49
50
/*
51
* Compute the hash function. Since it's a perfect hash, we need only
52
* match to the specific keyword it identifies.
53
*/
54
h =
ScanCKeywords_hash_func
(
text
,
len
);
55
56
/* An out-of-range result implies no match */
57
if
(
h < 0 || h >
=
ScanCKeywords
.num_keywords)
58
return
-1;
59
60
kw
=
GetScanKeyword
(h, &
ScanCKeywords
);
61
62
if
(
strcmp
(
kw
,
text
) == 0)
63
return
ScanCKeywordTokens
[h];
64
65
return
-1;
66
}
uint16
uint16_t uint16
Definition
c.h:545
ScanCKeywordLookup
int ScanCKeywordLookup(const char *text)
Definition
c_keywords.c:36
ScanCKeywordTokens
static const uint16 ScanCKeywordTokens[]
Definition
c_keywords.c:20
c_kwlist.h
GetScanKeyword
static const char * GetScanKeyword(int n, const ScanKeywordList *keywords)
Definition
kwlookup.h:39
len
const void size_t len
Definition
pg_crc32c_sse42.c:28
postgres_fe.h
fb
static int fb(int x)
Definition
preproc-init.c:92
preproc_extern.h
varlena
Definition
c.h:706
src
interfaces
ecpg
preproc
c_keywords.c
Generated on Sun Feb 1 2026 00:13:17 for PostgreSQL Source Code by
1.9.8