%{ #include "postgres.h" #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "parse.h" #include "parser/keywords.h" #include #include %} struct scan_keyword { char *name; int value; }; %% abort, ABORT_TRANS absolute, ABSOLUTE access, ACCESS action, ACTION add, ADD after, AFTER aggregate, AGGREGATE all, ALL alter, ALTER analyze, ANALYZE and, AND any, ANY as, AS asc, ASC backward, BACKWARD before, BEFORE begin, BEGIN_TRANS between, BETWEEN binary, BINARY both, BOTH by, BY cache, CACHE cascade, CASCADE case, CASE cast, CAST char, CHAR character, CHARACTER check, CHECK close, CLOSE cluster, CLUSTER coalesce, COALESCE collate, COLLATE column, COLUMN comment, COMMENT commit, COMMIT committed, COMMITTED constraint, CONSTRAINT constraints, CONSTRAINTS copy, COPY create, CREATE createdb, CREATEDB createuser, CREATEUSER cross, CROSS 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 deferrable, DEFERRABLE deferred, DEFERRED delete, DELETE delimiters, DELIMITERS desc, DESC distinct, DISTINCT do, DO double, DOUBLE drop, DROP each, EACH else, ELSE encoding, ENCODING end, END_TRANS except, EXCEPT exclusive, EXCLUSIVE 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 global, GLOBAL grant, GRANT group, GROUP handler, HANDLER having, HAVING hour, HOUR_P immediate, IMMEDIATE in, IN increment, INCREMENT index, INDEX inherits, INHERITS initially, INITIALLY inner, INNER_P insensitive, INSENSITIVE insert, INSERT instead, INSTEAD intersect, INTERSECT interval, INTERVAL into, INTO is, IS isnull, ISNULL isolation, ISOLATION join, JOIN key, KEY lancompiler, LANCOMPILER language, LANGUAGE leading, LEADING left, LEFT level, LEVEL like, LIKE limit, LIMIT listen, LISTEN load, LOAD local, LOCAL location, LOCATION lock, LOCK_P match, MATCH maxvalue, MAXVALUE minute, MINUTE_P minvalue, MINVALUE mode, MODE month, MONTH_P move, MOVE names, NAMES national, NATIONAL natural, NATURAL nchar, NCHAR new, NEW next, NEXT no, NO nocreatedb, NOCREATEDB nocreateuser, NOCREATEUSER none, NONE not, NOT nothing, NOTHING notify, NOTIFY notnull, NOTNULL null, NULL_P nullif, NULLIF numeric, NUMERIC of, OF offset, OFFSET oids, OIDS old, CURRENT on, ON only, ONLY operator, OPERATOR option, OPTION or, OR order, ORDER outer, OUTER_P partial, PARTIAL password, PASSWORD pendant, PENDANT position, POSITION precision, PRECISION primary, PRIMARY prior, PRIOR privileges, PRIVILEGES procedural, PROCEDURAL procedure, PROCEDURE public, PUBLIC read, READ references, REFERENCES relative, RELATIVE rename, RENAME reset, RESET restrict, RESTRICT returns, RETURNS revoke, REVOKE right, RIGHT rollback, ROLLBACK row, ROW rule, RULE scroll, SCROLL second, SECOND_P select, SELECT sequence, SEQUENCE serial, SERIAL serializable, SERIALIZABLE set, SET setof, SETOF share, SHARE show, SHOW start, START statement, STATEMENT stdin, STDIN stdout, STDOUT substring, SUBSTRING sysid, SYSID table, TABLE temp, TEMP temporary, TEMPORARY then, THEN time, TIME timestamp, TIMESTAMP timezone_hour, TIMEZONE_HOUR timezone_minute, TIMEZONE_MINUTE to, TO trailing, TRAILING transaction, TRANSACTION trigger, TRIGGER trim, TRIM true, TRUE_P truncate, TRUNCATE trusted, TRUSTED type, TYPE_P union, UNION unique, UNIQUE unlisten, UNLISTEN until, UNTIL update, UPDATE user, USER using, USING vacuum, VACUUM valid, VALID values, VALUES varchar, VARCHAR varying, VARYING verbose, VERBOSE version, VERSION view, VIEW when, WHEN where, WHERE with, WITH work, WORK year, YEAR_P zone, ZONE %% ScanKeyword * ScanKeywordLookup(const char *text, int len) { return (ScanKeyword*)in_word_set(text, len); }