]> granicus.if.org Git - postgresql/commitdiff
*** empty log message ***
authorMichael Meskes <meskes@postgresql.org>
Tue, 19 Sep 2000 11:47:16 +0000 (11:47 +0000)
committerMichael Meskes <meskes@postgresql.org>
Tue, 19 Sep 2000 11:47:16 +0000 (11:47 +0000)
16 files changed:
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/TODO
src/interfaces/ecpg/include/ecpgtype.h
src/interfaces/ecpg/lib/Makefile
src/interfaces/ecpg/lib/data.c
src/interfaces/ecpg/lib/descriptor.c
src/interfaces/ecpg/lib/execute.c
src/interfaces/ecpg/lib/typename.c
src/interfaces/ecpg/preproc/Makefile
src/interfaces/ecpg/preproc/descriptor.c
src/interfaces/ecpg/preproc/ecpg_keywords.c
src/interfaces/ecpg/preproc/keywords.c
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/preproc/type.c
src/interfaces/ecpg/preproc/variable.c

index 6f292eeb4c3558dd6213b7fb429b3074a5119b77..647f649438a6a54d10b7884f0dd2ae5fa4c2beb3 100644 (file)
@@ -925,3 +925,13 @@ Wed May 17 07:52:59 CEST 2000
          handling.
        - Set library version to 3.1.1.
 
+Mon Sep  4 14:10:38 PDT 2000
+
+       - Synced preproc.y with gram.y.  
+       - Synced keyword.c. 
+
+Mon Sep 18 13:55:11 PDT 2000
+
+       - Added int8 support based on a patch by Martijn Schoemaker <martijn@osp.nl>
+       - Set ecpg version to 2.8.0. 
+       - Set library version to 3.2.0.
index f75a7b364922fc20e7029134d4d2086a2109bf2a..32a6f794760589a516b7dda256fe7e437fefa608 100644 (file)
@@ -26,5 +26,6 @@ instead of libpq so we can write backend functions using ecpg.
 
 remove space_or_nl and line_end from pgc.l
 
-Missing statements:
+Missing features:
  - SQLSTATE
+ - LONG LONG datatype
index 8268e5495bdea70bb2f5f1c3035c41b98068a1e2..5bac2df8a2944f36b7ff4ddbb91c4086290fd302 100644 (file)
@@ -47,13 +47,14 @@ extern              "C"
                ECPGt_char_variable,
                ECPGt_EOIT,                             /* End of insert types. */
                ECPGt_EORT,                             /* End of result types. */
-               ECPGt_NO_INDICATOR              /* no indicator */
+               ECPGt_NO_INDICATOR,             /* no indicator */
+               ECPGt_long_long, ECPGt_unsigned_long_long
        };
 
        /* descriptor items */
        enum ECPGdtype
        {
-               ECPGd_count,
+               ECPGd_count = 1,
                ECPGd_data,
                ECPGd_di_code,
                ECPGd_di_precision,
index 2706060e5e7a17fd047701ada5936102c121ed51..591a286f0e9c003c0c93a42379e6e24889d6b28d 100644 (file)
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile,v 1.8 2000/09/17 13:02:46 petere Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/Makefile,v 1.9 2000/09/19 11:47:13 meskes Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -14,7 +14,7 @@ include $(top_builddir)/src/Makefile.global
 
 NAME= ecpg
 SO_MAJOR_VERSION= 3
-SO_MINOR_VERSION= 1.1
+SO_MINOR_VERSION= 2.0
 
 CPPFLAGS += -I$(top_srcdir)/src/interfaces/ecpg/include -I$(libpq_srcdir)
 
index 054966f9cf92182566092906037ee6f06e82d218..1c85de03505ddc971848aeeac0212cde82b78851 100644 (file)
@@ -60,6 +60,12 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno,
                case ECPGt_unsigned_long:
                        ((long *) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
                        break;
+               case ECPGt_long_long:
+                       ((long long int*) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
+                       break;
+               case ECPGt_unsigned_long_long:
+                       ((unsigned long long int*) ind)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
+                       break; 
                case ECPGt_NO_INDICATOR:
                        if (PQgetisnull(results, act_tuple, act_field))
                        {
@@ -93,7 +99,6 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno,
                                        {
                                                ECPGraise(lineno, ECPG_INT_FORMAT, pval);
                                                return (false);
-                                               res = 0L;
                                        }
                                }
                                else
@@ -127,7 +132,6 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno,
                                        {
                                                ECPGraise(lineno, ECPG_UINT_FORMAT, pval);
                                                return (false);
-                                               ures = 0L;
                                        }
                                }
                                else
@@ -150,7 +154,38 @@ get_data(PGresult *results, int act_tuple, int act_field, int lineno,
                                }
                                break;
 
+                       case ECPGt_long_long:
+                               if (pval)
+                               {
+                                       ((long long int *) var)[act_tuple] = strtoull(pval, &scan_length, 10);
+                                       if ((isarray && *scan_length != ',' && *scan_length != '}')
+                                               || (!isarray && *scan_length != '\0'))  /* Garbage left */
+                                       {
+                                               ECPGraise(lineno, ECPG_INT_FORMAT, pval);
+                                               return (false);
+                                       }
+                               }
+                               else     
+                                       ((long long int *) var)[act_tuple] = 0LL;
+                               
+                               break;
 
+                       case ECPGt_unsigned_long_long:
+                               if (pval)
+                               {
+                                       ((unsigned long long int *) var)[act_tuple] = strtoull(pval, &scan_length, 10);
+                                       if ((isarray && *scan_length != ',' && *scan_length != '}')
+                                               || (!isarray && *scan_length != '\0'))  /* Garbage left */
+                                       {
+                                               ECPGraise(lineno, ECPG_UINT_FORMAT, pval);
+                                               return (false);
+                                       }
+                               }
+                               else     
+                                       ((unsigned long long int *) var)[act_tuple] = 0LL;
+                               
+                               break;
+                                       
                        case ECPGt_float:
                        case ECPGt_double:
                                if (pval)
index fe4a04d2e01db480d69c7a00de3e25e88aa76088..374232553364d3498bba1923e12ad83c7b8d31a0 100644 (file)
@@ -63,29 +63,35 @@ get_int_item(int lineno, void *var, enum ECPGdtype vartype, int value)
 {
        switch (vartype)
        {
-                       case ECPGt_short:
-                       *(short *) var = value;
+               case ECPGt_short:
+                       *(short *) var = (short) value;
                        break;
                case ECPGt_int:
-                       *(int *) var = value;
+                       *(int *) var = (int) value;
                        break;
                case ECPGt_long:
-                       *(long *) var = value;
+                       *(long *) var = (long) value;
                        break;
                case ECPGt_unsigned_short:
-                       *(unsigned short *) var = value;
+                       *(unsigned short *) var = (unsigned short) value;
                        break;
                case ECPGt_unsigned_int:
-                       *(unsigned int *) var = value;
+                       *(unsigned int *) var = (unsigned int) value;
                        break;
                case ECPGt_unsigned_long:
-                       *(unsigned long *) var = value;
+                       *(unsigned long *) var = (unsigned long) value;
+                       break;
+               case ECPGt_long_long:
+                       *(long long int *) var = (long long int) value;
+                       break;
+               case ECPGt_unsigned_long_long:
+                       *(unsigned long long int *) var = (unsigned long long int) value;
                        break;
                case ECPGt_float:
-                       *(float *) var = value;
+                       *(float *) var = (float) value;
                        break;
                case ECPGt_double:
-                       *(double *) var = value;
+                       *(double *) var = (double) value;
                        break;
                default:
                        ECPGraise(lineno, ECPG_VAR_NOT_NUMERIC, NULL);
index f606a88e843e7dac9fb390fab8d3aa98ea171bc6..0741db622aac7f165943cd55873b216f47ce0661 100644 (file)
@@ -305,6 +305,11 @@ ECPGexecute(struct statement * stmt)
                                if (*(long *) var->ind_value < 0L)
                                        strcpy(buff, "null");
                                break;
+                       case ECPGt_long_long:
+                       case ECPGt_unsigned_long_long:
+                               if (*(long long int*) var->ind_value < 0LL)
+                                       strcpy(buff, "null");
+                               break;
                        default:
                                break;
                }
@@ -428,6 +433,44 @@ ECPGexecute(struct statement * stmt)
 
                                        tobeinserted = mallocedval;
                                        break;
+                                       
+                               case ECPGt_long_long:
+                                       if (!(mallocedval = ecpg_alloc(var->arrsize * 25, stmt->lineno)))
+                                               return false;
+
+                                       if (var->arrsize > 1)
+                                       {
+                                               strncpy(mallocedval, "'{", sizeof("'{"));
+
+                                               for (element = 0; element < var->arrsize; element++)
+                                                       sprintf(mallocedval + strlen(mallocedval), "%lld,", ((long long *) var->value)[element]);
+
+                                               strncpy(mallocedval + strlen(mallocedval) - 1, "}'", sizeof("}'"));
+                                       }
+                                       else
+                                               sprintf(mallocedval, "%lld", *((long long *) var->value));
+
+                                       tobeinserted = mallocedval;
+                                       break;
+
+                               case ECPGt_unsigned_long_long:
+                                       if (!(mallocedval = ecpg_alloc(var->arrsize * 25, stmt->lineno)))
+                                               return false;
+
+                                       if (var->arrsize > 1)
+                                       {
+                                               strncpy(mallocedval, "'{", sizeof("'{"));
+
+                                               for (element = 0; element < var->arrsize; element++)
+                                                       sprintf(mallocedval + strlen(mallocedval), "%llu,", ((unsigned long long *) var->value)[element]);
+
+                                               strncpy(mallocedval + strlen(mallocedval) - 1, "}'", sizeof("}'"));
+                                       }
+                                       else
+                                               sprintf(mallocedval, "%llu", *((unsigned long long*) var->value));
+
+                                       tobeinserted = mallocedval;
+                                       break;
 
                                case ECPGt_float:
                                        if (!(mallocedval = ecpg_alloc(var->arrsize * 20, stmt->lineno)))
@@ -868,7 +911,7 @@ ECPGdo(int lineno, const char *connection_name, char *query,...)
  *
  * Copyright (c) 2000, Christof Petig <christof.petig@wtal.de>
  *
- * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.7 2000/05/29 21:25:00 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/execute.c,v 1.8 2000/09/19 11:47:13 meskes Exp $
  */
 
 PGconn    *ECPG_internal_get_connection(char *name);
index 18f9aef57e1c7420dafc8a2de718a2bf2534ad47..c66ed7709dd950d53bc3115c6cd1048dd9513c8e 100644 (file)
@@ -28,6 +28,10 @@ ECPGtype_name(enum ECPGttype typ)
                        return "long";
                case ECPGt_unsigned_long:
                        return "unsigned long";
+               case ECPGt_long_long:
+                       return "long long";
+               case ECPGt_unsigned_long_long:
+                       return "unsigned long long";
                case ECPGt_float:
                        return "float";
                case ECPGt_double:
index 81fe459da78cea1d4563f705b4c79f744b689326..b2ab66ef3426a2112f4d1ffc2c2b371163ade31d 100644 (file)
@@ -3,8 +3,8 @@ top_builddir = ../../../..
 include $(top_builddir)/src/Makefile.global
 
 MAJOR_VERSION=2
-MINOR_VERSION=7
-PATCHLEVEL=1
+MINOR_VERSION=8
+PATCHLEVEL=0
 
 CPPFLAGS+=-I../include -DMAJOR_VERSION=$(MAJOR_VERSION) \
        -DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \
index 792b286d8c0cd21109b4344246871e681bb43bb3..3db962b1c7873417fb4c844316f03bb4f6c5e4b0 100644 (file)
@@ -46,9 +46,11 @@ ECPGnumeric_lvalue(FILE *f, char *name)
                case ECPGt_short:
                case ECPGt_int:
                case ECPGt_long:
+               case ECPGt_long_long:
                case ECPGt_unsigned_short:
                case ECPGt_unsigned_int:
                case ECPGt_unsigned_long:
+               case ECPGt_unsigned_long_long:
                        fputs(name, yyout);
                        break;
                default:
index a1a0452e1cbb2e35e27b5e250ea969c34eac2468..731860b1912d67d8e57cbad8b4d08cfdd2a71b0a 100644 (file)
@@ -50,7 +50,6 @@ static ScanKeyword ScanKeywords[] = {
        {"name", SQL_NAME},
        {"nullable", SQL_NULLABLE},
        {"octet_length", SQL_OCTET_LENGTH},
-       {"off", SQL_OFF},
        {"open", SQL_OPEN},
        {"prepare", SQL_PREPARE},
        {"reference", SQL_REFERENCE},
index dd93a1c2d6f24fb3b049ec4fd7f23effa9659586..06d4f3319be6799552b2468374f0d6648c421bf0 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.28 2000/06/12 19:40:55 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.29 2000/09/19 11:47:14 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -55,8 +55,10 @@ static ScanKeyword ScanKeywords[] = {
        {"cascade", CASCADE},
        {"case", CASE},
        {"cast", CAST},
+       {"chain", CHAIN},
        {"char", CHAR},
        {"character", CHARACTER},
+       {"characteristics", CHARACTERISTICS},     
        {"check", CHECK},
        {"close", CLOSE},
        {"cluster", CLUSTER},
@@ -100,6 +102,7 @@ static ScanKeyword ScanKeywords[] = {
        {"else", ELSE},
        {"encoding", ENCODING},
        {"end", END_TRANS},
+       {"escape", ESCAPE},
        {"except", EXCEPT},
        {"exclusive", EXCLUSIVE},
        {"execute", EXECUTE},
@@ -123,6 +126,7 @@ static ScanKeyword ScanKeywords[] = {
        {"handler", HANDLER},
        {"having", HAVING},
        {"hour", HOUR_P},
+       {"ilike", ILIKE},
        {"immediate", IMMEDIATE},
        {"in", IN},
        {"increment", INCREMENT},
@@ -130,6 +134,7 @@ static ScanKeyword ScanKeywords[] = {
        {"inherits", INHERITS},
        {"initially", INITIALLY},
        {"inner", INNER_P},
+       {"inout", INOUT},    
        {"insensitive", INSENSITIVE},
        {"insert", INSERT},
        {"instead", INSTEAD},
@@ -178,6 +183,7 @@ static ScanKeyword ScanKeywords[] = {
        {"nullif", NULLIF},
        {"numeric", NUMERIC},
        {"of", OF},
+       {"off", OFF}, 
        {"offset", OFFSET},
        {"oids", OIDS},
        {"old", OLD},
@@ -188,9 +194,11 @@ static ScanKeyword ScanKeywords[] = {
        {"overlaps", OVERLAPS},
        {"or", OR},
        {"order", ORDER},
+       {"out", OUT},   
        {"outer", OUTER_P},
        {"partial", PARTIAL},
        {"password", PASSWORD},
+       {"path", PATH_P}, 
        {"pendant", PENDANT},
        {"position", POSITION},
        {"precision", PRECISION},
@@ -213,12 +221,14 @@ static ScanKeyword ScanKeywords[] = {
        {"rollback", ROLLBACK},
        {"row", ROW},
        {"rule", RULE},
+       {"schema", SCHEMA},  
        {"scroll", SCROLL},
        {"second", SECOND_P},
        {"select", SELECT},
        {"sequence", SEQUENCE},
        {"serial", SERIAL},
        {"serializable", SERIALIZABLE},
+       {"session", SESSION},   
        {"session_user", SESSION_USER},
        {"set", SET},
        {"setof", SETOF},
@@ -240,6 +250,7 @@ static ScanKeyword ScanKeywords[] = {
        {"timezone_hour", TIMEZONE_HOUR},
        {"timezone_minute", TIMEZONE_MINUTE},
        {"to", TO},
+       {"toast", TOAST},    
        {"trailing", TRAILING},
        {"transaction", TRANSACTION},
        {"trigger", TRIGGER},
@@ -267,6 +278,7 @@ static ScanKeyword ScanKeywords[] = {
        {"when", WHEN},
        {"where", WHERE},
        {"with", WITH},
+       {"without", WITHOUT},
        {"work", WORK},
        {"year", YEAR_P},
        {"zone", ZONE},
index 260a57cc21ecfb4592c6badebe20040850678360..c23bb9cd479e1fd7c15c11a1e1fedd902a4c0efc 100644 (file)
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.60 2000/06/28 18:29:40 petere Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.61 2000/09/19 11:47:14 meskes Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -50,6 +50,8 @@ static char      *literalbuf = NULL;          /* expandable buffer */
 static int             literallen;             /* actual current length */
 static int             literalalloc;   /* current allocated buffer size */
 
+static int             xcdepth = 0; 
+
 #define startlit()  (literalbuf[0] = '\0', literallen = 0)
 static void addlit(char *ytext, int yleng);
 
@@ -140,6 +142,7 @@ xqcat                       {quote}{whitespace_with_newline}{quote}
 dquote                 \"
 xdstart                        {dquote}
 xdstop                 {dquote}
+xddouble                       {dquote}{dquote}
 xdinside               [^"]+
 
 /* special stuff for C strings */
@@ -169,7 +172,7 @@ xdcinside           ({xdcqq}|{xdcqdq}|{xdcother})
  */
 xcstart                        \/\*{op_chars}*
 xcstop                 \*+\/
-xcinside               ([^*]+)|(\*+[^/])
+xcinside               [^*/]+
 
 digit                  [0-9]
 letter                 [\200-\377_A-Za-z]
@@ -190,7 +193,7 @@ typecast            "::"
  * rule for "operator"!
  */
 self                   [,()\[\].;$\:\+\-\*\/\%\^\<\>\=\|]
-op_chars               [\~\!\@\#\^\&\|\`\?\$\:\+\-\*\/\%\<\>\=]
+op_chars               [\~\!\@\#\^\&\|\`\?\$\+\-\*\/\%\<\>\=]
 operator               {op_chars}+
 
 /* we no longer allow unary minus in numbers. 
@@ -281,15 +284,30 @@ cppline                   {space}*#(.*\\{line_end})*.*
 
 {xcstart}              {
                                state_before = YYSTATE;
+                               xcdepth = 0;
                                BEGIN(xc);
                                /* Put back any characters past slash-star; see above */
                                yyless(2);
                                fputs("/*", yyout);
                        }
 
-<xc>{xcstop}   { ECHO; BEGIN(state_before); }
+<xc>{xcstart}   {
+                        xcdepth++;
+                        /* Put back any characters past slash-star; see above */
+                        yyless(2);
+                       fputs("/*", yyout);
+                }
+
+<xc>{xcstop}    {
+                       ECHO;
+                        if (xcdepth <= 0)
+                               BEGIN(state_before);
+                        else
+                                xcdepth--;
+               }
 
 <xc>{xcinside} { ECHO; }
+<xc>{op_chars}  { ECHO; }
 
 <xc><<EOF>>            { mmerror(ET_ERROR, "Unterminated /* comment"); }
 
@@ -361,11 +379,36 @@ cppline                   {space}*#(.*\\{line_end})*.*
                                        BEGIN(xd);
                                        startlit();
                                }
-<xd,xdc>{xdstop}                       {
+<xd>{xdstop}           {
                                        BEGIN(state_before);
+                                       if (strlen(literalbuf) >= NAMEDATALEN)
+                                               {
+#ifdef MULTIBYTE
+                                                int len;
+
+                                               len = pg_mbcliplen(literalbuf,strlen(literalbuf),NAMEDATALEN-1);
+                                               sprintf(errortext, "identifier \"%s\" will be truncated to \"%.*s\"",
+                                                        literalbuf, len, literalbuf);
+                                               literalbuf[len] = '\0';
+#else
+                                               sprintf(errortext, "identifier \"%s\" will be truncated to \"%.*s\"",
+                                                        literalbuf, NAMEDATALEN-1, literalbuf);
+                                                literalbuf[NAMEDATALEN-1] = '\0';
+#endif
+                                               mmerror(ET_WARN, errortext);
+                                        }
+
+                                       yylval.str = mm_strdup(literalbuf);
+                                       return CSTRING;
+                               }
+<xdc>{xdstop}                  {
+                                       BEGIN(state_before);   
                                        yylval.str = mm_strdup(literalbuf);
                                        return CSTRING;
                                }
+<xd>{xddouble}                         {
+                                       addlit(yytext, yyleng-1);
+                               }
 <xd>{xdinside}                 {
                                        addlit(yytext, yyleng);
                                }
@@ -426,7 +469,7 @@ cppline                     {space}*#(.*\\{line_end})*.*
 
                                                for (ic = nchars-2; ic >= 0; ic--)
                                                {
-                                                       if (strchr("~!@#&`?$:%^|", yytext[ic]))
+                                                       if (strchr("~!@#^&|`?$%", yytext[ic]))
                                                                break;
                                                }
                                                if (ic >= 0)
@@ -498,8 +541,19 @@ cppline                    {space}*#(.*\\{line_end})*.*
 
                                        if (i >= NAMEDATALEN)
                                        {
-                                               sprintf(errortext, "Identifier \"%s\" will be truncated to \"%.*s\"", yytext, NAMEDATALEN-1, yytext);
-                                               mmerror (ET_WARN, errortext);
+#ifdef MULTIBYTE
+                                                int len;
+
+                                               len = pg_mbcliplen(lower_text,strlen(lower_text),NAMEDATALEN-1);
+                                               sprintf(errortext, "identifier \"%s\" will be truncated to \"%.*s\"",
+                                                        lower_text, len, lower_text);
+                                               lower_text[len] = '\0';
+#else
+                                               sprintf(errortext, "identifier \"%s\" will be truncated to \"%.*s\"",
+                                                        lower_text, NAMEDATALEN-1, lower_text);
+                                                lower_text[NAMEDATALEN-1] = '\0';
+#endif
+                                               mmerror(ET_WARN, errortext);
                                                 yytext[NAMEDATALEN-1] = '\0';
                                        }
 
index b4a9d777564e2e698b30c6b841676e8c24f6c03c..e32b524f79b13505edf7c211a60b4d1769e71817 100644 (file)
@@ -166,7 +166,7 @@ make_name(void)
 %token         SQL_IDENTIFIED SQL_INDICATOR SQL_INT SQL_KEY_MEMBER 
 %token         SQL_LENGTH SQL_LONG
 %token         SQL_NAME SQL_NULLABLE
-%token         SQL_OCTET_LENGTH SQL_OFF SQL_OPEN SQL_PREPARE
+%token         SQL_OCTET_LENGTH SQL_OPEN SQL_PREPARE
 %token         SQL_RELEASE SQL_REFERENCE SQL_RETURNED_LENGTH
 %token         SQL_RETURNED_OCTET_LENGTH
 %token         SQL_SCALE SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQL 
@@ -184,7 +184,8 @@ make_name(void)
 /* Keywords (in SQL92 reserved words) */
 %token  ABSOLUTE, ACTION, ADD, ALL, ALTER, AND, ANY, AS, ASC,
                 BEGIN_TRANS, BETWEEN, BOTH, BY,
-                CASCADE, CASE, CAST, CHAR, CHARACTER, CHECK, CLOSE,
+                CASCADE, CASE, CAST, CHAIN, CHAR, CHARACTER,
+               CHARACTERISTICS, CHECK, CLOSE,
                COALESCE, COLLATE, COLUMN, COMMIT, 
                 CONSTRAINT, CONSTRAINTS, CREATE, CROSS, CURRENT, CURRENT_DATE,
                 CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR,
@@ -192,19 +193,19 @@ make_name(void)
                 ELSE, END_TRANS, EXCEPT, EXECUTE, EXISTS, EXTRACT,
                 FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
                 GLOBAL, GRANT, GROUP, HAVING, HOUR_P,
-                IN, INNER_P, INSENSITIVE, INSERT, INTERSECT, INTERVAL, INTO, IS,
+                IN, INNER_P, INOUT, INSENSITIVE, INSERT, INTERSECT, INTERVAL, INTO, IS,
                 ISOLATION, JOIN, KEY, LANGUAGE, LEADING, LEFT, LEVEL, LIKE, LOCAL,
                 MATCH, MINUTE_P, MONTH_P, NAMES,
                 NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF, NULL_P, NUMERIC,
-                OF, OLD, ON, ONLY, OPTION, OR, ORDER, OUTER_P, OVERLAPS,
-                PARTIAL, POSITION, PRECISION, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC,
+                OF, OFF, OLD, ON, ONLY, OPTION, OR, ORDER, OUT, OUTER_P, OVERLAPS,
+                PARTIAL, PATH_P, POSITION, PRECISION, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC,
                 READ, REFERENCES, RELATIVE, REVOKE, RIGHT, ROLLBACK,
-                SCROLL, SECOND_P, SELECT, SESSION_USER, SET, SOME, SUBSTRING,
+                SCHEMA, SCROLL, SECOND_P, SELECT, SESSION, SESSION_USER, SET, SOME, SUBSTRING,
                 TABLE, TEMPORARY, THEN, TIME, TIMESTAMP, TIMEZONE_HOUR,
-                               TIMEZONE_MINUTE, TO, TRAILING, TRANSACTION, TRIM, TRUE_P,
+               TIMEZONE_MINUTE, TO, TOAST, TRAILING, TRANSACTION, TRIM, TRUE_P,
                 UNION, UNIQUE, UPDATE, USER, USING,
                 VALUES, VARCHAR, VARYING, VIEW,
-                WHEN, WHERE, WITH, WORK, YEAR_P, ZONE
+                WHEN, WHERE, WITH, WITHOUT, WORK, YEAR_P, ZONE
 
 /* Keywords (in SQL3 reserved words) */
 %token DEFERRABLE, DEFERRED,
@@ -245,13 +246,14 @@ make_name(void)
 /* these are not real. they are here so that they get generated as #define's*/
 %token                  OP
 
-/* precedence */
+/* precedence: lowest to highest */
+%left          UNION INTERSECT EXCEPT
 %left          OR
 %left          AND
 %right         NOT
 %right         '='
 %nonassoc      '<' '>'
-%nonassoc      LIKE
+%nonassoc      LIKE ILIKE
 %nonassoc      OVERLAPS
 %nonassoc      BETWEEN
 %nonassoc      IN
@@ -263,15 +265,13 @@ make_name(void)
 %left          '+' '-'
 %left          '*' '/' '%'
 %left          '^'
-%left          '|'                             /* this is the relation union op, not logical or */
+%left          '|'     
 /* Unary Operators */
-%right         ':'
-%left          ';'                             /* end of statement or natural log */
 %right         UMINUS
 %left          '.'
 %left          '[' ']'
 %left          TYPECAST
-%left          UNION INTERSECT EXCEPT
+%left          ESCAPE
 
 %type  <str>   Iconst Fconst Sconst TransactionStmt CreateStmt UserId
 %type  <str>   CreateAsElement OptCreateAs CreateAsList CreateAsStmt
@@ -279,24 +279,24 @@ make_name(void)
 %type  <str>    key_match ColLabel SpecialRuleRelation ColId columnDef
 %type  <str>    ColConstraint ColConstraintElem NumericOnly FloatOnly
 %type  <str>    OptTableElementList OptTableElement TableConstraint
-%type  <str>    ConstraintElem key_actions ColQualList TokenId
+%type  <str>    ConstraintElem key_actions ColQualList TokenId DropSchemaStmt
 %type  <str>    target_list target_el update_target_list alias_clause
 %type  <str>    update_target_el opt_id relation_name database_name
 %type  <str>    access_method attr_name class index_name name func_name
-%type  <str>    file_name AexprConst ParamNo c_expr
+%type  <str>    file_name AexprConst ParamNo c_expr ConstTypename
 %type  <str>   in_expr_nodes a_expr b_expr TruncateStmt CommentStmt
 %type  <str>   opt_indirection expr_list extract_list extract_arg
 %type  <str>   position_list substr_list substr_from alter_column_action
 %type  <str>   trim_list in_expr substr_for attr attrs drop_behavior
 %type  <str>   Typename SimpleTypename Generic Numeric generic opt_float opt_numeric
 %type  <str>   opt_decimal Character character opt_varying opt_charset
-%type  <str>   opt_collate Datetime datetime opt_timezone opt_interval
-%type  <str>   row_expr row_descriptor row_list typename numeric
+%type  <str>   opt_collate datetime opt_timezone opt_interval
+%type  <str>   row_expr row_descriptor row_list ConstDatetime opt_chain
 %type  <str>   SelectStmt SubSelect result OptTemp ConstraintAttributeSpec
 %type  <str>   opt_table opt_all sort_clause sortby_list ConstraintAttr 
 %type  <str>   sortby OptUseOp opt_inh_star relation_name_list name_list
 %type  <str>   group_clause having_clause from_clause opt_distinct
-%type  <str>   join_outer where_clause relation_expr sub_type
+%type  <str>   join_outer where_clause relation_expr sub_type opt_arg
 %type  <str>   opt_column_list insert_rest InsertStmt OptimizableStmt
 %type  <str>    columnList DeleteStmt LockStmt UpdateStmt CursorStmt
 %type  <str>    NotifyStmt columnElem copy_dirn UnlistenStmt copy_null
@@ -304,8 +304,8 @@ make_name(void)
 %type  <str>    opt_with_copy FetchStmt direction fetch_how_many from_in
 %type  <str>    ClosePortalStmt DropStmt VacuumStmt opt_verbose func_arg
 %type  <str>    opt_analyze opt_va_list va_list ExplainStmt index_params
-%type  <str>    index_list func_index index_elem opt_type opt_class access_method_clause
-%type  <str>    index_opt_unique IndexStmt func_return
+%type  <str>    index_list func_index index_elem opt_class access_method_clause
+%type  <str>    index_opt_unique IndexStmt func_return ConstInterval
 %type  <str>    func_args_list func_args opt_with ProcedureStmt def_arg
 %type  <str>    def_elem def_list definition def_name def_type DefineStmt
 %type  <str>    opt_instead event event_object RuleActionList opt_using
@@ -324,21 +324,22 @@ make_name(void)
 %type  <str>    TriggerActionTime CreateTrigStmt DropPLangStmt PLangTrusted
 %type  <str>    CreatePLangStmt IntegerOnly TriggerFuncArgs TriggerFuncArg
 %type  <str>    ViewStmt LoadStmt CreatedbStmt createdb_opt_encoding
-%type  <str>   createdb_opt_location opt_encoding
+%type  <str>   createdb_opt_location opt_encoding OptInherit Geometric
 %type  <str>    DropdbStmt ClusterStmt grantee RevokeStmt table_expr Bit bit
 %type  <str>   GrantStmt privileges operation_commalist operation
 %type  <str>   opt_cursor opt_lmode ConstraintsSetStmt comment_tg
 %type  <str>   case_expr when_clause_list case_default case_arg when_clause
 %type  <str>    select_clause opt_select_limit select_limit_value ConstraintTimeSpec
 %type  <str>    select_offset_value using_expr join_expr ReindexStmt
-%type  <str>   using_list from_expr join_clause join_type
-%type  <str>   join_qual update_list join_clause_with_union
+%type  <str>   using_list from_expr join_clause join_type opt_only opt_boolean
+%type  <str>   join_qual update_list join_clause_with_union AlterSchemaStmt
 %type  <str>   opt_level opt_lock lock_type users_in_new_group_clause
 %type  <str>    OptConstrFromTable comment_op OptTempTableName
 %type  <str>    constraints_set_list constraints_set_namelist comment_fn
 %type  <str>   constraints_set_mode comment_type comment_cl comment_ag
 %type  <str>   CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
-%type  <str>   join_expr_with_union opt_force key_update
+%type  <str>   join_expr_with_union opt_force key_update CreateSchemaStmt
+%type  <str>    SessionList SessionClause SetSessionStmt
 /***
 #ifdef ENABLE_ORACLE_JOIN_SYNTAX
 %type  <str>   oracle_list oracle_expr oracle_outer
@@ -360,8 +361,8 @@ make_name(void)
 %type  <str>    struct_type s_struct declaration declarations variable_declarations
 %type  <str>    s_union union_type ECPGSetAutocommit on_off
 %type  <str>   ECPGAllocateDescr ECPGDeallocateDescr symbol opt_symbol
-%type  <str>   ECPGGetDescriptorHeader ECPGColId ECPGColLabel ECPGTypeName
-%type  <str>   ECPGLabelTypeName
+%type  <str>   ECPGGetDescriptorHeader ECPGColLabel ECPGTypeName
+%type  <str>   ECPGLabelTypeName ECPGColId
 
 %type  <descriptor> ECPGFetchDescStmt ECPGGetDescriptor
 
@@ -393,7 +394,8 @@ statement: ecpgstart opt_at stmt ';'        { connection = NULL; }
 
 opt_at:        SQL_AT connection_target        { connection = $2; };
 
-stmt:  AlterTableStmt                  { output_statement($1, 0, NULL, connection); }
+stmt:  AlterSchemaStmt                         { output_statement($1, 0, NULL, connection); }
+               | AlterTableStmt        { output_statement($1, 0, NULL, connection); }
                | AlterGroupStmt        { output_statement($1, 0, NULL, connection); }
                | AlterUserStmt         { output_statement($1, 0, NULL, connection); }
                | ClosePortalStmt       { output_statement($1, 0, NULL, connection); }
@@ -401,6 +403,7 @@ stmt:  AlterTableStmt                       { output_statement($1, 0, NULL, connection); }
                | CopyStmt              { output_statement($1, 0, NULL, connection); }
                | CreateStmt            { output_statement($1, 0, NULL, connection); }
                | CreateAsStmt          { output_statement($1, 0, NULL, connection); }
+               | CreateSchemaStmt      { output_statement($1, 0, NULL, connection); }
                | CreateGroupStmt       { output_statement($1, 0, NULL, connection); }
                | CreateSeqStmt         { output_statement($1, 0, NULL, connection); }
                | CreatePLangStmt       { output_statement($1, 0, NULL, connection); }
@@ -409,6 +412,7 @@ stmt:  AlterTableStmt                       { output_statement($1, 0, NULL, connection); }
                | ClusterStmt           { output_statement($1, 0, NULL, connection); }
                | DefineStmt            { output_statement($1, 0, NULL, connection); }
                | DropStmt              { output_statement($1, 0, NULL, connection); }
+               | DropSchemaStmt        { output_statement($1, 0, NULL, connection); }
                | TruncateStmt          { output_statement($1, 0, NULL, connection); }
                | DropGroupStmt         { output_statement($1, 0, NULL, connection); }
                | DropPLangStmt         { output_statement($1, 0, NULL, connection); }
@@ -437,6 +441,7 @@ stmt:  AlterTableStmt                       { output_statement($1, 0, NULL, connection); }
                                                        output_statement($1, 1, NULL, connection);
                                        }
                | RuleStmt              { output_statement($1, 0, NULL, connection); }
+               | SetSessionStmt        { output_statement($1, 0, NULL, connection); }
                | TransactionStmt       {
                                                fprintf(yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
                                                whenever_action(2);
@@ -739,6 +744,67 @@ DropGroupStmt: DROP GROUP UserId
                }
                ;
 
+/*****************************************************************************
+ *
+ * Manipulate a schema
+ *
+ *
+ *****************************************************************************/
+CreateSchemaStmt:  CREATE SCHEMA UserId 
+               {
+                       $$ = cat2_str(make_str("create scheme"), $3);
+               }
+               ;
+
+AlterSchemaStmt:  ALTER SCHEMA UserId 
+               {
+                       $$ = cat2_str(make_str("alter scheme"), $3);
+               }
+               ;
+
+DropSchemaStmt:  DROP SCHEMA UserId 
+               {
+                       $$ = cat2_str(make_str("drop scheme"), $3);
+               }
+               ;
+
+/*****************************************************************************
+ *
+ * Manipulate a postgresql session
+ *
+ *
+ *****************************************************************************/
+SetSessionStmt:  SET SESSION CHARACTERISTICS AS SessionList 
+               {
+                       $$ = cat2_str(make_str("set session characteristics as"), $5);
+               }
+               ;
+
+SessionList:  SessionList ',' SessionClause
+               {
+                       $$ = cat_str(3, $1, make_str(","), $3);
+               }
+       | SessionClause 
+               {
+                       $$ = $1;
+               }
+               ;
+
+SessionClause:  TRANSACTION COMMIT opt_boolean 
+               {
+                       $$ = cat2_str(make_str("transaction commit"), $3);
+               }
+               | TIME ZONE zone_value 
+               {
+                       $$ = cat2_str(make_str("time zone"), $3);
+               }
+               | TRANSACTION ISOLATION LEVEL opt_level   
+               {
+                       $$ = cat2_str(make_str("transaction isolation level"), $4);
+               }
+               ;
 
 /*****************************************************************************
  *
@@ -780,18 +846,25 @@ opt_level:  READ COMMITTED      { $$ = make_str("read committed"); }
                ;
 
 
-var_value:  Sconst                     { $$ = $1; }
-               | FCONST                { $$ = make_name(); }
+var_value:  opt_boolean                { $$ = $1; }
+               | Sconst                { $$ = $1; }
                | Iconst                { $$ = $1; }
+               | '-' Iconst            { $$ = cat2_str(make_str("-"), $2); }
+               | Fconst                { $$ = $1; }
+               | '-' Fconst            { $$ = cat2_str(make_str("-"), $2); }
                | name_list             { 
                                          if (strlen($1) == 0)
                                                mmerror(ET_ERROR, "SET must have at least one argument.");
 
                                          $$ = $1;
                                        }
-                /* "OFF" is not a token, so it is handled by the name_list production */
-                | ON                   { $$ = make_str("on"); }
-               | DEFAULT               { $$ = make_str("default"); }
+               | DEFAULT               { $$ = make_str("default"); }
+               ;
+
+opt_boolean:  TRUE_P           { $$ = make_str("true"); }
+               | FALSE_P       { $$ = make_str("false"); }
+               | ON            { $$ = make_str("on"); }
+               | OFF           { $$ = make_str("off"); }
                ;
 
 zone_value:  Sconst                    { $$ = $1; }
@@ -993,10 +1066,10 @@ copy_null:       WITH NULL_P AS Sconst   { $$ = cat2_str(make_str("with null as"), $4);
  *
  *****************************************************************************/
 
-CreateStmt:  CREATE OptTemp TABLE relation_name '(' OptTableElementList ')'
-                               OptUnder
+CreateStmt:  CREATE OptTemp TABLE relation_name OptUnder '(' OptTableElementList ')'
+                               OptInherit
                                {
-                                       $$ = cat_str(8, make_str("create"), $2, make_str("table"), $4, make_str("("), $6, make_str(")"), $8);
+                                       $$ = cat_str(9, make_str("create"), $2, make_str("table"), $4, $5, make_str("("), $7, make_str(")"), $9);
                                }
                ;
 
@@ -1191,22 +1264,33 @@ key_reference:  NO ACTION       { $$ = make_str("no action"); }
                | SET NULL_P    { $$ = make_str("set null"); }
                ;
 
-OptUnder: UNDER relation_name_list { $$ = cat_str(2, make_str("under "), $2); }
-        | INHERITS '(' relation_name_list ')' { $$ = cat_str(3, make_str("inherits ("), $3, make_str(")")); }
-               | /*EMPTY*/ { $$ = EMPTY; }
-               ;
+OptUnder: UNDER relation_name_list     { $$ = cat2_str(make_str("under"), $2); }
+       | /*EMPTY*/                     { $$ = EMPTY; }
+       ;
+
+opt_only: ONLY         { $$ = make_str("only"); }
+       | /*EMPTY*/     { $$ = EMPTY; }
+       ;
+
+/* INHERITS is Deprecated */
+OptInherit:  INHERITS '(' relation_name_list ')'                { $$ = cat_str(3, make_str("inherits ("), $3, make_str(")")); }
+                | /*EMPTY*/                                    { $$ = EMPTY; }
+                ;      
 
 /*
  * Note: CREATE TABLE ... AS SELECT ... is just another spelling for
  * SELECT ... INTO.
  */
 
-CreateAsStmt:  CREATE OptTemp TABLE relation_name OptCreateAs AS SelectStmt
+CreateAsStmt:  CREATE OptTemp TABLE relation_name OptUnder OptCreateAs AS SelectStmt
                {
                        if (FoundInto == 1)
                                mmerror(ET_ERROR, "CREATE TABLE/AS SELECT may not specify INTO");
 
-                       $$ = cat_str(7, make_str("create"), $2, make_str("table"), $4, $5, make_str("as"), $7); 
+                       if (strlen($5) > 0)
+                               mmerror(ET_ERROR, "CREATE TABLE/AS SELECT does not support UNDER");
+
+                       $$ = cat_str(8, make_str("create"), $2, make_str("table"), $4, $5, $6, make_str("as"), $8); 
                }
                ;
 
@@ -1391,7 +1475,7 @@ TriggerFuncArg:  Iconst
                                        $$ = $1;
                                }
                        | Sconst        {  $$ = $1; }
-                       | ident         {  $$ = $1; }
+                       | ColId         {  $$ = $1; }
                ;
 
 OptConstrFromTable:                     /* Empty */
@@ -1450,13 +1534,6 @@ DefineStmt:  CREATE def_type def_name definition
                                        $$ = cat_str(3, make_str("create"), $2, $3, $4);
                                }
                ;
-/*
-def_rest:  def_name definition
-                               {
-                                       $$ = cat2_str($1, $2);
-                               }
-               ;
-*/
 
 def_type:  OPERATOR            { $$ = make_str("operator"); }
                | TYPE_P        { $$ = make_str("type"); }
@@ -1466,12 +1543,8 @@ def_type:  OPERATOR              { $$ = make_str("operator"); }
 def_name:  PROCEDURE           { $$ = make_str("procedure"); }
                | JOIN          { $$ = make_str("join"); }
                | all_Op        { $$ = $1; }
-               | typename      { $$ = $1; }
-                | TokenId      { $$ = $1; }
-                | INTERVAL     { $$ = make_str("interval"); }
-                | TIME         { $$ = make_str("time"); }
-                | TIMESTAMP    { $$ = make_str("timestamp"); }
-               ;
+               | ColId         { $$ = $1; }
+               ;
 
 definition:  '(' def_list ')'                          { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
                ;
@@ -1795,30 +1868,36 @@ index_list:  index_list ',' index_elem          { $$ = cat_str(3, $1, make_str(","), $3)
                | index_elem                    { $$ = $1; }
                ;
 
-func_index:  func_name '(' name_list ')' opt_type opt_class
+func_index:  func_name '(' name_list ')' opt_class
                                {
-                                       $$ = cat_str(6, $1, make_str("("), $3, ")", $5, $6);
+                                       $$ = cat_str(5, $1, make_str("("), $3, ")", $5);
                                }
                  ;
 
-index_elem:  attr_name opt_type opt_class
+index_elem:  attr_name opt_class
                                {
-                                       $$ = cat_str(3, $1, $2, $3);
+                                       $$ = cat2_str($1, $2);
                                }
                ;
 
-opt_type:  ':' Typename                { $$ = cat2_str(make_str(":"), $2); }
-               | FOR Typename  { $$ = cat2_str(make_str("for"), $2); }
-               | /*EMPTY*/     { $$ = EMPTY; }
-               ;
-
-/* opt_class "WITH class" conflicts with preceeding opt_type
- *  for Typename of "TIMESTAMP WITH TIME ZONE"
- * So, remove "WITH class" from the syntax. OK??
- * - thomas 1997-10-12
- *             | WITH class                                                    { $$ = $2; }
- */
-opt_class:  class                              { $$ = $1; }
+opt_class:  class                      {
+                                        /*
+                                          * Release 7.0 removed network_ops, timespan_ops, and
+                                          * datetime_ops, so we suppress it from being passed to
+                                          * the parser so the default *_ops is used.  This can be
+                                          * removed in some later release.  bjm 2000/02/07
+                                          *
+                                          * Release 7.1 removes lztext_ops, so suppress that too
+                                          * for a while.  tgl 2000/07/30
+                                          */
+                                        if (strcmp($1, "network_ops") != 0 &&
+                                            strcmp($1, "timespan_ops") != 0 && 
+                                            strcmp($1, "datetime_ops") != 0 &&
+                                            strcmp($1, "lztext_ops") != 0)
+                                               $$ = $1;
+                                        else
+                                               $$ = EMPTY;
+                                       }
                | USING class                   { $$ = cat2_str(make_str("using"), $2); }
                | /*EMPTY*/                     { $$ = EMPTY; }
                ;
@@ -1892,17 +1971,45 @@ func_args_list:  func_arg                               { $$ = $1; }
  * so that won't work here. The only thing we give up is array notation,
  * which isn't meaningful in this context anyway.
  * - thomas 2000-03-25
- */
-func_arg:  SimpleTypename
+ * The following productions are difficult, since it is difficult to
+ * distinguish between TokenId and SimpleTypename:
+                opt_arg TokenId SimpleTypename
+                                {
+                                        $$ = $3;
+                                }
+                | TokenId SimpleTypename
+                                {
+                                        $$ = $2;
+                                }
+ */                        
+
+func_arg:  opt_arg SimpleTypename
                                {
                                        /* We can catch over-specified arguments here if we want to,
                                         * but for now better to silently swallow typmod, etc.
                                         * - thomas 2000-03-22
                                         */
-                                       $$ = $1;
+                                       $$ = cat2_str($1, $2);
                                }
+               | SimpleTypename 
+                               {
+                                       $$ = $1;
+                               }
                ;
 
+opt_arg:  IN    { $$ = make_str("in"); }
+       | OUT   { 
+                 mmerror(ET_ERROR, "CREATE FUNCTION/OUT parameters are not supported");
+
+                 $$ = make_str("out");
+               }
+       | INOUT { 
+                 mmerror(ET_ERROR, "CREATE FUNCTION/INOUT parameters are not supported");
+
+                 $$ = make_str("oinut");
+               }
+       ;
+
 func_as: Sconst                                { $$ = $1; }
                | Sconst ',' Sconst     { $$ = cat_str(3, $1, make_str(","), $3); }
 
@@ -2135,14 +2242,25 @@ UnlistenStmt:  UNLISTEN relation_name
 TransactionStmt:  ABORT_TRANS opt_trans        { $$ = make_str("rollback"); }
        | BEGIN_TRANS opt_trans         { $$ = make_str("begin transaction"); }
        | COMMIT opt_trans              { $$ = make_str("commit"); }
-       | END_TRANS opt_trans                   { $$ = make_str("commit"); }
-       | ROLLBACK opt_trans                    { $$ = make_str("rollback"); }
+       | COMMIT opt_trans opt_chain    { $$ = cat2_str(make_str("commit"), $3); }
+       | END_TRANS opt_trans           { $$ = make_str("commit"); }
+       | ROLLBACK opt_trans            { $$ = make_str("rollback"); }
+       | ROLLBACK opt_trans opt_chain  { $$ = cat2_str(make_str("rollback"), $3); }
+       ;
 
 opt_trans: WORK        { $$ = ""; }
        | TRANSACTION   { $$ = ""; }
        | /*EMPTY*/     { $$ = ""; }
                 ;
 
+opt_chain: AND NO CHAIN        { $$ = make_str("and no chain"); }
+       | AND CHAIN             {
+                                 mmerror(ET_ERROR, "COMMIT/CHAIN not yet supported");
+
+                                 $$ = make_str("and chain");
+                               }
+       ;
+
 /*****************************************************************************
  *
  *             QUERY:
@@ -2394,10 +2512,9 @@ columnElem:  ColId opt_indirection
  *
  *****************************************************************************/
 
-DeleteStmt:  DELETE FROM relation_name
-                        where_clause
+DeleteStmt:  DELETE FROM opt_only name where_clause
                                {
-                                       $$ = cat_str(3, make_str("delete from"), $3, $4);
+                                       $$ = cat_str(4, make_str("delete from"), $3, $4, $5);
                                }
                ;
 
@@ -2428,12 +2545,12 @@ opt_lmode:      SHARE                           { $$ = make_str("share"); }
  *
  *****************************************************************************/
 
-UpdateStmt:  UPDATE relation_name
+UpdateStmt:  UPDATE opt_only relation_name
                          SET update_target_list
                          from_clause
                          where_clause
                                {
-                                       $$ = cat_str(6, make_str("update"), $2, make_str("set"), $4, $5, $6);
+                                       $$ = cat_str(7, make_str("update"), $2, $3, make_str("set"), $5, $6, $7);
                                }
                ;
 
@@ -2880,7 +2997,7 @@ relation_expr:    relation_name
                | ONLY relation_name                              %prec '='
                                {
                                        /* inheritance query */
-                  $$ = cat2_str(make_str("ONLY "), $2);
+                                       $$ = cat2_str(make_str("ONLY "), $2);
                                }
 
 opt_array_bounds:  '[' ']' opt_array_bounds
@@ -2936,20 +3053,18 @@ Typename:  SimpleTypename opt_array_bounds
                                }
                ;
 
-SimpleTypename:  Generic       { $$ = $1; }
-               | Datetime      { $$ = $1; }
+SimpleTypename:  ConstTypename { $$ = $1; }
+               | ConstInterval { $$ = $1; }
+               ;  
+
+ConstTypename:  Generic        { $$ = $1; }
+               | ConstDatetime { $$ = $1; }
                | Numeric       { $$ = $1; }
+               | Geometric     { $$ = $1; }
                | Bit           { $$ = $1; }
                | Character     { $$ = $1; }
                ;
 
-typename:      generic         { $$ = $1; }
-              | numeric                { $$ = $1; }
-              | bit            { $$ = $1; }
-              | character      { $$ = $1; }
-             | datetime        { $$ = $1; }
-              ;
-
 Generic:  generic
                                {
                                        $$ = $1;
@@ -2958,50 +3073,8 @@ Generic:  generic
 
 generic:  ident                                        { $$ = $1; }
                | TYPE_P                        { $$ = make_str("type"); }
-               | SQL_AT                        { $$ = make_str("at"); }
-               | SQL_AUTOCOMMIT                { $$ = make_str("autocommit"); }
-               | SQL_BOOL                      { $$ = make_str("bool"); }
-               | SQL_BREAK                     { $$ = make_str("break"); }
-               | SQL_CALL                      { $$ = make_str("call"); }
-               | SQL_CONNECT                   { $$ = make_str("connect"); }
-               | SQL_CONNECTION                { $$ = make_str("connection"); }
-               | SQL_CONTINUE                  { $$ = make_str("continue"); }
-               | SQL_COUNT                     { $$ = make_str("count"); }
-               | SQL_DATA                      { $$ = make_str("data"); }
-               | SQL_DATETIME_INTERVAL_CODE    { $$ = make_str("datetime_interval_code"); }
-               | SQL_DATETIME_INTERVAL_PRECISION       { $$ = make_str("datetime_interval_precision"); }
-               | SQL_DEALLOCATE                { $$ = make_str("deallocate"); }
-               | SQL_DISCONNECT                { $$ = make_str("disconnect"); }
-               | SQL_FOUND                     { $$ = make_str("found"); }
-               | SQL_GO                        { $$ = make_str("go"); }
-               | SQL_GOTO                      { $$ = make_str("goto"); }
-               | SQL_IDENTIFIED                { $$ = make_str("identified"); }
-               | SQL_INDICATOR                 { $$ = make_str("indicator"); }
-               | SQL_INT                       { $$ = make_str("int"); }
-               | SQL_KEY_MEMBER                { $$ = make_str("key_member"); }
-               | SQL_LENGTH                    { $$ = make_str("length"); }
-               | SQL_LONG                      { $$ = make_str("long"); }
-               | SQL_NAME                      { $$ = make_str("name"); }
-               | SQL_NULLABLE                  { $$ = make_str("nullable"); }
-               | SQL_OCTET_LENGTH              { $$ = make_str("octet_length"); }
-               | SQL_OFF                       { $$ = make_str("off"); }
-               | SQL_OPEN                      { $$ = make_str("open"); }
-               | SQL_PREPARE                   { $$ = make_str("prepare"); }
-               | SQL_RELEASE                   { $$ = make_str("release"); }
-               | SQL_RETURNED_LENGTH           { $$ = make_str("returned_length"); }
-               | SQL_RETURNED_OCTET_LENGTH     { $$ = make_str("returned_octet_length"); }
-               | SQL_SCALE                     { $$ = make_str("scale"); }
-               | SQL_SECTION                   { $$ = make_str("section"); }
-               | SQL_SHORT                     { $$ = make_str("short"); }
-               | SQL_SIGNED                    { $$ = make_str("signed"); }
-               | SQL_SQLERROR                  { $$ = make_str("sqlerror"); }
-               | SQL_SQLPRINT                  { $$ = make_str("sqlprint"); }
-               | SQL_SQLWARNING                { $$ = make_str("sqlwarning"); }
-               | SQL_STOP                      { $$ = make_str("stop"); }
-               | SQL_STRUCT                    { $$ = make_str("struct"); }
-               | SQL_UNSIGNED                  { $$ = make_str("unsigned"); }
-               | SQL_VAR                       { $$ = make_str("var"); }
-               | SQL_WHENEVER                  { $$ = make_str("whenever"); }
+               | ECPGKeywords                  { $$ = $1; }
+               | ECPGTypeName                  { $$ = $1; }
                ;
 
 /* SQL92 numeric data types
@@ -3031,12 +3104,7 @@ Numeric:  FLOAT opt_float
                                }
                ;
 
-numeric:       FLOAT                   { $$ = make_str("float"); }
-              | DOUBLE PRECISION       { $$ = make_str("double precision"); }
-              | DECIMAL                 { $$ = make_str("decimal"); }
-              | DEC                     { $$ = make_str("dec"); }
-              | NUMERIC                 { $$ = make_str("numeric"); }
-              ;
+Geometric:  PATH_P     { $$ = make_str("path"); };
 
 opt_float:  '(' Iconst ')'
                                {
@@ -3183,7 +3251,7 @@ opt_collate:  COLLATE ColId               { $$ = cat2_str(make_str("collate"), $2); }
                | /*EMPTY*/                                     { $$ = EMPTY; }
                ;
 
-Datetime:  datetime
+ConstDatetime:  datetime
                                {
                                        $$ = $1;
                                }
@@ -3195,7 +3263,9 @@ Datetime:  datetime
                                {
                                        $$ = cat2_str(make_str("time"), $2);
                                }
-               | INTERVAL opt_interval
+               ;
+
+ConstInterval: INTERVAL opt_interval
                                {
                                        $$ = cat2_str(make_str("interval"), $2);
                                }
@@ -3210,6 +3280,7 @@ datetime:  YEAR_P                                                         { $$ = make_str("year"); }
                ;
 
 opt_timezone:  WITH TIME ZONE                          { $$ = make_str("with time zone"); }
+               | WITHOUT TIME ZONE                             { $$ = make_str("without time zone"); }
                | /*EMPTY*/                                     { $$ = EMPTY; }
                ;
 
@@ -3336,14 +3407,6 @@ a_expr:  c_expr
                                {       $$ = cat2_str(make_str("^"), $2); }
                | '|' a_expr
                                {       $$ = cat2_str(make_str("|"), $2); }
-/* not possible in embedded sql                | ':' a_expr    
-                               {       $$ = cat2_str(make_str(":"), $2); }
-*/
-               | ';' a_expr
-                               {       $$ = cat2_str(make_str(";"), $2);
-                                       mmerror(ET_WARN, "The ';' operator is deprecated.  Use ln(x) instead."
-                                       "\n\tThis operator will be removed in a future release.");
-                               }
                | a_expr '%'
                                {       $$ = cat2_str($1, make_str("%")); }
                | a_expr '^'
@@ -3384,8 +3447,20 @@ a_expr:  c_expr
                                {       $$ = cat2_str(make_str("not"), $2); }
                | a_expr LIKE a_expr
                                {       $$ = cat_str(3, $1, make_str("like"), $3); }
+               | a_expr LIKE a_expr ESCAPE a_expr
+                               {       $$ = cat_str(5, $1, make_str("like"), $3, make_str("escape"), $5); }
                | a_expr NOT LIKE a_expr
                                {       $$ = cat_str(3, $1, make_str("not like"), $4); }
+               | a_expr NOT LIKE a_expr ESCAPE a_expr
+                               {       $$ = cat_str(5, $1, make_str("not like"), $4, make_str("escape"), $6); }
+               | a_expr ILIKE a_expr
+                               {       $$ = cat_str(3, $1, make_str("ilike"), $3); }
+               | a_expr ILIKE a_expr ESCAPE a_expr
+                               {       $$ = cat_str(5, $1, make_str("ilike"), $3, make_str("escape"), $5); }
+               | a_expr NOT ILIKE a_expr
+                               {       $$ = cat_str(3, $1, make_str("not ilike"), $4); }
+               | a_expr NOT ILIKE a_expr ESCAPE a_expr
+                               {       $$ = cat_str(5, $1, make_str("not ilike"), $4, make_str("escape"), $6); }
                | a_expr ISNULL
                                {       $$ = cat2_str($1, make_str("isnull")); }
                | a_expr IS NULL_P
@@ -3457,14 +3532,6 @@ b_expr:  c_expr
                                {       $$ = cat2_str(make_str("^"), $2); }
                | '|' b_expr
                                {       $$ = cat2_str(make_str("|"), $2); }
-/* not possible in embedded sql                | ':' b_expr    
-                               {       $$ = cat2_str(make_str(":"), $2); }
-*/
-               | ';' b_expr
-                               {       $$ = cat2_str(make_str(";"), $2);
-                                       mmerror(ET_WARN, "The ';' operator is deprecated.  Use ln(x) instead."
-                                       "\n\tThis operator will be removed in a future release.");
-                               }
                | b_expr '%'
                                {       $$ = cat2_str($1, make_str("%")); }
                | b_expr '^'
@@ -3814,9 +3881,9 @@ relation_name:    SpecialRuleRelation
                ;
 
 database_name:                 ColId                   { $$ = $1; };
-access_method:                 ident                   { $$ = $1; };
+access_method:                 ColId                   { $$ = $1; };
 attr_name:                             ColId                   { $$ = $1; };
-class:                                 ident                   { $$ = $1; };
+class:                                 ColId                   { $$ = $1; };
 index_name:                            ColId                   { $$ = $1; };
 
 /* Functions
@@ -3827,7 +3894,6 @@ name:                                     ColId                   { $$ = $1; };
 func_name:                             ColId                   { $$ = $1; };
 
 file_name:                             Sconst                  { $$ = $1; };
-/* NOT USED recipe_name:                       ident                   { $$ = $1; };*/
 
 /* Constants
  * Include TRUE/FALSE for SQL3 support. - thomas 1997-10-24
@@ -3844,13 +3910,14 @@ AexprConst:  Iconst
                                {
                                        $$ = $1;
                                }
-                /* this rule formerly used Typename, but that causes reduce conf licts
-                  * with subscripted column names ...
-                  */
-               | SimpleTypename Sconst
+               | ConstTypename Sconst
                                {
                                        $$ = cat2_str($1, $2);
                                }
+               | ConstInterval Sconst opt_interval 
+                               {
+                                       $$ = cat_str(3, $1, $2, $3);
+                               }
                | ParamNo
                                {       $$ = $1;  }
                | TRUE_P
@@ -3883,18 +3950,12 @@ Sconst:  SCONST                                 {
                                                        $$[strlen($1)+1]='\'';
                                                        free($1);
                                                }
-UserId:  ident                                  { $$ = $1;};
+UserId:  ColId                                  { $$ = $1;};
 
 /* Column identifier
- * Include date/time keywords as SQL92 extension.
- * Include TYPE as a SQL92 unreserved keyword. - thomas 1997-10-05
- * Add other keywords. Note that as the syntax expands,
- *  some of these keywords will have to be removed from this
- *  list due to shift/reduce conflicts in yacc. If so, move
- *  down to the ColLabel entity. - thomas 1997-11-06
  */
-ColId: ECPGColId                       { $$ = $1; }
-       | ECPGTypeName                  { $$ = $1; }
+ColId: ECPGColId                       { $$ = $1; }
+/*     | ECPGTypeName                  { $$ = $1; }*/
        ;
 
 /* Column label
@@ -3959,18 +4020,18 @@ connection_target: database_name opt_server opt_port
 
                  $$ = make3_str(make_str("\""), make3_str($1, $2, $3), make_str("\""));
                }
-        |  db_prefix server opt_port '/' database_name opt_options
+        |  db_prefix ':' server opt_port '/' database_name opt_options
                 {
                  /* new style: <tcp|unix>:postgresql://server[:port][/dbname] */
-                  if (strncmp($2, "://", strlen("://")) != 0)
+                  if (strncmp($3, "//", strlen("//")) != 0)
                  {
-                   sprintf(errortext, "parse error at or near '%s'", $2);
+                   sprintf(errortext, "parse error at or near '%s'", $3);
                    mmerror(ET_ERROR, errortext);
                  }
 
-                 if (strncmp($1, "unix", strlen("unix")) == 0 && strncmp($2 + strlen("://"), "localhost", strlen("localhost")) != 0)
+                 if (strncmp($1, "unix", strlen("unix")) == 0 && strncmp($3 + strlen("//"), "localhost", strlen("localhost")) != 0)
                  {
-                   sprintf(errortext, "unix domain sockets only work on 'localhost' but not on '%9.9s'", $2);
+                   sprintf(errortext, "unix domain sockets only work on 'localhost' but not on '%9.9s'", $3 +strlen("//"));
                     mmerror(ET_ERROR, errortext);
                  }
 
@@ -3980,7 +4041,7 @@ connection_target: database_name opt_server opt_port
                     mmerror(ET_ERROR, errortext);
                  }
        
-                 $$ = make2_str(make3_str(make_str("\""), $1, $2), make3_str(make3_str($3, make_str("/"), $5),  $6, make_str("\"")));
+                 $$ = make3_str(make3_str(make_str("\""), $1, make_str(":")), $3, make3_str(make3_str($4, make_str("/"), $6),  $7, make_str("\"")));
                }
        | char_variable
                 {
@@ -4008,12 +4069,12 @@ db_prefix: ident cvariable
                    mmerror(ET_ERROR, errortext);
                  }
 
-                 $$ = make3_str( $1, make_str(":"), $2);
+                 $$ = make3_str($1, make_str(":"), $2);
                }
         
 server: Op server_name
                 {
-                 if (strcmp($1, "@") != 0 && strcmp($1, "://") != 0)
+                 if (strcmp($1, "@") != 0 && strcmp($1, "//") != 0)
                  {
                    sprintf(errortext, "parse error at or near '%s'", $1);
                    mmerror(ET_ERROR, errortext);
@@ -4317,24 +4378,28 @@ simple_type: unsigned_type              { $$=$1; }
        |       opt_signed signed_type  { $$=$2; }
        ;
 
-unsigned_type: SQL_UNSIGNED SQL_SHORT                  { $$ = ECPGt_unsigned_short; }
-               | SQL_UNSIGNED SQL_SHORT SQL_INT        { $$ = ECPGt_unsigned_short; }
-               | SQL_UNSIGNED                          { $$ = ECPGt_unsigned_int; }
-               | SQL_UNSIGNED SQL_INT                  { $$ = ECPGt_unsigned_int; }
-               | SQL_UNSIGNED SQL_LONG                 { $$ = ECPGt_unsigned_long; }
-               | SQL_UNSIGNED SQL_LONG SQL_INT         { $$ = ECPGt_unsigned_long; }
-               | SQL_UNSIGNED CHAR                     { $$ = ECPGt_unsigned_char; }
-               ;
-
-signed_type: SQL_SHORT          { $$ = ECPGt_short; }
-           | SQL_SHORT SQL_INT  { $$ = ECPGt_short; }
-           | SQL_INT            { $$ = ECPGt_int; }
-           | SQL_LONG           { $$ = ECPGt_long; }
-           | SQL_LONG SQL_INT   { $$ = ECPGt_long; }
-           | SQL_BOOL          { $$ = ECPGt_bool; };
-           | FLOAT             { $$ = ECPGt_float; }
-           | DOUBLE            { $$ = ECPGt_double; }
-           | CHAR              { $$ = ECPGt_char; }
+unsigned_type: SQL_UNSIGNED SQL_SHORT                          { $$ = ECPGt_unsigned_short; }
+               | SQL_UNSIGNED SQL_SHORT SQL_INT                { $$ = ECPGt_unsigned_short; }
+               | SQL_UNSIGNED                                  { $$ = ECPGt_unsigned_int; }
+               | SQL_UNSIGNED SQL_INT                          { $$ = ECPGt_unsigned_int; }
+               | SQL_UNSIGNED SQL_LONG                         { $$ = ECPGt_unsigned_long; }
+               | SQL_UNSIGNED SQL_LONG SQL_INT                 { $$ = ECPGt_unsigned_long; }
+               | SQL_UNSIGNED SQL_LONG SQL_LONG                { $$ = ECPGt_unsigned_long_long; }
+               | SQL_UNSIGNED SQL_LONG SQL_LONG SQL_INT        { $$ = ECPGt_unsigned_long_long; }
+               | SQL_UNSIGNED CHAR                             { $$ = ECPGt_unsigned_char; }
+               ;
+
+signed_type: SQL_SHORT                 { $$ = ECPGt_short; }
+           | SQL_SHORT SQL_INT         { $$ = ECPGt_short; }
+           | SQL_INT                   { $$ = ECPGt_int; }
+           | SQL_LONG                  { $$ = ECPGt_long; }
+           | SQL_LONG SQL_INT          { $$ = ECPGt_long; }
+           | SQL_LONG SQL_LONG         { $$ = ECPGt_long_long; }
+           | SQL_LONG SQL_LONG SQL_INT  { $$ = ECPGt_long; }
+           | SQL_BOOL                  { $$ = ECPGt_bool; };
+           | FLOAT                     { $$ = ECPGt_float; }
+           | DOUBLE                    { $$ = ECPGt_double; }
+           | CHAR                      { $$ = ECPGt_char; }
           ;
 
 opt_signed:    SQL_SIGNED
@@ -4662,7 +4727,7 @@ ECPGSetAutocommit:  SET SQL_AUTOCOMMIT to_equal on_off
                         };
 
 on_off:        ON              { $$ = make_str("on"); }
-       | SQL_OFF       { $$ = make_str("off"); }
+       | OFF           { $$ = make_str("off"); }
        ;
 
 to_equal:      TO | '=';
@@ -4905,7 +4970,7 @@ action : SQL_CONTINUE
 /* some other stuff for ecpg */
 
 /* additional ColId entries */
-ECPGKeywords:  SQL_AT                          { $$ = make_str("at"); }
+ECPGKeywords:    SQL_AT                        { $$ = make_str("at"); }
                | SQL_BREAK                     { $$ = make_str("break"); }
                | SQL_CALL                      { $$ = make_str("call"); }
                | SQL_CONNECT                   { $$ = make_str("connect"); }
@@ -4926,7 +4991,6 @@ ECPGKeywords:     SQL_AT                          { $$ = make_str("at"); }
                | SQL_NAME                      { $$ = make_str("name"); }
                | SQL_NULLABLE                  { $$ = make_str("nullable"); }
                | SQL_OCTET_LENGTH              { $$ = make_str("octet_length"); }
-               | SQL_OFF                       { $$ = make_str("off"); }
                | SQL_OPEN                      { $$ = make_str("open"); }
                | SQL_PREPARE                   { $$ = make_str("prepare"); }
                | SQL_RELEASE                   { $$ = make_str("release"); }
@@ -4940,6 +5004,7 @@ ECPGKeywords:     SQL_AT                          { $$ = make_str("at"); }
                | SQL_STOP                      { $$ = make_str("stop"); }
                | SQL_VAR                       { $$ = make_str("var"); }
                | SQL_WHENEVER                  { $$ = make_str("whenever"); }
+/*             | ECPGTypeName                  { $$ = $1 }*/
                ;
 
 ECPGTypeName:    SQL_BOOL              { $$ = make_str("bool"); }
@@ -4958,7 +5023,7 @@ ECPGTypeName:       SQL_BOOL              { $$ = make_str("bool"); }
 ECPGLabelTypeName:       CHAR                  { $$ = make_str("char"); }
                        | FLOAT         { $$ = make_str("float"); }
                        | VARCHAR       { $$ = make_str("varchar"); }
-                       | ECPGTypeName  { $$ = $1; }
+/*                     | ECPGTypeName  { $$ = $1; }*/
                ;
 
 opt_symbol:    symbol          { $$ = $1; }
@@ -4972,16 +5037,6 @@ symbol:          ColLabel        { $$ = $1; };
  * BETWEEN, IN, IS, ISNULL, NOTNULL, OVERLAPS
  * Thanks to Tom Lane for pointing this out. - thomas 2000-03-29
  */
-ECPGColId:  /* to be used instead of ColId */
-        ECPGKeywords                   { $$ = $1; }
-       | ident                         { $$ = $1; }
-       | TokenId                       { $$ = $1; }
-       | datetime                      { $$ = $1; }
-       | INTERVAL                      { $$ = make_str("interval"); }
-       | TIME                          { $$ = make_str("time"); }
-       | TIMESTAMP                     { $$ = make_str("timestamp"); }
-       | TYPE_P                        { $$ = make_str("type"); }
-       ;
 
 /* Parser tokens to be used as identifiers.
  * Tokens involving data types should appear in ColId only,
@@ -4999,6 +5054,7 @@ TokenId:  ABSOLUTE                        { $$ = make_str("absolute"); }
        | BEGIN_TRANS                   { $$ = make_str("begin"); }
        | CACHE                         { $$ = make_str("cache"); }
        | CASCADE                       { $$ = make_str("cascade"); }
+       | CHAIN                         { $$ = make_str("chain"); }
        | CLOSE                         { $$ = make_str("close"); }
        | COMMENT                       { $$ = make_str("comment"); } 
        | COMMIT                        { $$ = make_str("commit"); }
@@ -5009,12 +5065,13 @@ TokenId:  ABSOLUTE                      { $$ = make_str("absolute"); }
        | CYCLE                         { $$ = make_str("cycle"); }
        | DATABASE                      { $$ = make_str("database"); }
        | DECLARE                       { $$ = make_str("declare"); }
-       | DEFERRED                      { $$ = make_str("deferred"); }
+       | DEFERRED                      { $$ = make_str("deferred"); }  
        | DELETE                        { $$ = make_str("delete"); }
        | DELIMITERS                    { $$ = make_str("delimiters"); }
        | DROP                          { $$ = make_str("drop"); }
        | EACH                          { $$ = make_str("each"); }
        | ENCODING                      { $$ = make_str("encoding"); }
+       | ESCAPE                        { $$ = make_str("escape"); }
        | EXCLUSIVE                     { $$ = make_str("exclusive"); }
        | EXECUTE                       { $$ = make_str("execute"); }
        | FETCH                         { $$ = make_str("fetch"); }
@@ -5023,7 +5080,8 @@ TokenId:  ABSOLUTE                        { $$ = make_str("absolute"); }
        | FUNCTION                      { $$ = make_str("function"); }
        | GRANT                         { $$ = make_str("grant"); }
        | HANDLER                       { $$ = make_str("handler"); }
-       | IMMEDIATE                     { $$ = make_str("immediate"); }
+       | ILIKE                         { $$ = make_str("ilike"); }
+       | IMMEDIATE                     { $$ = make_str("immediate"); } 
        | INCREMENT                     { $$ = make_str("increment"); }
        | INDEX                         { $$ = make_str("index"); }
        | INHERITS                      { $$ = make_str("inherits"); }
@@ -5035,13 +5093,13 @@ TokenId:  ABSOLUTE                      { $$ = make_str("absolute"); }
        | LANGUAGE                      { $$ = make_str("language"); }
        | LANCOMPILER                   { $$ = make_str("lancompiler"); }
        | LEVEL                         { $$ = make_str("level"); }
+       | LIKE                          { $$ = make_str("like"); }
        | LOCATION                      { $$ = make_str("location"); }
        | MATCH                         { $$ = make_str("match"); }
        | MAXVALUE                      { $$ = make_str("maxvalue"); }
        | MINVALUE                      { $$ = make_str("minvalue"); }
        | MODE                          { $$ = make_str("mode"); }
        | NAMES                         { $$ = make_str("names"); }
-       | NATIONAL                      { $$ = make_str("national"); }
        | NEXT                          { $$ = make_str("next"); }
        | NO                            { $$ = make_str("no"); }
        | NOCREATEDB                    { $$ = make_str("nocreatedb"); }
@@ -5050,7 +5108,6 @@ TokenId:  ABSOLUTE                        { $$ = make_str("absolute"); }
        | NOTIFY                        { $$ = make_str("notify"); }
        | OF                            { $$ = make_str("of"); }
        | OIDS                          { $$ = make_str("oids"); }
-       | ONLY                          { $$ = make_str("only"); }
        | OPERATOR                      { $$ = make_str("operator"); }
        | OPTION                        { $$ = make_str("option"); }
        | PARTIAL                       { $$ = make_str("partial"); }
@@ -5069,9 +5126,10 @@ TokenId:  ABSOLUTE                       { $$ = make_str("absolute"); }
        | ROLLBACK                      { $$ = make_str("rollback"); }
        | ROW                           { $$ = make_str("row"); }
        | RULE                          { $$ = make_str("rule"); }
+       | SCHEMA                        { $$ = make_str("schema"); }
        | SCROLL                        { $$ = make_str("scroll"); }
+       | SESSION                       { $$ = make_str("session"); }
        | SEQUENCE                      { $$ = make_str("sequence"); }
-       | SERIAL                        { $$ = make_str("serial"); }
        | SERIALIZABLE                  { $$ = make_str("serializable"); }
        | SET                           { $$ = make_str("set"); }
        | SHARE                         { $$ = make_str("share"); }
@@ -5083,7 +5141,8 @@ TokenId:  ABSOLUTE                        { $$ = make_str("absolute"); }
        | TEMP                          { $$ = make_str("temp"); }
        | TEMPORARY                     { $$ = make_str("temporary"); }
        | TIMEZONE_HOUR                 { $$ = make_str("timezone_hour"); }
-        | TIMEZONE_MINUTE               { $$ = make_str("timezone_minute"); }
+        | TIMEZONE_MINUTE               { $$ = make_str("timezone_minute"); } 
+        | TOAST                                { $$ = make_str("toast"); }
        | TRIGGER                       { $$ = make_str("trigger"); }
        | TRUNCATE                      { $$ = make_str("truncate"); }
        | TRUSTED                       { $$ = make_str("trusted"); }
@@ -5097,114 +5156,131 @@ TokenId:  ABSOLUTE                    { $$ = make_str("absolute"); }
        | VERSION                       { $$ = make_str("version"); }
        | VIEW                          { $$ = make_str("view"); }
        | WITH                          { $$ = make_str("with"); }
+       | WITHOUT                       { $$ = make_str("without"); }
        | WORK                          { $$ = make_str("work"); }
        | ZONE                          { $$ = make_str("zone"); }
        ;
 
-ECPGColLabel:  ECPGColId               { $$ = $1; }
+ECPGColId: ident                       { $$ = $1; }
+       | TYPE_P                        { $$ = make_str("type"); }
+       | datetime                      { $$ = $1; }
+       | TokenId                       { $$ = $1; }
+       | INTERVAL                      { $$ = make_str("interval"); }
+       | NATIONAL                      { $$ = make_str("national"); }
+       | PATH_P                        { $$ = make_str("path_p"); }
+       | SERIAL                        { $$ = make_str("serial"); }
+       | TIME                          { $$ = make_str("time"); }
+       | TIMESTAMP                     { $$ = make_str("timestamp"); }
+       | ECPGKeywords                  { $$ = $1; }
+       ;
+
+ECPGColLabel:  ECPGColId       { $$ = $1; }
                | ABORT_TRANS   { $$ = make_str("abort"); }
-               | ALL                   { $$ = make_str("all"); }
+               | ALL           { $$ = make_str("all"); }
                | ANALYZE       { $$ = make_str("analyze"); }
-               | ANY                   { $$ = make_str("any"); }
-               | ASC                   { $$ = make_str("asc"); }
-           | BETWEEN       { $$ = make_str("between"); }
+               | ANY           { $$ = make_str("any"); }
+               | ASC           { $$ = make_str("asc"); }
+               | BETWEEN       { $$ = make_str("between"); }
                | BINARY        { $$ = make_str("binary"); }
                | BIT           { $$ = make_str("bit"); }
-               | BOTH                  { $$ = make_str("both"); }
+               | BOTH          { $$ = make_str("both"); }
                | CASE          { $$ = make_str("case"); }
-               | CAST                  { $$ = make_str("cast"); }
+               | CAST          { $$ = make_str("cast"); }
                | CHARACTER     { $$ = make_str("character"); }
-               | CHECK                 { $$ = make_str("check"); }
-               | CLUSTER               { $$ = make_str("cluster"); }
+               | CHECK         { $$ = make_str("check"); }
+               | CLUSTER       { $$ = make_str("cluster"); }
                | COALESCE      { $$ = make_str("coalesce"); }
-               | COLLATE               { $$ = make_str("collate"); }
-               | COLUMN                { $$ = make_str("column"); }
+               | COLLATE       { $$ = make_str("collate"); }
+               | COLUMN        { $$ = make_str("column"); }
                | CONSTRAINT    { $$ = make_str("constraint"); }
-               | COPY                  { $$ = make_str("copy"); }
-               | CROSS                 { $$ = make_str("cross"); }
+               | COPY          { $$ = make_str("copy"); }
+               | CROSS         { $$ = make_str("cross"); }
                | CURRENT_DATE  { $$ = make_str("current_date"); }
                | CURRENT_TIME  { $$ = make_str("current_time"); }
                | CURRENT_TIMESTAMP     { $$ = make_str("current_timestamp"); }
                | CURRENT_USER          { $$ = make_str("current_user"); }
-               | DEC                   { $$ = make_str("dec"); }
-               | DECIMAL               { $$ = make_str("decimal"); }
-               | DEFAULT               { $$ = make_str("default"); }
+               | DEC           { $$ = make_str("dec"); }
+               | DECIMAL       { $$ = make_str("decimal"); }
+               | DEFAULT       { $$ = make_str("default"); }
                | DEFERRABLE    { $$ = make_str("deferrable"); }
-               | DESC                  { $$ = make_str("desc"); }
-               | DISTINCT              { $$ = make_str("distinct"); }
-               | DO                    { $$ = make_str("do"); }
+               | DESC          { $$ = make_str("desc"); }
+               | DISTINCT      { $$ = make_str("distinct"); }
+               | DO            { $$ = make_str("do"); }
                | ELSE          { $$ = make_str("else"); }
                | END_TRANS     { $$ = make_str("end"); }
-               | EXCEPT                { $$ = make_str("except"); }
-               | EXISTS                { $$ = make_str("exists"); }
-               | EXPLAIN               { $$ = make_str("explain"); }
-               | EXTEND                { $$ = make_str("extend"); }
-               | EXTRACT               { $$ = make_str("extract"); }
-               | FALSE_P               { $$ = make_str("false"); }
-               | FOR                   { $$ = make_str("for"); }
-               | FOREIGN               { $$ = make_str("foreign"); }
-               | FROM                  { $$ = make_str("from"); }
-               | FULL                  { $$ = make_str("full"); }
-        | IN            { $$ = make_str("in"); }
-               | IS            { $$ = make_str("is"); }
-        | ISNULL        { $$ = make_str("isnull"); }
-               | GLOBAL                { $$ = make_str("global"); }
-               | GROUP                 { $$ = make_str("group"); }
-               | HAVING                { $$ = make_str("having"); }
-               | INITIALLY             { $$ = make_str("initially"); }
-               | INNER_P               { $$ = make_str("inner"); }
-               | INTERSECT             { $$ = make_str("intersect"); }
-               | INTO                  { $$ = make_str("into"); }
-               | JOIN                  { $$ = make_str("join"); }
-               | LEADING               { $$ = make_str("leading"); }
-               | LEFT                  { $$ = make_str("left"); }
-               | LIKE                  { $$ = make_str("like"); }
-               | LISTEN                { $$ = make_str("listen"); }
-               | LOAD                  { $$ = make_str("load"); }
-               | LOCK_P                { $$ = make_str("lock"); }
-               | MOVE                  { $$ = make_str("move"); }
-               | NATURAL               { $$ = make_str("natural"); }
-               | NCHAR                 { $$ = make_str("nchar"); }
-               | NEW                   { $$ = make_str("new"); }
-               | NONE                  { $$ = make_str("none"); }
-               | NOT                   { $$ = make_str("not"); }
-           | NOTNULL           { $$ = make_str("notnull"); }
-               | NULLIF                { $$ = make_str("nullif"); }
-               | NULL_P                { $$ = make_str("null"); }
-               | NUMERIC               { $$ = make_str("numeric"); }
-               | OFFSET                { $$ = make_str("offset"); }
-               | OLD                   { $$ = make_str("old"); }
-               | ON                    { $$ = make_str("on"); }
-               | OR                    { $$ = make_str("or"); }
-               | ORDER                 { $$ = make_str("order"); }
-               | OUTER_P               { $$ = make_str("outer"); }
-        | OVERLAPS      { $$ = make_str("overlaps"); }
-               | POSITION              { $$ = make_str("position"); }
-               | PRECISION             { $$ = make_str("precision"); }
-               | PRIMARY               { $$ = make_str("primary"); }
-               | PROCEDURE             { $$ = make_str("procedure"); }
-               | PUBLIC                { $$ = make_str("public"); }
+               | EXCEPT        { $$ = make_str("except"); }
+               | EXISTS        { $$ = make_str("exists"); }
+               | EXPLAIN       { $$ = make_str("explain"); }
+               | EXTEND        { $$ = make_str("extend"); }
+               | EXTRACT       { $$ = make_str("extract"); }
+               | FALSE_P       { $$ = make_str("false"); }
+               | FOR           { $$ = make_str("for"); }
+               | FOREIGN       { $$ = make_str("foreign"); }
+               | FROM          { $$ = make_str("from"); }
+               | FULL          { $$ = make_str("full"); }
+               | IN            { $$ = make_str("in"); }
+               | IS            { $$ = make_str("is"); }
+               | ISNULL        { $$ = make_str("isnull"); }
+               | GLOBAL        { $$ = make_str("global"); }
+               | GROUP         { $$ = make_str("group"); }
+               | HAVING        { $$ = make_str("having"); }
+               | INITIALLY     { $$ = make_str("initially"); }
+               | INNER_P       { $$ = make_str("inner"); }
+               | INTERSECT     { $$ = make_str("intersect"); }
+               | INTO          { $$ = make_str("into"); }
+               | INOUT         { $$ = make_str("inout"); }
+               | JOIN          { $$ = make_str("join"); }
+               | LEADING       { $$ = make_str("leading"); }
+               | LEFT          { $$ = make_str("left"); }
+               | LISTEN        { $$ = make_str("listen"); }
+               | LOAD          { $$ = make_str("load"); }
+               | LOCK_P        { $$ = make_str("lock"); }
+               | MOVE          { $$ = make_str("move"); }
+               | NATURAL       { $$ = make_str("natural"); }
+               | NCHAR         { $$ = make_str("nchar"); }
+               | NEW           { $$ = make_str("new"); }
+               | NONE          { $$ = make_str("none"); }
+               | NOT           { $$ = make_str("not"); }
+               | NOTNULL       { $$ = make_str("notnull"); }
+               | NULLIF        { $$ = make_str("nullif"); }
+               | NULL_P        { $$ = make_str("null"); }
+               | NUMERIC       { $$ = make_str("numeric"); }
+               | OFF           { $$ = make_str("off"); }
+               | OFFSET        { $$ = make_str("offset"); }
+               | OLD           { $$ = make_str("old"); }
+               | ON            { $$ = make_str("on"); }
+               | ONLY          { $$ = make_str("only"); }
+               | OR            { $$ = make_str("or"); }
+               | ORDER         { $$ = make_str("order"); }
+               | OUT           { $$ = make_str("out"); }
+               | OUTER_P       { $$ = make_str("outer"); }
+               | OVERLAPS      { $$ = make_str("overlaps"); }
+               | POSITION      { $$ = make_str("position"); }
+               | PRECISION     { $$ = make_str("precision"); }
+               | PRIMARY       { $$ = make_str("primary"); }
+               | PROCEDURE     { $$ = make_str("procedure"); }
+               | PUBLIC        { $$ = make_str("public"); }
                | REFERENCES    { $$ = make_str("references"); }
-               | RESET                 { $$ = make_str("reset"); }
-               | RIGHT                 { $$ = make_str("right"); }
-               | SELECT                { $$ = make_str("select"); }
+               | RESET         { $$ = make_str("reset"); }
+               | RIGHT         { $$ = make_str("right"); }
+               | SELECT        { $$ = make_str("select"); }
                | SESSION_USER  { $$ = make_str("session_user"); }
-               | SETOF                 { $$ = make_str("setof"); }
-               | SHOW                  { $$ = make_str("show"); }
-               | SUBSTRING             { $$ = make_str("substring"); }
-               | TABLE                 { $$ = make_str("table"); }
+               | SETOF         { $$ = make_str("setof"); }
+               | SHOW          { $$ = make_str("show"); }
+               | SUBSTRING     { $$ = make_str("substring"); }
+               | TABLE         { $$ = make_str("table"); }
                | THEN          { $$ = make_str("then"); }
-               | TO                    { $$ = make_str("to"); }
+               | TO            { $$ = make_str("to"); }
                | TRANSACTION   { $$ = make_str("transaction"); }
-               | TRIM                  { $$ = make_str("trim"); }
-               | TRUE_P                { $$ = make_str("true"); }
-               | UNIQUE                { $$ = make_str("unique"); }
-               | USER                  { $$ = make_str("user"); }
-               | USING                 { $$ = make_str("using"); }
-               | VACUUM                { $$ = make_str("vacuum"); }
-               | VERBOSE               { $$ = make_str("verbose"); }
+               | TRIM          { $$ = make_str("trim"); }
+               | TRUE_P        { $$ = make_str("true"); }
+               | UNIQUE        { $$ = make_str("unique"); }
+               | USER          { $$ = make_str("user"); }
+               | USING         { $$ = make_str("using"); }
+               | VACUUM        { $$ = make_str("vacuum"); }
+               | VERBOSE       { $$ = make_str("verbose"); }
                | WHEN          { $$ = make_str("when"); }
-               | WHERE                 { $$ = make_str("where"); }
+               | WHERE         { $$ = make_str("where"); }
                ;
 
 into_list : coutputvariable | into_list ',' coutputvariable;
index 77e4b840266e02e2a1f876fd38d582de91528426..b42e962e7cadd089b29fc974403d3444e48b26b0 100644 (file)
@@ -146,7 +146,13 @@ get_type(enum ECPGttype typ)
                        return ("ECPGt_long");
                        break;
                case ECPGt_unsigned_long:
-                       return ("ECPGt_unsigned_int");
+                       return ("ECPGt_unsigned_long");
+                       break;
+               case ECPGt_long_long:
+                       return ("ECPGt_long_long");
+                       break;
+               case ECPGt_unsigned_long_long:
+                       return ("ECPGt_unsigned_long_long");
                        break;
                case ECPGt_float:
                        return ("ECPGt_float");
index f3d2dca05976fbbbc50f0eb04d28f9dbc9df3e1f..afdc0335513b7e9e81a981128c61c7b6615252ca 100644 (file)
@@ -260,9 +260,11 @@ check_indicator(struct ECPGtype * var)
                case ECPGt_short:
                case ECPGt_int:
                case ECPGt_long:
+               case ECPGt_long_long:
                case ECPGt_unsigned_short:
                case ECPGt_unsigned_int:
                case ECPGt_unsigned_long:
+               case ECPGt_unsigned_long_long:
                        break;
 
                case ECPGt_struct: