mirror of https://github.com/postgres/postgres
parent
5e6b0a574b
commit
64e35e1468
@ -0,0 +1,63 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* keywords.c-- |
||||
* lexical token lookup for reserved words in postgres embedded SQL |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
#include <ctype.h> |
||||
#include <string.h> |
||||
|
||||
#include "postgres.h" |
||||
#include "type.h" |
||||
#include "y.tab.h" |
||||
#include "extern.h" |
||||
|
||||
/*
|
||||
* List of (keyword-name, keyword-token-value) pairs. |
||||
* |
||||
* !!WARNING!!: This list must be sorted, because binary |
||||
* search is used to locate entries. |
||||
*/ |
||||
static ScanKeyword ScanKeywords[] = { |
||||
/* name value */ |
||||
{"auto", S_AUTO}, |
||||
{"bool", S_BOOL}, |
||||
{"char", S_CHAR}, |
||||
{"const", S_CONST}, |
||||
{"double", S_DOUBLE}, |
||||
{"extern", S_EXTERN}, |
||||
{"float", S_FLOAT}, |
||||
{"int", S_INT}, |
||||
{"long", S_LONG}, |
||||
{"register", S_REGISTER}, |
||||
{"short", S_SHORT}, |
||||
{"signed", S_SIGNED}, |
||||
{"static", S_STATIC}, |
||||
{"struct", S_STRUCT}, |
||||
{"unsigned", S_UNSIGNED}, |
||||
{"varchar", S_VARCHAR}, |
||||
}; |
||||
|
||||
ScanKeyword * |
||||
ScanCKeywordLookup(char *text) |
||||
{ |
||||
ScanKeyword *low = &ScanKeywords[0]; |
||||
ScanKeyword *high = endof(ScanKeywords) - 1; |
||||
ScanKeyword *middle; |
||||
int difference; |
||||
|
||||
while (low <= high) |
||||
{ |
||||
middle = low + (high - low) / 2; |
||||
difference = strcmp(middle->name, text); |
||||
if (difference == 0) |
||||
return (middle); |
||||
else if (difference < 0) |
||||
low = middle + 1; |
||||
else |
||||
high = middle - 1; |
||||
} |
||||
|
||||
return (NULL); |
||||
} |
||||
@ -0,0 +1,60 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* keywords.c-- |
||||
* lexical token lookup for reserved words in postgres embedded SQL |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
#include <ctype.h> |
||||
#include <string.h> |
||||
|
||||
#include "postgres.h" |
||||
#include "type.h" |
||||
#include "y.tab.h" |
||||
#include "extern.h" |
||||
|
||||
/*
|
||||
* List of (keyword-name, keyword-token-value) pairs. |
||||
* |
||||
* !!WARNING!!: This list must be sorted, because binary |
||||
* search is used to locate entries. |
||||
*/ |
||||
static ScanKeyword ScanKeywords[] = { |
||||
/* name value */ |
||||
{"connect", SQL_CONNECT}, |
||||
{"continue", SQL_CONTINUE}, |
||||
{"found", SQL_FOUND}, |
||||
{"go", SQL_GO}, |
||||
{"goto", SQL_GOTO}, |
||||
{"immediate", SQL_IMMEDIATE}, |
||||
{"indicator", SQL_INDICATOR}, |
||||
{"open", SQL_OPEN}, |
||||
{"section", SQL_SECTION}, |
||||
{"sqlerror", SQL_SQLERROR}, |
||||
{"sqlprint", SQL_SQLPRINT}, |
||||
{"stop", SQL_STOP}, |
||||
{"whenever", SQL_WHENEVER}, |
||||
}; |
||||
|
||||
ScanKeyword * |
||||
ScanECPGKeywordLookup(char *text) |
||||
{ |
||||
ScanKeyword *low = &ScanKeywords[0]; |
||||
ScanKeyword *high = endof(ScanKeywords) - 1; |
||||
ScanKeyword *middle; |
||||
int difference; |
||||
|
||||
while (low <= high) |
||||
{ |
||||
middle = low + (high - low) / 2; |
||||
difference = strcmp(middle->name, text); |
||||
if (difference == 0) |
||||
return (middle); |
||||
else if (difference < 0) |
||||
low = middle + 1; |
||||
else |
||||
high = middle - 1; |
||||
} |
||||
|
||||
return (NULL); |
||||
} |
||||
@ -0,0 +1,242 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* keywords.c-- |
||||
* lexical token lookup for reserved words in postgres SQL |
||||
* |
||||
* Copyright (c) 1994, Regents of the University of California |
||||
* |
||||
* |
||||
* IDENTIFICATION |
||||
* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.1 1998/04/21 13:23:06 scrappy Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
#include <ctype.h> |
||||
#include <string.h> |
||||
|
||||
#include "postgres.h" |
||||
#include "nodes/parsenodes.h" |
||||
#include "nodes/pg_list.h" |
||||
#include "type.h" |
||||
#include "y.tab.h" |
||||
#include "parser/keywords.h" |
||||
#include "utils/elog.h" |
||||
|
||||
/*
|
||||
* List of (keyword-name, keyword-token-value) pairs. |
||||
* |
||||
* !!WARNING!!: This list must be sorted, because binary |
||||
* search is used to locate entries. |
||||
*/ |
||||
static ScanKeyword ScanKeywords[] = { |
||||
/* name value */ |
||||
{"abort", ABORT_TRANS}, |
||||
{"action", ACTION}, |
||||
{"add", ADD}, |
||||
{"after", AFTER}, |
||||
{"aggregate", AGGREGATE}, |
||||
{"all", ALL}, |
||||
{"alter", ALTER}, |
||||
{"analyze", ANALYZE}, |
||||
{"and", AND}, |
||||
{"any", ANY}, |
||||
{"archive", ARCHIVE}, |
||||
{"as", AS}, |
||||
{"asc", ASC}, |
||||
{"backward", BACKWARD}, |
||||
{"before", BEFORE}, |
||||
{"begin", BEGIN_TRANS}, |
||||
{"between", BETWEEN}, |
||||
{"binary", BINARY}, |
||||
{"both", BOTH}, |
||||
{"by", BY}, |
||||
{"cache", CACHE}, |
||||
{"cascade", CASCADE}, |
||||
{"cast", CAST}, |
||||
{"char", CHAR}, |
||||
{"character", CHARACTER}, |
||||
{"check", CHECK}, |
||||
{"close", CLOSE}, |
||||
{"cluster", CLUSTER}, |
||||
{"collate", COLLATE}, |
||||
{"column", COLUMN}, |
||||
{"commit", COMMIT}, |
||||
{"constraint", CONSTRAINT}, |
||||
{"copy", COPY}, |
||||
{"create", CREATE}, |
||||
{"createdb", CREATEDB}, |
||||
{"createuser", CREATEUSER}, |
||||
{"cross", CROSS}, |
||||
{"current", CURRENT}, |
||||
{"current_date", CURRENT_DATE}, |
||||
{"current_time", CURRENT_TIME}, |
||||
{"current_timestamp", CURRENT_TIMESTAMP}, |
||||
{"current_user", CURRENT_USER}, |
||||
{"cursor", CURSOR}, |
||||
{"cycle", CYCLE}, |
||||
{"database", DATABASE}, |
||||
{"day", DAY_P}, |
||||
{"decimal", DECIMAL}, |
||||
{"declare", DECLARE}, |
||||
{"default", DEFAULT}, |
||||
{"delete", DELETE}, |
||||
{"delimiters", DELIMITERS}, |
||||
{"desc", DESC}, |
||||
{"distinct", DISTINCT}, |
||||
{"do", DO}, |
||||
{"double", DOUBLE}, |
||||
{"drop", DROP}, |
||||
{"each", EACH}, |
||||
{"end", END_TRANS}, |
||||
{"execute", EXECUTE}, |
||||
{"exists", EXISTS}, |
||||
{"explain", EXPLAIN}, |
||||
{"extend", EXTEND}, |
||||
{"extract", EXTRACT}, |
||||
{"false", FALSE_P}, |
||||
{"fetch", FETCH}, |
||||
{"float", FLOAT}, |
||||
{"for", FOR}, |
||||
{"foreign", FOREIGN}, |
||||
{"forward", FORWARD}, |
||||
{"from", FROM}, |
||||
{"full", FULL}, |
||||
{"function", FUNCTION}, |
||||
{"grant", GRANT}, |
||||
{"group", GROUP}, |
||||
{"handler", HANDLER}, |
||||
{"having", HAVING}, |
||||
{"hour", HOUR_P}, |
||||
{"in", IN}, |
||||
{"increment", INCREMENT}, |
||||
{"index", INDEX}, |
||||
{"inherits", INHERITS}, |
||||
{"inner", INNER_P}, |
||||
{"insert", INSERT}, |
||||
{"instead", INSTEAD}, |
||||
{"interval", INTERVAL}, |
||||
{"into", INTO}, |
||||
{"is", IS}, |
||||
{"isnull", ISNULL}, |
||||
{"join", JOIN}, |
||||
{"key", KEY}, |
||||
{"lancompiler", LANCOMPILER}, |
||||
{"language", LANGUAGE}, |
||||
{"leading", LEADING}, |
||||
{"left", LEFT}, |
||||
{"like", LIKE}, |
||||
{"listen", LISTEN}, |
||||
{"load", LOAD}, |
||||
{"local", LOCAL}, |
||||
{"location", LOCATION}, |
||||
{"lock", LOCK_P}, |
||||
{"match", MATCH}, |
||||
{"maxvalue", MAXVALUE}, |
||||
{"minute", MINUTE_P}, |
||||
{"minvalue", MINVALUE}, |
||||
{"month", MONTH_P}, |
||||
{"move", MOVE}, |
||||
{"national", NATIONAL}, |
||||
{"natural", NATURAL}, |
||||
{"nchar", NCHAR}, |
||||
{"new", NEW}, |
||||
{"no", NO}, |
||||
{"nocreatedb", NOCREATEDB}, |
||||
{"nocreateuser", NOCREATEUSER}, |
||||
{"none", NONE}, |
||||
{"not", NOT}, |
||||
{"nothing", NOTHING}, |
||||
{"notify", NOTIFY}, |
||||
{"notnull", NOTNULL}, |
||||
{"null", NULL_P}, |
||||
{"numeric", NUMERIC}, |
||||
{"oids", OIDS}, |
||||
{"on", ON}, |
||||
{"operator", OPERATOR}, |
||||
{"option", OPTION}, |
||||
{"or", OR}, |
||||
{"order", ORDER}, |
||||
{"outer", OUTER_P}, |
||||
{"partial", PARTIAL}, |
||||
{"password", PASSWORD}, |
||||
{"position", POSITION}, |
||||
{"precision", PRECISION}, |
||||
{"primary", PRIMARY}, |
||||
{"privileges", PRIVILEGES}, |
||||
{"procedural", PROCEDURAL}, |
||||
{"procedure", PROCEDURE}, |
||||
{"public", PUBLIC}, |
||||
{"recipe", RECIPE}, |
||||
{"references", REFERENCES}, |
||||
{"rename", RENAME}, |
||||
{"reset", RESET}, |
||||
{"returns", RETURNS}, |
||||
{"revoke", REVOKE}, |
||||
{"right", RIGHT}, |
||||
{"rollback", ROLLBACK}, |
||||
{"row", ROW}, |
||||
{"rule", RULE}, |
||||
{"second", SECOND_P}, |
||||
{"select", SELECT}, |
||||
{"sequence", SEQUENCE}, |
||||
{"set", SET}, |
||||
{"setof", SETOF}, |
||||
{"show", SHOW}, |
||||
{"start", START}, |
||||
{"statement", STATEMENT}, |
||||
{"stdin", STDIN}, |
||||
{"stdout", STDOUT}, |
||||
{"substring", SUBSTRING}, |
||||
{"table", TABLE}, |
||||
{"time", TIME}, |
||||
{"to", TO}, |
||||
{"trailing", TRAILING}, |
||||
{"transaction", TRANSACTION}, |
||||
{"trigger", TRIGGER}, |
||||
{"trim", TRIM}, |
||||
{"true", TRUE_P}, |
||||
{"trusted", TRUSTED}, |
||||
{"type", TYPE_P}, |
||||
{"union", UNION}, |
||||
{"unique", UNIQUE}, |
||||
{"until", UNTIL}, |
||||
{"update", UPDATE}, |
||||
{"user", USER}, |
||||
{"using", USING}, |
||||
{"vacuum", VACUUM}, |
||||
{"valid", VALID}, |
||||
{"values", VALUES}, |
||||
{"varchar", VARCHAR}, |
||||
{"varying", VARYING}, |
||||
{"verbose", VERBOSE}, |
||||
{"version", VERSION}, |
||||
{"view", VIEW}, |
||||
{"where", WHERE}, |
||||
{"with", WITH}, |
||||
{"work", WORK}, |
||||
{"year", YEAR_P}, |
||||
{"zone", ZONE}, |
||||
}; |
||||
|
||||
ScanKeyword * |
||||
ScanKeywordLookup(char *text) |
||||
{ |
||||
ScanKeyword *low = &ScanKeywords[0]; |
||||
ScanKeyword *high = endof(ScanKeywords) - 1; |
||||
ScanKeyword *middle; |
||||
int difference; |
||||
|
||||
while (low <= high) |
||||
{ |
||||
middle = low + (high - low) / 2; |
||||
difference = strcmp(middle->name, text); |
||||
if (difference == 0) |
||||
return (middle); |
||||
else if (difference < 0) |
||||
low = middle + 1; |
||||
else |
||||
high = middle - 1; |
||||
} |
||||
|
||||
return (NULL); |
||||
} |
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue