Alvaro Herrera wrote:
> Tom Lane wrote:

> > What I'd suggest is something similar to the design of the errcodes.h
> > header: create a header file containing just the list of PG_KEYWORD
> > macro calls, and have the different users #include it after defining
> > that macro appropriately.  Having .c files include other .c files is
> > usually best avoided on least-surprise grounds.
> 
> Seems doable.

Attached.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
Index: src/backend/parser/Makefile
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/parser/Makefile,v
retrieving revision 1.48
diff -c -p -r1.48 Makefile
*** src/backend/parser/Makefile	4 Oct 2008 21:56:54 -0000	1.48
--- src/backend/parser/Makefile	4 Mar 2009 15:32:52 -0000
*************** override CPPFLAGS := -I$(srcdir) $(CPPFL
*** 14,20 ****
  
  OBJS= analyze.o gram.o keywords.o parser.o parse_agg.o parse_cte.o parse_clause.o \
        parse_expr.o parse_func.o parse_node.o parse_oper.o parse_relation.o \
!       parse_type.o parse_coerce.o parse_target.o parse_utilcmd.o scansup.o
  
  FLEXFLAGS = -CF
  
--- 14,20 ----
  
  OBJS= analyze.o gram.o keywords.o parser.o parse_agg.o parse_cte.o parse_clause.o \
        parse_expr.o parse_func.o parse_node.o parse_oper.o parse_relation.o \
!       parse_type.o parse_coerce.o parse_target.o parse_utilcmd.o scansup.o kwlookup.o
  
  FLEXFLAGS = -CF
  
Index: src/backend/parser/keywords.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/parser/keywords.c,v
retrieving revision 1.210
diff -c -p -r1.210 keywords.c
*** src/backend/parser/keywords.c	24 Feb 2009 10:06:33 -0000	1.210
--- src/backend/parser/keywords.c	4 Mar 2009 15:56:35 -0000
***************
*** 3,10 ****
   * keywords.c
   *	  lexical token lookup for key words in PostgreSQL
   *
-  * NB: This file is also used by pg_dump.
-  *
   *
   * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
   * Portions Copyright (c) 1994, Regents of the University of California
--- 3,8 ----
***************
*** 15,503 ****
   *
   *-------------------------------------------------------------------------
   */
  
! /* Use c.h so that this file can be built in either frontend or backend */
! #include "c.h"
! 
! #include <ctype.h>
! 
! /*
!  * This macro definition overrides the YYSTYPE union definition in gram.h.
!  * We don't need that struct in this file, and including the real definition
!  * would require sucking in some backend-only include files.
!  */
! #define YYSTYPE int
! 
  #include "parser/keywords.h"
- #ifndef ECPG_COMPILE
  #include "parser/gram.h"
- #else
- #include "preproc.h"
- #endif
- 
- /*
-  * List of keyword (name, token-value, category) entries.
-  *
-  * !!WARNING!!: This list must be sorted by ASCII name, because binary
-  *		 search is used to locate entries.
-  */
- const ScanKeyword ScanKeywords[] = {
- 	/* name, value, category */
- 	{"abort", ABORT_P, UNRESERVED_KEYWORD},
- 	{"absolute", ABSOLUTE_P, UNRESERVED_KEYWORD},
- 	{"access", ACCESS, UNRESERVED_KEYWORD},
- 	{"action", ACTION, UNRESERVED_KEYWORD},
- 	{"add", ADD_P, UNRESERVED_KEYWORD},
- 	{"admin", ADMIN, UNRESERVED_KEYWORD},
- 	{"after", AFTER, UNRESERVED_KEYWORD},
- 	{"aggregate", AGGREGATE, UNRESERVED_KEYWORD},
- 	{"all", ALL, RESERVED_KEYWORD},
- 	{"also", ALSO, UNRESERVED_KEYWORD},
- 	{"alter", ALTER, UNRESERVED_KEYWORD},
- 	{"always", ALWAYS, UNRESERVED_KEYWORD},
- 	{"analyse", ANALYSE, RESERVED_KEYWORD},		/* British spelling */
- 	{"analyze", ANALYZE, RESERVED_KEYWORD},
- 	{"and", AND, RESERVED_KEYWORD},
- 	{"any", ANY, RESERVED_KEYWORD},
- 	{"array", ARRAY, RESERVED_KEYWORD},
- 	{"as", AS, RESERVED_KEYWORD},
- 	{"asc", ASC, RESERVED_KEYWORD},
- 	{"assertion", ASSERTION, UNRESERVED_KEYWORD},
- 	{"assignment", ASSIGNMENT, UNRESERVED_KEYWORD},
- 	{"asymmetric", ASYMMETRIC, RESERVED_KEYWORD},
- 	{"at", AT, UNRESERVED_KEYWORD},
- 	{"authorization", AUTHORIZATION, TYPE_FUNC_NAME_KEYWORD},
- 	{"backward", BACKWARD, UNRESERVED_KEYWORD},
- 	{"before", BEFORE, UNRESERVED_KEYWORD},
- 	{"begin", BEGIN_P, UNRESERVED_KEYWORD},
- 	{"between", BETWEEN, TYPE_FUNC_NAME_KEYWORD},
- 	{"bigint", BIGINT, COL_NAME_KEYWORD},
- 	{"binary", BINARY, TYPE_FUNC_NAME_KEYWORD},
- 	{"bit", BIT, COL_NAME_KEYWORD},
- 	{"boolean", BOOLEAN_P, COL_NAME_KEYWORD},
- 	{"both", BOTH, RESERVED_KEYWORD},
- 	{"by", BY, UNRESERVED_KEYWORD},
- 	{"cache", CACHE, UNRESERVED_KEYWORD},
- 	{"called", CALLED, UNRESERVED_KEYWORD},
- 	{"cascade", CASCADE, UNRESERVED_KEYWORD},
- 	{"cascaded", CASCADED, UNRESERVED_KEYWORD},
- 	{"case", CASE, RESERVED_KEYWORD},
- 	{"cast", CAST, RESERVED_KEYWORD},
- 	{"catalog", CATALOG_P, UNRESERVED_KEYWORD},
- 	{"chain", CHAIN, UNRESERVED_KEYWORD},
- 	{"char", CHAR_P, COL_NAME_KEYWORD},
- 	{"character", CHARACTER, COL_NAME_KEYWORD},
- 	{"characteristics", CHARACTERISTICS, UNRESERVED_KEYWORD},
- 	{"check", CHECK, RESERVED_KEYWORD},
- 	{"checkpoint", CHECKPOINT, UNRESERVED_KEYWORD},
- 	{"class", CLASS, UNRESERVED_KEYWORD},
- 	{"close", CLOSE, UNRESERVED_KEYWORD},
- 	{"cluster", CLUSTER, UNRESERVED_KEYWORD},
- 	{"coalesce", COALESCE, COL_NAME_KEYWORD},
- 	{"collate", COLLATE, RESERVED_KEYWORD},
- 	{"column", COLUMN, RESERVED_KEYWORD},
- 	{"comment", COMMENT, UNRESERVED_KEYWORD},
- 	{"commit", COMMIT, UNRESERVED_KEYWORD},
- 	{"committed", COMMITTED, UNRESERVED_KEYWORD},
- 	{"concurrently", CONCURRENTLY, UNRESERVED_KEYWORD},
- 	{"configuration", CONFIGURATION, UNRESERVED_KEYWORD},
- 	{"connection", CONNECTION, UNRESERVED_KEYWORD},
- 	{"constraint", CONSTRAINT, RESERVED_KEYWORD},
- 	{"constraints", CONSTRAINTS, UNRESERVED_KEYWORD},
- 	{"content", CONTENT_P, UNRESERVED_KEYWORD},
- 	{"continue", CONTINUE_P, UNRESERVED_KEYWORD},
- 	{"conversion", CONVERSION_P, UNRESERVED_KEYWORD},
- 	{"copy", COPY, UNRESERVED_KEYWORD},
- 	{"cost", COST, UNRESERVED_KEYWORD},
- 	{"create", CREATE, RESERVED_KEYWORD},
- 	{"createdb", CREATEDB, UNRESERVED_KEYWORD},
- 	{"createrole", CREATEROLE, UNRESERVED_KEYWORD},
- 	{"createuser", CREATEUSER, UNRESERVED_KEYWORD},
- 	{"cross", CROSS, TYPE_FUNC_NAME_KEYWORD},
- 	{"csv", CSV, UNRESERVED_KEYWORD},
- 	{"ctype", CTYPE, UNRESERVED_KEYWORD},
- 	{"current", CURRENT_P, UNRESERVED_KEYWORD},
- 	{"current_catalog", CURRENT_CATALOG, RESERVED_KEYWORD},
- 	{"current_date", CURRENT_DATE, RESERVED_KEYWORD},
- 	{"current_role", CURRENT_ROLE, RESERVED_KEYWORD},
- 	{"current_schema", CURRENT_SCHEMA, TYPE_FUNC_NAME_KEYWORD},
- 	{"current_time", CURRENT_TIME, RESERVED_KEYWORD},
- 	{"current_timestamp", CURRENT_TIMESTAMP, RESERVED_KEYWORD},
- 	{"current_user", CURRENT_USER, RESERVED_KEYWORD},
- 	{"cursor", CURSOR, UNRESERVED_KEYWORD},
- 	{"cycle", CYCLE, UNRESERVED_KEYWORD},
- 	{"data", DATA_P, UNRESERVED_KEYWORD},
- 	{"database", DATABASE, UNRESERVED_KEYWORD},
- 	{"day", DAY_P, UNRESERVED_KEYWORD},
- 	{"deallocate", DEALLOCATE, UNRESERVED_KEYWORD},
- 	{"dec", DEC, COL_NAME_KEYWORD},
- 	{"decimal", DECIMAL_P, COL_NAME_KEYWORD},
- 	{"declare", DECLARE, UNRESERVED_KEYWORD},
- 	{"default", DEFAULT, RESERVED_KEYWORD},
- 	{"defaults", DEFAULTS, UNRESERVED_KEYWORD},
- 	{"deferrable", DEFERRABLE, RESERVED_KEYWORD},
- 	{"deferred", DEFERRED, UNRESERVED_KEYWORD},
- 	{"definer", DEFINER, UNRESERVED_KEYWORD},
- 	{"delete", DELETE_P, UNRESERVED_KEYWORD},
- 	{"delimiter", DELIMITER, UNRESERVED_KEYWORD},
- 	{"delimiters", DELIMITERS, UNRESERVED_KEYWORD},
- 	{"desc", DESC, RESERVED_KEYWORD},
- 	{"dictionary", DICTIONARY, UNRESERVED_KEYWORD},
- 	{"disable", DISABLE_P, UNRESERVED_KEYWORD},
- 	{"discard", DISCARD, UNRESERVED_KEYWORD},
- 	{"distinct", DISTINCT, RESERVED_KEYWORD},
- 	{"do", DO, RESERVED_KEYWORD},
- 	{"document", DOCUMENT_P, UNRESERVED_KEYWORD},
- 	{"domain", DOMAIN_P, UNRESERVED_KEYWORD},
- 	{"double", DOUBLE_P, UNRESERVED_KEYWORD},
- 	{"drop", DROP, UNRESERVED_KEYWORD},
- 	{"each", EACH, UNRESERVED_KEYWORD},
- 	{"else", ELSE, RESERVED_KEYWORD},
- 	{"enable", ENABLE_P, UNRESERVED_KEYWORD},
- 	{"encoding", ENCODING, UNRESERVED_KEYWORD},
- 	{"encrypted", ENCRYPTED, UNRESERVED_KEYWORD},
- 	{"end", END_P, RESERVED_KEYWORD},
- 	{"enum", ENUM_P, UNRESERVED_KEYWORD},
- 	{"escape", ESCAPE, UNRESERVED_KEYWORD},
- 	{"except", EXCEPT, RESERVED_KEYWORD},
- 	{"excluding", EXCLUDING, UNRESERVED_KEYWORD},
- 	{"exclusive", EXCLUSIVE, UNRESERVED_KEYWORD},
- 	{"execute", EXECUTE, UNRESERVED_KEYWORD},
- 	{"exists", EXISTS, COL_NAME_KEYWORD},
- 	{"explain", EXPLAIN, UNRESERVED_KEYWORD},
- 	{"external", EXTERNAL, UNRESERVED_KEYWORD},
- 	{"extract", EXTRACT, COL_NAME_KEYWORD},
- 	{"false", FALSE_P, RESERVED_KEYWORD},
- 	{"family", FAMILY, UNRESERVED_KEYWORD},
- 	{"fetch", FETCH, RESERVED_KEYWORD},
- 	{"first", FIRST_P, UNRESERVED_KEYWORD},
- 	{"float", FLOAT_P, COL_NAME_KEYWORD},
- 	{"following", FOLLOWING, UNRESERVED_KEYWORD},
- 	{"for", FOR, RESERVED_KEYWORD},
- 	{"force", FORCE, UNRESERVED_KEYWORD},
- 	{"foreign", FOREIGN, RESERVED_KEYWORD},
- 	{"forward", FORWARD, UNRESERVED_KEYWORD},
- 	{"freeze", FREEZE, TYPE_FUNC_NAME_KEYWORD},
- 	{"from", FROM, RESERVED_KEYWORD},
- 	{"full", FULL, TYPE_FUNC_NAME_KEYWORD},
- 	{"function", FUNCTION, UNRESERVED_KEYWORD},
- 	{"global", GLOBAL, UNRESERVED_KEYWORD},
- 	{"grant", GRANT, RESERVED_KEYWORD},
- 	{"granted", GRANTED, UNRESERVED_KEYWORD},
- 	{"greatest", GREATEST, COL_NAME_KEYWORD},
- 	{"group", GROUP_P, RESERVED_KEYWORD},
- 	{"handler", HANDLER, UNRESERVED_KEYWORD},
- 	{"having", HAVING, RESERVED_KEYWORD},
- 	{"header", HEADER_P, UNRESERVED_KEYWORD},
- 	{"hold", HOLD, UNRESERVED_KEYWORD},
- 	{"hour", HOUR_P, UNRESERVED_KEYWORD},
- 	{"identity", IDENTITY_P, UNRESERVED_KEYWORD},
- 	{"if", IF_P, UNRESERVED_KEYWORD},
- 	{"ilike", ILIKE, TYPE_FUNC_NAME_KEYWORD},
- 	{"immediate", IMMEDIATE, UNRESERVED_KEYWORD},
- 	{"immutable", IMMUTABLE, UNRESERVED_KEYWORD},
- 	{"implicit", IMPLICIT_P, UNRESERVED_KEYWORD},
- 	{"in", IN_P, RESERVED_KEYWORD},
- 	{"including", INCLUDING, UNRESERVED_KEYWORD},
- 	{"increment", INCREMENT, UNRESERVED_KEYWORD},
- 	{"index", INDEX, UNRESERVED_KEYWORD},
- 	{"indexes", INDEXES, UNRESERVED_KEYWORD},
- 	{"inherit", INHERIT, UNRESERVED_KEYWORD},
- 	{"inherits", INHERITS, UNRESERVED_KEYWORD},
- 	{"initially", INITIALLY, RESERVED_KEYWORD},
- 	{"inner", INNER_P, TYPE_FUNC_NAME_KEYWORD},
- 	{"inout", INOUT, COL_NAME_KEYWORD},
- 	{"input", INPUT_P, UNRESERVED_KEYWORD},
- 	{"insensitive", INSENSITIVE, UNRESERVED_KEYWORD},
- 	{"insert", INSERT, UNRESERVED_KEYWORD},
- 	{"instead", INSTEAD, UNRESERVED_KEYWORD},
- 	{"int", INT_P, COL_NAME_KEYWORD},
- 	{"integer", INTEGER, COL_NAME_KEYWORD},
- 	{"intersect", INTERSECT, RESERVED_KEYWORD},
- 	{"interval", INTERVAL, COL_NAME_KEYWORD},
- 	{"into", INTO, RESERVED_KEYWORD},
- 	{"invoker", INVOKER, UNRESERVED_KEYWORD},
- 	{"is", IS, TYPE_FUNC_NAME_KEYWORD},
- 	{"isnull", ISNULL, TYPE_FUNC_NAME_KEYWORD},
- 	{"isolation", ISOLATION, UNRESERVED_KEYWORD},
- 	{"join", JOIN, TYPE_FUNC_NAME_KEYWORD},
- 	{"key", KEY, UNRESERVED_KEYWORD},
- 	{"lancompiler", LANCOMPILER, UNRESERVED_KEYWORD},
- 	{"language", LANGUAGE, UNRESERVED_KEYWORD},
- 	{"large", LARGE_P, UNRESERVED_KEYWORD},
- 	{"last", LAST_P, UNRESERVED_KEYWORD},
- 	{"leading", LEADING, RESERVED_KEYWORD},
- 	{"least", LEAST, COL_NAME_KEYWORD},
- 	{"left", LEFT, TYPE_FUNC_NAME_KEYWORD},
- 	{"level", LEVEL, UNRESERVED_KEYWORD},
- 	{"like", LIKE, TYPE_FUNC_NAME_KEYWORD},
- 	{"limit", LIMIT, RESERVED_KEYWORD},
- 	{"listen", LISTEN, UNRESERVED_KEYWORD},
- 	{"load", LOAD, UNRESERVED_KEYWORD},
- 	{"local", LOCAL, UNRESERVED_KEYWORD},
- 	{"localtime", LOCALTIME, RESERVED_KEYWORD},
- 	{"localtimestamp", LOCALTIMESTAMP, RESERVED_KEYWORD},
- 	{"location", LOCATION, UNRESERVED_KEYWORD},
- 	{"lock", LOCK_P, UNRESERVED_KEYWORD},
- 	{"login", LOGIN_P, UNRESERVED_KEYWORD},
- 	{"mapping", MAPPING, UNRESERVED_KEYWORD},
- 	{"match", MATCH, UNRESERVED_KEYWORD},
- 	{"maxvalue", MAXVALUE, UNRESERVED_KEYWORD},
- 	{"minute", MINUTE_P, UNRESERVED_KEYWORD},
- 	{"minvalue", MINVALUE, UNRESERVED_KEYWORD},
- 	{"mode", MODE, UNRESERVED_KEYWORD},
- 	{"month", MONTH_P, UNRESERVED_KEYWORD},
- 	{"move", MOVE, UNRESERVED_KEYWORD},
- 	{"name", NAME_P, UNRESERVED_KEYWORD},
- 	{"names", NAMES, UNRESERVED_KEYWORD},
- 	{"national", NATIONAL, COL_NAME_KEYWORD},
- 	{"natural", NATURAL, TYPE_FUNC_NAME_KEYWORD},
- 	{"nchar", NCHAR, COL_NAME_KEYWORD},
- 	{"new", NEW, RESERVED_KEYWORD},
- 	{"next", NEXT, UNRESERVED_KEYWORD},
- 	{"no", NO, UNRESERVED_KEYWORD},
- 	{"nocreatedb", NOCREATEDB, UNRESERVED_KEYWORD},
- 	{"nocreaterole", NOCREATEROLE, UNRESERVED_KEYWORD},
- 	{"nocreateuser", NOCREATEUSER, UNRESERVED_KEYWORD},
- 	{"noinherit", NOINHERIT, UNRESERVED_KEYWORD},
- 	{"nologin", NOLOGIN_P, UNRESERVED_KEYWORD},
- 	{"none", NONE, COL_NAME_KEYWORD},
- 	{"nosuperuser", NOSUPERUSER, UNRESERVED_KEYWORD},
- 	{"not", NOT, RESERVED_KEYWORD},
- 	{"nothing", NOTHING, UNRESERVED_KEYWORD},
- 	{"notify", NOTIFY, UNRESERVED_KEYWORD},
- 	{"notnull", NOTNULL, TYPE_FUNC_NAME_KEYWORD},
- 	{"nowait", NOWAIT, UNRESERVED_KEYWORD},
- 	{"null", NULL_P, RESERVED_KEYWORD},
- 	{"nullif", NULLIF, COL_NAME_KEYWORD},
- 	{"nulls", NULLS_P, UNRESERVED_KEYWORD},
- 	{"numeric", NUMERIC, COL_NAME_KEYWORD},
- 	{"object", OBJECT_P, UNRESERVED_KEYWORD},
- 	{"of", OF, UNRESERVED_KEYWORD},
- 	{"off", OFF, RESERVED_KEYWORD},
- 	{"offset", OFFSET, RESERVED_KEYWORD},
- 	{"oids", OIDS, UNRESERVED_KEYWORD},
- 	{"old", OLD, RESERVED_KEYWORD},
- 	{"on", ON, RESERVED_KEYWORD},
- 	{"only", ONLY, RESERVED_KEYWORD},
- 	{"operator", OPERATOR, UNRESERVED_KEYWORD},
- 	{"option", OPTION, UNRESERVED_KEYWORD},
- 	{"options", OPTIONS, UNRESERVED_KEYWORD},
- 	{"or", OR, RESERVED_KEYWORD},
- 	{"order", ORDER, RESERVED_KEYWORD},
- 	{"out", OUT_P, COL_NAME_KEYWORD},
- 	{"outer", OUTER_P, TYPE_FUNC_NAME_KEYWORD},
- 	{"over", OVER, TYPE_FUNC_NAME_KEYWORD},
- 	{"overlaps", OVERLAPS, TYPE_FUNC_NAME_KEYWORD},
- 	{"overlay", OVERLAY, COL_NAME_KEYWORD},
- 	{"owned", OWNED, UNRESERVED_KEYWORD},
- 	{"owner", OWNER, UNRESERVED_KEYWORD},
- 	{"parser", PARSER, UNRESERVED_KEYWORD},
- 	{"partial", PARTIAL, UNRESERVED_KEYWORD},
- 	{"partition", PARTITION, UNRESERVED_KEYWORD},
- 	{"password", PASSWORD, UNRESERVED_KEYWORD},
- 	{"placing", PLACING, RESERVED_KEYWORD},
- 	{"plans", PLANS, UNRESERVED_KEYWORD},
- 	{"position", POSITION, COL_NAME_KEYWORD},
- 	{"preceding", PRECEDING, UNRESERVED_KEYWORD},
- 	{"precision", PRECISION, COL_NAME_KEYWORD},
- 	{"prepare", PREPARE, UNRESERVED_KEYWORD},
- 	{"prepared", PREPARED, UNRESERVED_KEYWORD},
- 	{"preserve", PRESERVE, UNRESERVED_KEYWORD},
- 	{"primary", PRIMARY, RESERVED_KEYWORD},
- 	{"prior", PRIOR, UNRESERVED_KEYWORD},
- 	{"privileges", PRIVILEGES, UNRESERVED_KEYWORD},
- 	{"procedural", PROCEDURAL, UNRESERVED_KEYWORD},
- 	{"procedure", PROCEDURE, UNRESERVED_KEYWORD},
- 	{"quote", QUOTE, UNRESERVED_KEYWORD},
- 	{"range", RANGE, UNRESERVED_KEYWORD},
- 	{"read", READ, UNRESERVED_KEYWORD},
- 	{"real", REAL, COL_NAME_KEYWORD},
- 	{"reassign", REASSIGN, UNRESERVED_KEYWORD},
- 	{"recheck", RECHECK, UNRESERVED_KEYWORD},
- 	{"recursive", RECURSIVE, UNRESERVED_KEYWORD},
- 	{"references", REFERENCES, RESERVED_KEYWORD},
- 	{"reindex", REINDEX, UNRESERVED_KEYWORD},
- 	{"relative", RELATIVE_P, UNRESERVED_KEYWORD},
- 	{"release", RELEASE, UNRESERVED_KEYWORD},
- 	{"rename", RENAME, UNRESERVED_KEYWORD},
- 	{"repeatable", REPEATABLE, UNRESERVED_KEYWORD},
- 	{"replace", REPLACE, UNRESERVED_KEYWORD},
- 	{"replica", REPLICA, UNRESERVED_KEYWORD},
- 	{"reset", RESET, UNRESERVED_KEYWORD},
- 	{"restart", RESTART, UNRESERVED_KEYWORD},
- 	{"restrict", RESTRICT, UNRESERVED_KEYWORD},
- 	{"returning", RETURNING, RESERVED_KEYWORD},
- 	{"returns", RETURNS, UNRESERVED_KEYWORD},
- 	{"revoke", REVOKE, UNRESERVED_KEYWORD},
- 	{"right", RIGHT, TYPE_FUNC_NAME_KEYWORD},
- 	{"role", ROLE, UNRESERVED_KEYWORD},
- 	{"rollback", ROLLBACK, UNRESERVED_KEYWORD},
- 	{"row", ROW, COL_NAME_KEYWORD},
- 	{"rows", ROWS, UNRESERVED_KEYWORD},
- 	{"rule", RULE, UNRESERVED_KEYWORD},
- 	{"savepoint", SAVEPOINT, UNRESERVED_KEYWORD},
- 	{"schema", SCHEMA, UNRESERVED_KEYWORD},
- 	{"scroll", SCROLL, UNRESERVED_KEYWORD},
- 	{"search", SEARCH, UNRESERVED_KEYWORD},
- 	{"second", SECOND_P, UNRESERVED_KEYWORD},
- 	{"security", SECURITY, UNRESERVED_KEYWORD},
- 	{"select", SELECT, RESERVED_KEYWORD},
- 	{"sequence", SEQUENCE, UNRESERVED_KEYWORD},
- 	{"serializable", SERIALIZABLE, UNRESERVED_KEYWORD},
- 	{"server", SERVER, UNRESERVED_KEYWORD},
- 	{"session", SESSION, UNRESERVED_KEYWORD},
- 	{"session_user", SESSION_USER, RESERVED_KEYWORD},
- 	{"set", SET, UNRESERVED_KEYWORD},
- 	{"setof", SETOF, COL_NAME_KEYWORD},
- 	{"share", SHARE, UNRESERVED_KEYWORD},
- 	{"show", SHOW, UNRESERVED_KEYWORD},
- 	{"similar", SIMILAR, TYPE_FUNC_NAME_KEYWORD},
- 	{"simple", SIMPLE, UNRESERVED_KEYWORD},
- 	{"smallint", SMALLINT, COL_NAME_KEYWORD},
- 	{"some", SOME, RESERVED_KEYWORD},
- 	{"stable", STABLE, UNRESERVED_KEYWORD},
- 	{"standalone", STANDALONE_P, UNRESERVED_KEYWORD},
- 	{"start", START, UNRESERVED_KEYWORD},
- 	{"statement", STATEMENT, UNRESERVED_KEYWORD},
- 	{"statistics", STATISTICS, UNRESERVED_KEYWORD},
- 	{"stdin", STDIN, UNRESERVED_KEYWORD},
- 	{"stdout", STDOUT, UNRESERVED_KEYWORD},
- 	{"storage", STORAGE, UNRESERVED_KEYWORD},
- 	{"strict", STRICT_P, UNRESERVED_KEYWORD},
- 	{"strip", STRIP_P, UNRESERVED_KEYWORD},
- 	{"substring", SUBSTRING, COL_NAME_KEYWORD},
- 	{"superuser", SUPERUSER_P, UNRESERVED_KEYWORD},
- 	{"symmetric", SYMMETRIC, RESERVED_KEYWORD},
- 	{"sysid", SYSID, UNRESERVED_KEYWORD},
- 	{"system", SYSTEM_P, UNRESERVED_KEYWORD},
- 	{"table", TABLE, RESERVED_KEYWORD},
- 	{"tablespace", TABLESPACE, UNRESERVED_KEYWORD},
- 	{"temp", TEMP, UNRESERVED_KEYWORD},
- 	{"template", TEMPLATE, UNRESERVED_KEYWORD},
- 	{"temporary", TEMPORARY, UNRESERVED_KEYWORD},
- 	{"text", TEXT_P, UNRESERVED_KEYWORD},
- 	{"then", THEN, RESERVED_KEYWORD},
- 	{"time", TIME, COL_NAME_KEYWORD},
- 	{"timestamp", TIMESTAMP, COL_NAME_KEYWORD},
- 	{"to", TO, RESERVED_KEYWORD},
- 	{"trailing", TRAILING, RESERVED_KEYWORD},
- 	{"transaction", TRANSACTION, UNRESERVED_KEYWORD},
- 	{"treat", TREAT, COL_NAME_KEYWORD},
- 	{"trigger", TRIGGER, UNRESERVED_KEYWORD},
- 	{"trim", TRIM, COL_NAME_KEYWORD},
- 	{"true", TRUE_P, RESERVED_KEYWORD},
- 	{"truncate", TRUNCATE, UNRESERVED_KEYWORD},
- 	{"trusted", TRUSTED, UNRESERVED_KEYWORD},
- 	{"type", TYPE_P, UNRESERVED_KEYWORD},
- 	{"unbounded", UNBOUNDED, UNRESERVED_KEYWORD},
- 	{"uncommitted", UNCOMMITTED, UNRESERVED_KEYWORD},
- 	{"unencrypted", UNENCRYPTED, UNRESERVED_KEYWORD},
- 	{"union", UNION, RESERVED_KEYWORD},
- 	{"unique", UNIQUE, RESERVED_KEYWORD},
- 	{"unknown", UNKNOWN, UNRESERVED_KEYWORD},
- 	{"unlisten", UNLISTEN, UNRESERVED_KEYWORD},
- 	{"until", UNTIL, UNRESERVED_KEYWORD},
- 	{"update", UPDATE, UNRESERVED_KEYWORD},
- 	{"user", USER, RESERVED_KEYWORD},
- 	{"using", USING, RESERVED_KEYWORD},
- 	{"vacuum", VACUUM, UNRESERVED_KEYWORD},
- 	{"valid", VALID, UNRESERVED_KEYWORD},
- 	{"validator", VALIDATOR, UNRESERVED_KEYWORD},
- 	{"value", VALUE_P, UNRESERVED_KEYWORD},
- 	{"values", VALUES, COL_NAME_KEYWORD},
- 	{"varchar", VARCHAR, COL_NAME_KEYWORD},
- 	{"variadic", VARIADIC, RESERVED_KEYWORD},
- 	{"varying", VARYING, UNRESERVED_KEYWORD},
- 	{"verbose", VERBOSE, TYPE_FUNC_NAME_KEYWORD},
- 	{"version", VERSION_P, UNRESERVED_KEYWORD},
- 	{"view", VIEW, UNRESERVED_KEYWORD},
- 	{"volatile", VOLATILE, UNRESERVED_KEYWORD},
- 	{"when", WHEN, RESERVED_KEYWORD},
- 	{"where", WHERE, RESERVED_KEYWORD},
- 	{"whitespace", WHITESPACE_P, UNRESERVED_KEYWORD},
- 	{"window", WINDOW, RESERVED_KEYWORD},
- 	{"with", WITH, RESERVED_KEYWORD},
- 	{"without", WITHOUT, UNRESERVED_KEYWORD},
- 	{"work", WORK, UNRESERVED_KEYWORD},
- 	{"wrapper", WRAPPER, UNRESERVED_KEYWORD},
- 	{"write", WRITE, UNRESERVED_KEYWORD},
- 	{"xml", XML_P, UNRESERVED_KEYWORD},
- 	{"xmlattributes", XMLATTRIBUTES, COL_NAME_KEYWORD},
- 	{"xmlconcat", XMLCONCAT, COL_NAME_KEYWORD},
- 	{"xmlelement", XMLELEMENT, COL_NAME_KEYWORD},
- 	{"xmlforest", XMLFOREST, COL_NAME_KEYWORD},
- 	{"xmlparse", XMLPARSE, COL_NAME_KEYWORD},
- 	{"xmlpi", XMLPI, COL_NAME_KEYWORD},
- 	{"xmlroot", XMLROOT, COL_NAME_KEYWORD},
- 	{"xmlserialize", XMLSERIALIZE, COL_NAME_KEYWORD},
- 	{"year", YEAR_P, UNRESERVED_KEYWORD},
- 	{"yes", YES_P, UNRESERVED_KEYWORD},
- 	{"zone", ZONE, UNRESERVED_KEYWORD},
- };
- 
- /* End of ScanKeywords, for use elsewhere */
- const ScanKeyword *LastScanKeyword = endof(ScanKeywords);
- 
- /*
-  * ScanKeywordLookup - see if a given word is a keyword
-  *
-  * Returns a pointer to the ScanKeyword table entry, or NULL if no match.
-  *
-  * The match is done case-insensitively.  Note that we deliberately use a
-  * dumbed-down case conversion that will only translate 'A'-'Z' into 'a'-'z',
-  * even if we are in a locale where tolower() would produce more or different
-  * translations.  This is to conform to the SQL99 spec, which says that
-  * keywords are to be matched in this way even though non-keyword identifiers
-  * receive a different case-normalization mapping.
-  */
- const ScanKeyword *
- ScanKeywordLookup(const char *text)
- {
- 	int			len,
- 				i;
- 	char		word[NAMEDATALEN];
- 	const ScanKeyword *low;
- 	const ScanKeyword *high;
- 
- 	len = strlen(text);
- 	/* We assume all keywords are shorter than NAMEDATALEN. */
- 	if (len >= NAMEDATALEN)
- 		return NULL;
- 
- 	/*
- 	 * Apply an ASCII-only downcasing.	We must not use tolower() since it may
- 	 * produce the wrong translation in some locales (eg, Turkish).
- 	 */
- 	for (i = 0; i < len; i++)
- 	{
- 		char		ch = text[i];
- 
- 		if (ch >= 'A' && ch <= 'Z')
- 			ch += 'a' - 'A';
- 		word[i] = ch;
- 	}
- 	word[len] = '\0';
- 
- 	/*
- 	 * Now do a binary search using plain strcmp() comparison.
- 	 */
- 	low = &ScanKeywords[0];
- 	high = endof(ScanKeywords) - 1;
- 	while (low <= high)
- 	{
- 		const ScanKeyword *middle;
- 		int			difference;
  
! 		middle = low + (high - low) / 2;
! 		difference = strcmp(middle->name, word);
! 		if (difference == 0)
! 			return middle;
! 		else if (difference < 0)
! 			low = middle + 1;
! 		else
! 			high = middle - 1;
! 	}
  
! 	return NULL;
! }
--- 13,25 ----
   *
   *-------------------------------------------------------------------------
   */
+ #include "postgres.h"
  
! #include "nodes/nodes.h"
! #include "nodes/parsenodes.h"
  #include "parser/keywords.h"
  #include "parser/gram.h"
  
! #define PG_KEYWORD(a,b,c) {a,b,c}
  
! #include "parser/kwlist.h"
Index: src/backend/parser/kwlookup.c
===================================================================
RCS file: src/backend/parser/kwlookup.c
diff -N src/backend/parser/kwlookup.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- src/backend/parser/kwlookup.c	4 Mar 2009 15:42:33 -0000
***************
*** 0 ****
--- 1,86 ----
+ /*-------------------------------------------------------------------------
+  *
+  * kwlookup.c
+  *	  lexical token lookup for key words in PostgreSQL
+  *
+  * NB - this file is used by pg_dump and ECPG
+  *
+  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
+  * Portions Copyright (c) 1994, Regents of the University of California
+  *
+  *
+  * IDENTIFICATION
+  *	  $PostgreSQL$
+  *
+  *-------------------------------------------------------------------------
+  */
+ 
+ /* use c.h so this can be built as either frontend or backend */
+ #include "c.h"
+ 
+ #include <ctype.h>
+ 
+ #include "parser/keywords.h"
+ 
+ /*
+  * ScanKeywordLookup - see if a given word is a keyword
+  *
+  * Returns a pointer to the ScanKeyword table entry, or NULL if no match.
+  *
+  * The match is done case-insensitively.  Note that we deliberately use a
+  * dumbed-down case conversion that will only translate 'A'-'Z' into 'a'-'z',
+  * even if we are in a locale where tolower() would produce more or different
+  * translations.  This is to conform to the SQL99 spec, which says that
+  * keywords are to be matched in this way even though non-keyword identifiers
+  * receive a different case-normalization mapping.
+  */
+ const ScanKeyword *
+ ScanKeywordLookup(const char *text)
+ {
+ 	int			len,
+ 				i;
+ 	char		word[NAMEDATALEN];
+ 	const ScanKeyword *low;
+ 	const ScanKeyword *high;
+ 
+ 	len = strlen(text);
+ 	/* We assume all keywords are shorter than NAMEDATALEN. */
+ 	if (len >= NAMEDATALEN)
+ 		return NULL;
+ 
+ 	/*
+ 	 * Apply an ASCII-only downcasing.	We must not use tolower() since it may
+ 	 * produce the wrong translation in some locales (eg, Turkish).
+ 	 */
+ 	for (i = 0; i < len; i++)
+ 	{
+ 		char		ch = text[i];
+ 
+ 		if (ch >= 'A' && ch <= 'Z')
+ 			ch += 'a' - 'A';
+ 		word[i] = ch;
+ 	}
+ 	word[len] = '\0';
+ 
+ 	/*
+ 	 * Now do a binary search using plain strcmp() comparison.
+ 	 */
+ 	low = &ScanKeywords[0];
+ 	high = LastScanKeyword - 1;
+ 	while (low <= high)
+ 	{
+ 		const ScanKeyword *middle;
+ 		int			difference;
+ 
+ 		middle = low + (high - low) / 2;
+ 		difference = strcmp(middle->name, word);
+ 		if (difference == 0)
+ 			return middle;
+ 		else if (difference < 0)
+ 			low = middle + 1;
+ 		else
+ 			high = middle - 1;
+ 	}
+ 
+ 	return NULL;
+ }
Index: src/bin/pg_dump/Makefile
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/bin/pg_dump/Makefile,v
retrieving revision 1.66
diff -c -p -r1.66 Makefile
*** src/bin/pg_dump/Makefile	1 Jan 2009 17:23:54 -0000	1.66
--- src/bin/pg_dump/Makefile	4 Mar 2009 15:25:11 -0000
*************** OBJS=	pg_backup_archiver.o pg_backup_db.
*** 20,42 ****
  	pg_backup_files.o pg_backup_null.o pg_backup_tar.o \
  	dumputils.o $(WIN32RES)
  
! EXTRA_OBJS = $(top_builddir)/src/backend/parser/keywords.o
  
! all: submake-libpq submake-libpgport submake-backend pg_dump pg_restore pg_dumpall
  
  pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) $(libpq_builddir)/libpq.a 
! 	$(CC) $(CFLAGS) pg_dump.o common.o pg_dump_sort.o $(OBJS) $(EXTRA_OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $...@$(X)
  
  pg_restore: pg_restore.o $(OBJS) $(libpq_builddir)/libpq.a
! 	$(CC) $(CFLAGS) pg_restore.o $(OBJS) $(EXTRA_OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $...@$(X)
  
  pg_dumpall: pg_dumpall.o dumputils.o $(libpq_builddir)/libpq.a
! 	$(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(EXTRA_OBJS) $(WIN32RES) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $...@$(X)
! 
! .PHONY: submake-backend
! submake-backend:
! 	$(MAKE) -C $(top_builddir)/src/backend/parser keywords.o
! 
  
  install: all installdirs
  	$(INSTALL_PROGRAM) pg_dump$(X) '$(DESTDIR)$(bindir)'/pg_dump$(X)
--- 20,40 ----
  	pg_backup_files.o pg_backup_null.o pg_backup_tar.o \
  	dumputils.o $(WIN32RES)
  
! KEYWRDOBJS = keywords.o kwlookup.o
  
! kwlookup.c: % : $(top_srcdir)/src/backend/parser/%
! 	rm -f $@ && $(LN_S) $< .
! 
! all: submake-libpq submake-libpgport pg_dump pg_restore pg_dumpall
  
  pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) $(libpq_builddir)/libpq.a 
! 	$(CC) $(CFLAGS) pg_dump.o common.o pg_dump_sort.o $(KEYWRDOBJS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $...@$(X)
  
  pg_restore: pg_restore.o $(OBJS) $(libpq_builddir)/libpq.a
! 	$(CC) $(CFLAGS) pg_restore.o $(KEYWRDOBJS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $...@$(X)
  
  pg_dumpall: pg_dumpall.o dumputils.o $(libpq_builddir)/libpq.a
! 	$(CC) $(CFLAGS) pg_dumpall.o dumputils.o $(KEYWRDOBJS) $(WIN32RES) $(libpq_pgport) $(LDFLAGS) $(LIBS) -o $...@$(X)
  
  install: all installdirs
  	$(INSTALL_PROGRAM) pg_dump$(X) '$(DESTDIR)$(bindir)'/pg_dump$(X)
*************** uninstall:
*** 50,53 ****
  	rm -f $(addprefix '$(DESTDIR)$(bindir)'/, pg_dump$(X) pg_restore$(X) pg_dumpall$(X))
  
  clean distclean maintainer-clean:
! 	rm -f pg_dump$(X) pg_restore$(X) pg_dumpall$(X) $(OBJS) pg_dump.o common.o pg_dump_sort.o pg_restore.o pg_dumpall.o
--- 48,51 ----
  	rm -f $(addprefix '$(DESTDIR)$(bindir)'/, pg_dump$(X) pg_restore$(X) pg_dumpall$(X))
  
  clean distclean maintainer-clean:
! 	rm -f pg_dump$(X) pg_restore$(X) pg_dumpall$(X) $(OBJS) pg_dump.o common.o pg_dump_sort.o pg_restore.o pg_dumpall.o kwlookup.c $(KEYWRDOBJS)
Index: src/bin/pg_dump/keywords.c
===================================================================
RCS file: src/bin/pg_dump/keywords.c
diff -N src/bin/pg_dump/keywords.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- src/bin/pg_dump/keywords.c	4 Mar 2009 16:08:22 -0000
***************
*** 0 ****
--- 1,34 ----
+ /*-------------------------------------------------------------------------
+  *
+  * keywords.c
+  *	  lexical token lookup for key words in PostgreSQL
+  *
+  *
+  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
+  * Portions Copyright (c) 1994, Regents of the University of California
+  *
+  *
+  * IDENTIFICATION
+  *	  $PostgreSQL$
+  *
+  *-------------------------------------------------------------------------
+  */
+ #include "postgres_fe.h"
+ 
+ /*
+  * This macro definition overrides the YYSTYPE union definition in gram.h.
+  * We don't need that struct in this file, and including the real definition
+  * would require sucking in some backend-only include files.
+  */
+ #define YYSTYPE int
+ 
+ #include "parser/keywords.h"
+ 
+ /*
+  * We don't need the token number, so leave it out to avoid requiring extra 
+  * object files from the backend.
+  */
+ #define PG_KEYWORD(a,b,c) {a,c}
+ #define TWO_MEMBER_SCANKEYWORD
+ 
+ #include "parser/kwlist.h"
Index: src/include/parser/keywords.h
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/include/parser/keywords.h,v
retrieving revision 1.26
diff -c -p -r1.26 keywords.h
*** src/include/parser/keywords.h	1 Jan 2009 17:24:00 -0000	1.26
--- src/include/parser/keywords.h	4 Mar 2009 15:58:10 -0000
***************
*** 24,30 ****
--- 24,32 ----
  typedef struct ScanKeyword
  {
  	const char *name;			/* in lower case */
+ #ifndef TWO_MEMBER_SCANKEYWORD
  	int16		value;			/* grammar's token code */
+ #endif
  	int16		category;		/* see codes above */
  } ScanKeyword;
  
Index: src/include/parser/kwlist.h
===================================================================
RCS file: src/include/parser/kwlist.h
diff -N src/include/parser/kwlist.h
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- src/include/parser/kwlist.h	4 Mar 2009 15:55:55 -0000
***************
*** 0 ****
--- 1,426 ----
+ /*-------------------------------------------------------------------------
+  *
+  * kwlist.h
+  *	  keyword list definitions for PostgreSQL
+  *
+  *
+  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
+  * Portions Copyright (c) 1994, Regents of the University of California
+  *
+  *
+  * IDENTIFICATION
+  *	  $PostgreSQL$
+  *
+  *-------------------------------------------------------------------------
+  */
+ #ifndef KWLIST_H
+ #define KWLIST_H
+ 
+ #include "parser/keywords.h"
+ 
+ 
+ /*
+  * List of keyword (name, token-value, category) entries.
+  *
+  * !!WARNING!!: This list must be sorted by ASCII name, because binary
+  *		 search is used to locate entries.
+  */
+ const ScanKeyword ScanKeywords[] = {
+ 	/* name, value, category */
+ 	PG_KEYWORD("abort", ABORT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("absolute", ABSOLUTE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("access", ACCESS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("action", ACTION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("add", ADD_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("admin", ADMIN, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("after", AFTER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("aggregate", AGGREGATE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("all", ALL, RESERVED_KEYWORD),
+ 	PG_KEYWORD("also", ALSO, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("alter", ALTER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("always", ALWAYS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("analyse", ANALYSE, RESERVED_KEYWORD),		/* British spelling */
+ 	PG_KEYWORD("analyze", ANALYZE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("and", AND, RESERVED_KEYWORD),
+ 	PG_KEYWORD("any", ANY, RESERVED_KEYWORD),
+ 	PG_KEYWORD("array", ARRAY, RESERVED_KEYWORD),
+ 	PG_KEYWORD("as", AS, RESERVED_KEYWORD),
+ 	PG_KEYWORD("asc", ASC, RESERVED_KEYWORD),
+ 	PG_KEYWORD("assertion", ASSERTION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("assignment", ASSIGNMENT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("asymmetric", ASYMMETRIC, RESERVED_KEYWORD),
+ 	PG_KEYWORD("at", AT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("authorization", AUTHORIZATION, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("backward", BACKWARD, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("before", BEFORE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("begin", BEGIN_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("between", BETWEEN, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("bigint", BIGINT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("binary", BINARY, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("bit", BIT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("boolean", BOOLEAN_P, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("both", BOTH, RESERVED_KEYWORD),
+ 	PG_KEYWORD("by", BY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("cache", CACHE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("called", CALLED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("cascade", CASCADE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("cascaded", CASCADED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("case", CASE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("cast", CAST, RESERVED_KEYWORD),
+ 	PG_KEYWORD("catalog", CATALOG_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("chain", CHAIN, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("char", CHAR_P, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("character", CHARACTER, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("characteristics", CHARACTERISTICS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("check", CHECK, RESERVED_KEYWORD),
+ 	PG_KEYWORD("checkpoint", CHECKPOINT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("class", CLASS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("close", CLOSE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("cluster", CLUSTER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("coalesce", COALESCE, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("collate", COLLATE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("column", COLUMN, RESERVED_KEYWORD),
+ 	PG_KEYWORD("comment", COMMENT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("commit", COMMIT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("committed", COMMITTED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("concurrently", CONCURRENTLY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("configuration", CONFIGURATION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("connection", CONNECTION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("constraint", CONSTRAINT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("constraints", CONSTRAINTS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("content", CONTENT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("continue", CONTINUE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("conversion", CONVERSION_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("copy", COPY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("cost", COST, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("create", CREATE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("createdb", CREATEDB, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("createrole", CREATEROLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("createuser", CREATEUSER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("cross", CROSS, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("csv", CSV, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("ctype", CTYPE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("current", CURRENT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("current_catalog", CURRENT_CATALOG, RESERVED_KEYWORD),
+ 	PG_KEYWORD("current_date", CURRENT_DATE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("current_role", CURRENT_ROLE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("current_schema", CURRENT_SCHEMA, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("current_time", CURRENT_TIME, RESERVED_KEYWORD),
+ 	PG_KEYWORD("current_timestamp", CURRENT_TIMESTAMP, RESERVED_KEYWORD),
+ 	PG_KEYWORD("current_user", CURRENT_USER, RESERVED_KEYWORD),
+ 	PG_KEYWORD("cursor", CURSOR, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("cycle", CYCLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("data", DATA_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("database", DATABASE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("day", DAY_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("deallocate", DEALLOCATE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("dec", DEC, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("decimal", DECIMAL_P, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("declare", DECLARE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("default", DEFAULT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("defaults", DEFAULTS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("deferrable", DEFERRABLE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("deferred", DEFERRED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("definer", DEFINER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("delete", DELETE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("delimiter", DELIMITER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("delimiters", DELIMITERS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("desc", DESC, RESERVED_KEYWORD),
+ 	PG_KEYWORD("dictionary", DICTIONARY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("disable", DISABLE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("discard", DISCARD, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("distinct", DISTINCT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("do", DO, RESERVED_KEYWORD),
+ 	PG_KEYWORD("document", DOCUMENT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("domain", DOMAIN_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("double", DOUBLE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("drop", DROP, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("each", EACH, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("else", ELSE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("enable", ENABLE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("encoding", ENCODING, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("encrypted", ENCRYPTED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("end", END_P, RESERVED_KEYWORD),
+ 	PG_KEYWORD("enum", ENUM_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("escape", ESCAPE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("except", EXCEPT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("excluding", EXCLUDING, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("exclusive", EXCLUSIVE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("execute", EXECUTE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("exists", EXISTS, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("explain", EXPLAIN, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("external", EXTERNAL, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("extract", EXTRACT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("false", FALSE_P, RESERVED_KEYWORD),
+ 	PG_KEYWORD("family", FAMILY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("fetch", FETCH, RESERVED_KEYWORD),
+ 	PG_KEYWORD("first", FIRST_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("float", FLOAT_P, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("following", FOLLOWING, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("for", FOR, RESERVED_KEYWORD),
+ 	PG_KEYWORD("force", FORCE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("foreign", FOREIGN, RESERVED_KEYWORD),
+ 	PG_KEYWORD("forward", FORWARD, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("freeze", FREEZE, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("from", FROM, RESERVED_KEYWORD),
+ 	PG_KEYWORD("full", FULL, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("function", FUNCTION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("global", GLOBAL, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("grant", GRANT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("granted", GRANTED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("greatest", GREATEST, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("group", GROUP_P, RESERVED_KEYWORD),
+ 	PG_KEYWORD("handler", HANDLER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("having", HAVING, RESERVED_KEYWORD),
+ 	PG_KEYWORD("header", HEADER_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("hold", HOLD, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("hour", HOUR_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("identity", IDENTITY_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("if", IF_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("ilike", ILIKE, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("immediate", IMMEDIATE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("immutable", IMMUTABLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("implicit", IMPLICIT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("in", IN_P, RESERVED_KEYWORD),
+ 	PG_KEYWORD("including", INCLUDING, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("increment", INCREMENT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("index", INDEX, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("indexes", INDEXES, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("inherit", INHERIT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("inherits", INHERITS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("initially", INITIALLY, RESERVED_KEYWORD),
+ 	PG_KEYWORD("inner", INNER_P, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("inout", INOUT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("input", INPUT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("insensitive", INSENSITIVE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("insert", INSERT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("instead", INSTEAD, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("int", INT_P, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("integer", INTEGER, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("intersect", INTERSECT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("interval", INTERVAL, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("into", INTO, RESERVED_KEYWORD),
+ 	PG_KEYWORD("invoker", INVOKER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("is", IS, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("isnull", ISNULL, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("isolation", ISOLATION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("join", JOIN, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("key", KEY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("lancompiler", LANCOMPILER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("language", LANGUAGE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("large", LARGE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("last", LAST_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("leading", LEADING, RESERVED_KEYWORD),
+ 	PG_KEYWORD("least", LEAST, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("left", LEFT, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("level", LEVEL, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("like", LIKE, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("limit", LIMIT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("listen", LISTEN, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("load", LOAD, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("local", LOCAL, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("localtime", LOCALTIME, RESERVED_KEYWORD),
+ 	PG_KEYWORD("localtimestamp", LOCALTIMESTAMP, RESERVED_KEYWORD),
+ 	PG_KEYWORD("location", LOCATION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("lock", LOCK_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("login", LOGIN_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("mapping", MAPPING, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("match", MATCH, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("maxvalue", MAXVALUE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("minute", MINUTE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("minvalue", MINVALUE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("mode", MODE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("month", MONTH_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("move", MOVE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("name", NAME_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("names", NAMES, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("national", NATIONAL, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("natural", NATURAL, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("nchar", NCHAR, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("new", NEW, RESERVED_KEYWORD),
+ 	PG_KEYWORD("next", NEXT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("no", NO, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("nocreatedb", NOCREATEDB, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("nocreaterole", NOCREATEROLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("nocreateuser", NOCREATEUSER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("noinherit", NOINHERIT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("nologin", NOLOGIN_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("none", NONE, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("nosuperuser", NOSUPERUSER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("not", NOT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("nothing", NOTHING, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("notify", NOTIFY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("notnull", NOTNULL, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("nowait", NOWAIT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("null", NULL_P, RESERVED_KEYWORD),
+ 	PG_KEYWORD("nullif", NULLIF, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("nulls", NULLS_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("numeric", NUMERIC, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("object", OBJECT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("of", OF, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("off", OFF, RESERVED_KEYWORD),
+ 	PG_KEYWORD("offset", OFFSET, RESERVED_KEYWORD),
+ 	PG_KEYWORD("oids", OIDS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("old", OLD, RESERVED_KEYWORD),
+ 	PG_KEYWORD("on", ON, RESERVED_KEYWORD),
+ 	PG_KEYWORD("only", ONLY, RESERVED_KEYWORD),
+ 	PG_KEYWORD("operator", OPERATOR, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("option", OPTION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("options", OPTIONS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("or", OR, RESERVED_KEYWORD),
+ 	PG_KEYWORD("order", ORDER, RESERVED_KEYWORD),
+ 	PG_KEYWORD("out", OUT_P, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("outer", OUTER_P, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("over", OVER, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("overlaps", OVERLAPS, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("overlay", OVERLAY, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("owned", OWNED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("owner", OWNER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("parser", PARSER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("partial", PARTIAL, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("partition", PARTITION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("password", PASSWORD, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("placing", PLACING, RESERVED_KEYWORD),
+ 	PG_KEYWORD("plans", PLANS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("position", POSITION, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("preceding", PRECEDING, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("precision", PRECISION, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("prepare", PREPARE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("prepared", PREPARED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("preserve", PRESERVE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("primary", PRIMARY, RESERVED_KEYWORD),
+ 	PG_KEYWORD("prior", PRIOR, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("privileges", PRIVILEGES, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("procedural", PROCEDURAL, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("procedure", PROCEDURE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("quote", QUOTE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("range", RANGE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("read", READ, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("real", REAL, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("reassign", REASSIGN, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("recheck", RECHECK, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("recursive", RECURSIVE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("references", REFERENCES, RESERVED_KEYWORD),
+ 	PG_KEYWORD("reindex", REINDEX, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("relative", RELATIVE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("release", RELEASE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("rename", RENAME, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("repeatable", REPEATABLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("replace", REPLACE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("replica", REPLICA, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("reset", RESET, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("restart", RESTART, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("restrict", RESTRICT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("returning", RETURNING, RESERVED_KEYWORD),
+ 	PG_KEYWORD("returns", RETURNS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("revoke", REVOKE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("right", RIGHT, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("role", ROLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("rollback", ROLLBACK, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("row", ROW, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("rows", ROWS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("rule", RULE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("savepoint", SAVEPOINT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("schema", SCHEMA, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("scroll", SCROLL, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("search", SEARCH, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("second", SECOND_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("security", SECURITY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("select", SELECT, RESERVED_KEYWORD),
+ 	PG_KEYWORD("sequence", SEQUENCE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("serializable", SERIALIZABLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("server", SERVER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("session", SESSION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("session_user", SESSION_USER, RESERVED_KEYWORD),
+ 	PG_KEYWORD("set", SET, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("setof", SETOF, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("share", SHARE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("show", SHOW, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("similar", SIMILAR, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("simple", SIMPLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("smallint", SMALLINT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("some", SOME, RESERVED_KEYWORD),
+ 	PG_KEYWORD("stable", STABLE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("standalone", STANDALONE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("start", START, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("statement", STATEMENT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("statistics", STATISTICS, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("stdin", STDIN, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("stdout", STDOUT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("storage", STORAGE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("strict", STRICT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("strip", STRIP_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("substring", SUBSTRING, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("superuser", SUPERUSER_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("symmetric", SYMMETRIC, RESERVED_KEYWORD),
+ 	PG_KEYWORD("sysid", SYSID, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("system", SYSTEM_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("table", TABLE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("tablespace", TABLESPACE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("temp", TEMP, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("template", TEMPLATE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("temporary", TEMPORARY, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("text", TEXT_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("then", THEN, RESERVED_KEYWORD),
+ 	PG_KEYWORD("time", TIME, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("timestamp", TIMESTAMP, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("to", TO, RESERVED_KEYWORD),
+ 	PG_KEYWORD("trailing", TRAILING, RESERVED_KEYWORD),
+ 	PG_KEYWORD("transaction", TRANSACTION, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("treat", TREAT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("trigger", TRIGGER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("trim", TRIM, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("true", TRUE_P, RESERVED_KEYWORD),
+ 	PG_KEYWORD("truncate", TRUNCATE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("trusted", TRUSTED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("type", TYPE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("unbounded", UNBOUNDED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("uncommitted", UNCOMMITTED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("unencrypted", UNENCRYPTED, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("union", UNION, RESERVED_KEYWORD),
+ 	PG_KEYWORD("unique", UNIQUE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("unknown", UNKNOWN, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("unlisten", UNLISTEN, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("until", UNTIL, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("update", UPDATE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("user", USER, RESERVED_KEYWORD),
+ 	PG_KEYWORD("using", USING, RESERVED_KEYWORD),
+ 	PG_KEYWORD("vacuum", VACUUM, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("valid", VALID, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("validator", VALIDATOR, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("value", VALUE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("values", VALUES, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("varchar", VARCHAR, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("variadic", VARIADIC, RESERVED_KEYWORD),
+ 	PG_KEYWORD("varying", VARYING, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("verbose", VERBOSE, TYPE_FUNC_NAME_KEYWORD),
+ 	PG_KEYWORD("version", VERSION_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("view", VIEW, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("volatile", VOLATILE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("when", WHEN, RESERVED_KEYWORD),
+ 	PG_KEYWORD("where", WHERE, RESERVED_KEYWORD),
+ 	PG_KEYWORD("whitespace", WHITESPACE_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("window", WINDOW, RESERVED_KEYWORD),
+ 	PG_KEYWORD("with", WITH, RESERVED_KEYWORD),
+ 	PG_KEYWORD("without", WITHOUT, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("work", WORK, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("wrapper", WRAPPER, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("write", WRITE, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("xml", XML_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("xmlattributes", XMLATTRIBUTES, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("xmlconcat", XMLCONCAT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("xmlelement", XMLELEMENT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("xmlforest", XMLFOREST, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("xmlparse", XMLPARSE, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("xmlpi", XMLPI, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("xmlroot", XMLROOT, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("xmlserialize", XMLSERIALIZE, COL_NAME_KEYWORD),
+ 	PG_KEYWORD("year", YEAR_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("yes", YES_P, UNRESERVED_KEYWORD),
+ 	PG_KEYWORD("zone", ZONE, UNRESERVED_KEYWORD),
+ };
+ 
+ /* End of ScanKeywords, for use elsewhere */
+ const ScanKeyword *LastScanKeyword = endof(ScanKeywords);
+ 
+ #endif /* KWLIST_H */
Index: src/interfaces/ecpg/preproc/Makefile
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/interfaces/ecpg/preproc/Makefile,v
retrieving revision 1.141
diff -c -p -r1.141 Makefile
*** src/interfaces/ecpg/preproc/Makefile	1 Jan 2009 17:24:02 -0000	1.141
--- src/interfaces/ecpg/preproc/Makefile	4 Mar 2009 15:46:40 -0000
*************** override CPPFLAGS := -I../include -I$(to
*** 25,31 ****
  override CFLAGS += $(PTHREAD_CFLAGS) -DECPG_COMPILE
  
  OBJS=	preproc.o type.o ecpg.o output.o parser.o \
! 	keywords.o c_keywords.o ecpg_keywords.o ../ecpglib/typename.o descriptor.o variable.o \
  	$(WIN32RES)
  
  all: submake-libpgport ecpg
--- 25,31 ----
  override CFLAGS += $(PTHREAD_CFLAGS) -DECPG_COMPILE
  
  OBJS=	preproc.o type.o ecpg.o output.o parser.o \
! 	keywords.o c_keywords.o ecpg_keywords.o kwlookup.o ../ecpglib/typename.o descriptor.o variable.o \
  	$(WIN32RES)
  
  all: submake-libpgport ecpg
*************** $(srcdir)/preproc.y: $(top_srcdir)/src/b
*** 57,64 ****
  
  ecpg_keywords.o c_keywords.o keywords.o preproc.o parser.o: preproc.h
  
! # instead of maintaining our own list, take the one from the backend
! keywords.c: % : $(top_srcdir)/src/backend/parser/%
  	rm -f $@ && $(LN_S) $< .
  
  distprep: $(srcdir)/preproc.y $(srcdir)/preproc.c $(srcdir)/preproc.h $(srcdir)/pgc.c
--- 57,63 ----
  
  ecpg_keywords.o c_keywords.o keywords.o preproc.o parser.o: preproc.h
  
! kwlookup.c: % : $(top_srcdir)/src/backend/parser/%
  	rm -f $@ && $(LN_S) $< .
  
  distprep: $(srcdir)/preproc.y $(srcdir)/preproc.c $(srcdir)/preproc.h $(srcdir)/pgc.c
*************** uninstall:
*** 73,79 ****
  	rm -f '$(DESTDIR)$(bindir)/ecpg$(X)'
  
  clean distclean:
! 	rm -f keywords.c *.o ecpg$(X)
  # garbage from development
  	@rm -f core a.out
  
--- 72,78 ----
  	rm -f '$(DESTDIR)$(bindir)/ecpg$(X)'
  
  clean distclean:
! 	rm -f kwlookup.c *.o ecpg$(X)
  # garbage from development
  	@rm -f core a.out
  
Index: src/interfaces/ecpg/preproc/keywords.c
===================================================================
RCS file: src/interfaces/ecpg/preproc/keywords.c
diff -N src/interfaces/ecpg/preproc/keywords.c
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- src/interfaces/ecpg/preproc/keywords.c	4 Mar 2009 16:01:36 -0000
***************
*** 0 ****
--- 1,30 ----
+ /*-------------------------------------------------------------------------
+  *
+  * keywords.c
+  *	  lexical token lookup for key words in PostgreSQL
+  *
+  *
+  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
+  * Portions Copyright (c) 1994, Regents of the University of California
+  *
+  *
+  * IDENTIFICATION
+  *	  $PostgreSQL: pgsql/src/backend/parser/keywords.c,v 1.210 2009-02-24 10:06:33 petere Exp $
+  *
+  *-------------------------------------------------------------------------
+  */
+ #include "postgres_fe.h"
+ 
+ /*
+  * This macro definition overrides the YYSTYPE union definition in gram.h.
+  * We don't need that struct in this file, and including the real definition
+  * would require sucking in some backend-only include files.
+  */
+ #define YYSTYPE int
+ 
+ #include "parser/keywords.h"
+ #include "preproc.h"
+ 
+ #define PG_KEYWORD(a,b,c) {a,b,c}
+ 
+ #include "parser/kwlist.h"
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to