From fbaa172d6553e0139ed98405eb4f24bf196f1394 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 14 Nov 2008 17:43:14 +0000
Subject: [PATCH] ecpg's preproc.y is now generated as needed, so remove from
 CVS.

---
 src/interfaces/ecpg/preproc/preproc.y | 11349 ------------------------
 1 file changed, 11349 deletions(-)
 delete mode 100644 src/interfaces/ecpg/preproc/preproc.y

diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
deleted file mode 100644
index b76b8d3f3c1..00000000000
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ /dev/null
@@ -1,11349 +0,0 @@
-/* header */
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.384 2008/11/14 16:25:34 meskes Exp $ */
-
-/* Copyright comment */
-%{
-#include "postgres_fe.h"
-
-#include "extern.h"
-#include <unistd.h>
-
-/* Location tracking support --- simpler than bison's default */
-#define YYLLOC_DEFAULT(Current, Rhs, N) \
-	do { \
-                if (N) \
-			(Current) = (Rhs)[1]; \
-		else \
-		        (Current) = (Rhs)[0]; \
-	} while (0)
-
-/*
- * The %name-prefix option below will make bison call base_yylex, but we
- * really want it to call filtered_base_yylex (see parser.c).
- */
-#define base_yylex filtered_base_yylex
-
-/*
- * Variables containing simple states.
- */
-int struct_level = 0;
-int braces_open; /* brace level counter */
-int ecpg_informix_var = 0;
-char	*connection = NULL;
-char	*input_filename = NULL;
-
-static int	QueryIsRule = 0, FoundInto = 0;
-static int	initializer = 0;
-static int	pacounter = 1;
-static char     pacounter_buffer[sizeof(int) * CHAR_BIT * 10 / 3]; /* a rough guess at the size we need */
-static struct this_type actual_type[STRUCT_DEPTH];
-static char *actual_startline[STRUCT_DEPTH];
-
-/* temporarily store struct members while creating the data structure */
-struct ECPGstruct_member *struct_member_list[STRUCT_DEPTH] = { NULL };
-
-/* also store struct type so we can do a sizeof() later */
-static char *ECPGstruct_sizeof = NULL;
-
-/* for forward declarations we have to store some data as well */
-static char *forward_name = NULL;
-
-struct ECPGtype ecpg_no_indicator = {ECPGt_NO_INDICATOR, NULL, NULL, {NULL}, 0};
-struct variable no_indicator = {"no_indicator", &ecpg_no_indicator, 0, NULL};
-
-struct ECPGtype ecpg_query = {ECPGt_char_variable, NULL, NULL, {NULL}, 0};
-
-/*
- * Handle parsing errors and warnings
- */
-void
-mmerror(int error_code, enum errortype type, char * error, ...)
-{
-	va_list ap;
-
-	/* internationalize the error message string */
-	error = _(error);
-
-	fprintf(stderr, "%s:%d: ", input_filename, yylineno);
-
-	switch(type)
-	{
-		case ET_WARNING:
-			fprintf(stderr, _("WARNING: "));
-			break;
-		case ET_ERROR:
-		case ET_FATAL:
-			fprintf(stderr, _("ERROR: "));
-			break;
-	}
-
-	va_start(ap, error);
-	vfprintf(stderr, error, ap);
-	va_end(ap);
-
-	fprintf(stderr, "\n");
-
-	switch(type)
-	{
-		case ET_WARNING:
-			break;
-		case ET_ERROR:
-			ret_value = error_code;
-			break;
-		case ET_FATAL:
-			if (yyin)
-				fclose(yyin);
-			if (yyout)
-				fclose(yyout);
-			
-			if (strcmp(output_filename, "-") != 0 && unlink(output_filename) != 0)
-			        fprintf(stderr, _("could not remove output file \"%s\"\n"), output_filename);
-			exit(error_code);
-	}
-}
-
-/*
- * string concatenation
- */
-
-static char *
-cat2_str(char *str1, char *str2)
-{
-	char * res_str	= (char *)mm_alloc(strlen(str1) + strlen(str2) + 2);
-
-	strcpy(res_str, str1);
-	strcat(res_str, " ");
-	strcat(res_str, str2);
-	free(str1);
-	free(str2);
-	return(res_str);
-}
-
-static char *
-cat_str(int count, ...)
-{
-	va_list		args;
-	int			i;
-	char		*res_str;
-
-	va_start(args, count);
-
-	res_str = va_arg(args, char *);
-
-	/* now add all other strings */
-	for (i = 1; i < count; i++)
-		res_str = cat2_str(res_str, va_arg(args, char *));
-
-	va_end(args);
-
-	return(res_str);
-}
-
-char *
-make_str(const char *str)
-{
-	char * res_str = (char *)mm_alloc(strlen(str) + 1);
-
-	strcpy(res_str, str);
-	return res_str;
-}
-
-static char *
-make2_str(char *str1, char *str2)
-{
-	char * res_str	= (char *)mm_alloc(strlen(str1) + strlen(str2) + 1);
-
-	strcpy(res_str, str1);
-	strcat(res_str, str2);
-	free(str1);
-	free(str2);
-	return(res_str);
-}
-
-static char *
-make3_str(char *str1, char *str2, char *str3)
-{
-	char * res_str	= (char *)mm_alloc(strlen(str1) + strlen(str2) +strlen(str3) + 1);
-
-	strcpy(res_str, str1);
-	strcat(res_str, str2);
-	strcat(res_str, str3);
-	free(str1);
-	free(str2);
-	free(str3);
-	return(res_str);
-}
-
-/* and the rest */
-static char *
-make_name(void)
-{
-	char * name = (char *)mm_alloc(yyleng + 1);
-
-	strncpy(name, yytext, yyleng);
-	name[yyleng] = '\0';
-	return(name);
-}
-
-static char *
-create_questionmarks(char *name, bool array)
-{
-	struct variable *p = find_variable(name);
-	int count;
-	char *result = EMPTY;
-
-	/* In case we have a struct, we have to print as many "?" as there are attributes in the struct
-	 * An array is only allowed together with an element argument
-	 * This is essantially only used for inserts, but using a struct as input parameter is an error anywhere else
-	 * so we don't have to worry here. */
-
-	if (p->type->type == ECPGt_struct || (array && p->type->type == ECPGt_array && p->type->u.element->type == ECPGt_struct))
-	{
-		struct ECPGstruct_member *m;
-
-		if (p->type->type == ECPGt_struct)
-			m = p->type->u.members;
-		else
-			m = p->type->u.element->u.members;
-
-		for (count = 0; m != NULL; m=m->next, count++);
-	}
-	else
-		count = 1;
-
-	for (; count > 0; count --)
-	{
-		sprintf(pacounter_buffer, "$%d", pacounter++);
-		result = cat_str(3, result, strdup(pacounter_buffer), make_str(" , "));
-	}
-
-	/* removed the trailing " ," */
-
-	result[strlen(result)-3] = '\0';
-	return(result);
-}
-
-static char *
-adjust_informix(struct arguments *list)
-{
-	/* Informix accepts DECLARE with variables that are out of scope when OPEN is called.
- 	 * for instance you can declare variables in a function, and then subsequently use them
-	 * {
-	 *      declare_vars();
-	 *      exec sql ... which uses vars declared in the above function
-	 *
-	 * This breaks standard and leads to some very dangerous programming.
-	 * Since they do, we have to work around and accept their syntax as well.
-	 * But we will do so ONLY in Informix mode.
-	 * We have to change the variables to our own struct and just store the pointer instead of the variable
-	 */
-
-	 struct arguments *ptr;
-	 char *result = make_str("");
-
-	 for (ptr = list; ptr != NULL; ptr = ptr->next)
-	 {
-	 	char temp[20]; /* this should be sufficient unless you have 8 byte integers */
-		char *original_var;
-
-	 	/* change variable name to "ECPG_informix_get_var(<counter>)" */
-		original_var = ptr->variable->name;
-		sprintf(temp, "%d))", ecpg_informix_var);
-
-		if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char) && atoi(ptr->variable->type->size) > 1)
-		{
-			ptr->variable = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1"), ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0);
-			sprintf(temp, "%d, (", ecpg_informix_var++);
-		}
-		else if ((ptr->variable->type->type == ECPGt_varchar || ptr->variable->type->type == ECPGt_char || ptr->variable->type->type == ECPGt_unsigned_char) && atoi(ptr->variable->type->size) > 1)
-		{
-			ptr->variable = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0);
-			sprintf(temp, "%d, (", ecpg_informix_var++);
-		}
-		else
-		{
-			ptr->variable = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0);
-			sprintf(temp, "%d, &(", ecpg_informix_var++);
-		}
-
-		/* create call to "ECPG_informix_set_var(<counter>, <pointer>. <linen number>)" */
-		result = cat_str(5, result, make_str("ECPG_informix_set_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n"));
-
-		/* now the indicator if there is one */
-		if (ptr->indicator->type->type != ECPGt_NO_INDICATOR)
-		{
-			/* change variable name to "ECPG_informix_get_var(<counter>)" */
-			original_var = ptr->indicator->name;
-			sprintf(temp, "%d))", ecpg_informix_var);
-
-			/* create call to "ECPG_informix_set_var(<counter>, <pointer>. <linen number>)" */
-			if (atoi(ptr->indicator->type->size) > 1)
-			{
-				ptr->indicator = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0);
-				sprintf(temp, "%d, (", ecpg_informix_var++);
-			}
-			else
-			{
-				ptr->indicator = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPG_informix_get_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0);
-				sprintf(temp, "%d, &(", ecpg_informix_var++);
-			}
-			result = cat_str(5, result, make_str("ECPG_informix_set_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n"));
-		}
-	 }
-
-	 return result;
-}
-
-static struct cursor *
-add_additional_variables(char *name, bool insert)
-{
-	struct cursor *ptr;
-	struct arguments *p;
-
-	for (ptr = cur; ptr != NULL; ptr=ptr->next)
-	{
-		if (strcmp(ptr->name, name) == 0)
-			break;
-	}
-
-	if (ptr == NULL)
-	{
-		mmerror(PARSE_ERROR, ET_ERROR, "trying to access an undeclared cursor \"%s\"\n", name);
-		return NULL;
-	}
-
-	if (insert)
-	{
-		/* add all those input variables that were given earlier
-		 * note that we have to append here but have to keep the existing order */
-		for (p = ptr->argsinsert; p; p = p->next)
-			add_variable_to_tail(&argsinsert, p->variable, p->indicator);
-	}
-
-	/* add all those output variables that were given earlier */
-	for (p = ptr->argsresult; p; p = p->next)
-		add_variable_to_tail(&argsresult, p->variable, p->indicator);
-
-	return ptr;
-}
-
-static void
-add_typedef(char *name, char * dimension, char * length, enum ECPGttype type_enum, char *type_dimension, char *type_index, int initializer, int array)
-{
-	/* add entry to list */
-	struct typedefs *ptr, *this;
-
-	if ((type_enum == ECPGt_struct ||
-	     type_enum == ECPGt_union) &&
-	    initializer == 1)
-		mmerror(PARSE_ERROR, ET_ERROR, "initializer not allowed in typedef command");
-	else
-	{
-		for (ptr = types; ptr != NULL; ptr = ptr->next)
-		{
-			if (strcmp(name, ptr->name) == 0)
-				/* re-definition is a bug */
-				mmerror(PARSE_ERROR, ET_ERROR, "type %s already defined", name);
-		}
-		adjust_array(type_enum, &dimension, &length, type_dimension, type_index, array, true);
-
-		this = (struct typedefs *) mm_alloc(sizeof(struct typedefs));
-
-		/* initial definition */
-		this->next = types;
-		this->name = name;
-		this->brace_level = braces_open;
-		this->type = (struct this_type *) mm_alloc(sizeof(struct this_type));
-		this->type->type_enum = type_enum;
-		this->type->type_str = mm_strdup(name);
-		this->type->type_dimension = dimension; /* dimension of array */
-		this->type->type_index = length;	/* length of string */
-		this->type->type_sizeof = ECPGstruct_sizeof;
-		this->struct_member_list = (type_enum == ECPGt_struct || type_enum == ECPGt_union) ?
-		ECPGstruct_member_dup(struct_member_list[struct_level]) : NULL;
-
-		if (type_enum != ECPGt_varchar &&
-			type_enum != ECPGt_char &&
-			type_enum != ECPGt_unsigned_char &&
-			atoi(this->type->type_index) >= 0)
-			mmerror(PARSE_ERROR, ET_ERROR, "no multidimensional array support for simple data types");
-
-		types = this;
-	}
-}
-%}
-
-%name-prefix="base_yy"
-%locations
-
-%union {
-	double	dval;
-	char	*str;
-	int     ival;
-	struct	when		action;
-	struct	index		index;
-	int		tagname;
-	struct	this_type	type;
-	enum	ECPGttype	type_enum;
-	enum	ECPGdtype	dtype_enum;
-	struct	fetch_desc	descriptor;
-	struct  su_symbol	struct_union;
-	struct	prep		prep;
-}
-/* tokens */
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.384 2008/11/14 16:25:34 meskes Exp $ */
-/* special embedded SQL token */
-%token  SQL_ALLOCATE SQL_AUTOCOMMIT SQL_BOOL SQL_BREAK
-                SQL_CALL SQL_CARDINALITY SQL_CONNECT
-                SQL_COUNT 
-                SQL_DATETIME_INTERVAL_CODE
-                SQL_DATETIME_INTERVAL_PRECISION SQL_DESCRIBE
-                SQL_DESCRIPTOR SQL_DISCONNECT SQL_FOUND
-                SQL_FREE SQL_GET SQL_GO SQL_GOTO SQL_IDENTIFIED
-                SQL_INDICATOR SQL_KEY_MEMBER SQL_LENGTH
-                SQL_LONG SQL_NULLABLE SQL_OCTET_LENGTH
-                SQL_OPEN SQL_OUTPUT SQL_REFERENCE
-                SQL_RETURNED_LENGTH SQL_RETURNED_OCTET_LENGTH SQL_SCALE
-                SQL_SECTION SQL_SHORT SQL_SIGNED SQL_SQL SQL_SQLERROR
-                SQL_SQLPRINT SQL_SQLWARNING SQL_START SQL_STOP
-                SQL_STRUCT SQL_UNSIGNED SQL_VAR SQL_WHENEVER
-
-/* C token */
-%token  S_ADD S_AND S_ANYTHING S_AUTO S_CONST S_DEC S_DIV
-                S_DOTPOINT S_EQUAL S_EXTERN S_INC S_LSHIFT S_MEMPOINT
-                S_MEMBER S_MOD S_MUL S_NEQUAL S_OR S_REGISTER S_RSHIFT
-                S_STATIC S_SUB S_VOLATILE
-                S_TYPEDEF
-
-%token TYPECAST
-%token CSTRING CVARIABLE CPP_LINE IP 
-%token DOLCONST ECONST NCONST UCONST UIDENT
-
-/* types */
-%type <str> stmt
-%type <str> CreateRoleStmt
-%type <str> opt_with
-%type <str> OptRoleList
-%type <str> OptRoleElem
-%type <str> CreateUserStmt
-%type <str> AlterRoleStmt
-%type <str> AlterRoleSetStmt
-%type <str> AlterUserStmt
-%type <str> AlterUserSetStmt
-%type <str> DropRoleStmt
-%type <str> DropUserStmt
-%type <str> CreateGroupStmt
-%type <str> AlterGroupStmt
-%type <str> add_drop
-%type <str> DropGroupStmt
-%type <str> CreateSchemaStmt
-%type <str> OptSchemaName
-%type <str> OptSchemaEltList
-%type <str> schema_stmt
-%type <str> VariableSetStmt
-%type <str> set_rest
-%type <str> var_name
-%type <str> var_list
-%type <str> var_value
-%type <str> iso_level
-%type <str> opt_boolean
-%type <str> zone_value
-%type <str> opt_encoding
-%type <str> ColId_or_Sconst
-%type <str> VariableResetStmt
-%type <str> SetResetClause
-%type <str> VariableShowStmt
-%type <str> ConstraintsSetStmt
-%type <str> constraints_set_list
-%type <str> constraints_set_mode
-%type <str> CheckPointStmt
-%type <str> DiscardStmt
-%type <str> AlterTableStmt
-%type <str> alter_table_cmds
-%type <str> alter_table_cmd
-%type <str> alter_column_default
-%type <str> opt_drop_behavior
-%type <str> alter_using
-%type <str> ClosePortalStmt
-%type <str> CopyStmt
-%type <str> copy_from
-%type <str> copy_file_name
-%type <str> copy_opt_list
-%type <str> copy_opt_item
-%type <str> opt_binary
-%type <str> opt_oids
-%type <str> copy_delimiter
-%type <str> opt_using
-%type <str> CreateStmt
-%type <str> OptTemp
-%type <str> OptTableElementList
-%type <str> TableElementList
-%type <str> TableElement
-%type <str> columnDef
-%type <str> ColQualList
-%type <str> ColConstraint
-%type <str> ColConstraintElem
-%type <str> ConstraintAttr
-%type <str> TableLikeClause
-%type <str> TableLikeOptionList
-%type <str> TableLikeOption
-%type <str> TableConstraint
-%type <str> ConstraintElem
-%type <str> opt_column_list
-%type <str> columnList
-%type <str> columnElem
-%type <str> key_match
-%type <str> key_actions
-%type <str> key_update
-%type <str> key_delete
-%type <str> key_action
-%type <str> OptInherit
-%type <str> OptWith
-%type <str> OnCommitOption
-%type <str> OptTableSpace
-%type <str> OptConsTableSpace
-%type <str> create_as_target
-%type <str> OptCreateAs
-%type <str> CreateAsList
-%type <str> CreateAsElement
-%type <str> opt_with_data
-%type <str> CreateSeqStmt
-%type <str> AlterSeqStmt
-%type <str> OptSeqOptList
-%type <str> SeqOptList
-%type <str> SeqOptElem
-%type <str> opt_by
-%type <str> NumericOnly
-%type <str> CreatePLangStmt
-%type <str> opt_trusted
-%type <str> handler_name
-%type <str> opt_validator
-%type <str> opt_lancompiler
-%type <str> DropPLangStmt
-%type <str> opt_procedural
-%type <str> CreateTableSpaceStmt
-%type <str> OptTableSpaceOwner
-%type <str> DropTableSpaceStmt
-%type <str> CreateTrigStmt
-%type <str> TriggerActionTime
-%type <str> TriggerEvents
-%type <str> TriggerOneEvent
-%type <str> TriggerForSpec
-%type <str> TriggerForOpt
-%type <str> TriggerForType
-%type <str> TriggerFuncArgs
-%type <str> TriggerFuncArg
-%type <str> OptConstrFromTable
-%type <str> ConstraintAttributeSpec
-%type <str> ConstraintDeferrabilitySpec
-%type <str> ConstraintTimeSpec
-%type <str> DropTrigStmt
-%type <str> CreateAssertStmt
-%type <str> DropAssertStmt
-%type <str> DefineStmt
-%type <str> definition
-%type <str> def_list
-%type <str> def_elem
-%type <str> def_arg
-%type <str> aggr_args
-%type <str> old_aggr_definition
-%type <str> old_aggr_list
-%type <str> old_aggr_elem
-%type <str> enum_val_list
-%type <str> CreateOpClassStmt
-%type <str> opclass_item_list
-%type <str> opclass_item
-%type <str> opt_default
-%type <str> opt_opfamily
-%type <str> opt_recheck
-%type <str> CreateOpFamilyStmt
-%type <str> AlterOpFamilyStmt
-%type <str> opclass_drop_list
-%type <str> opclass_drop
-%type <str> DropOpClassStmt
-%type <str> DropOpFamilyStmt
-%type <str> DropOwnedStmt
-%type <str> ReassignOwnedStmt
-%type <str> DropStmt
-%type <str> drop_type
-%type <str> any_name_list
-%type <str> any_name
-%type <str> attrs
-%type <str> TruncateStmt
-%type <str> opt_restart_seqs
-%type <str> CommentStmt
-%type <str> comment_type
-%type <str> comment_text
-%type <str> FetchStmt
-%type <str> fetch_direction
-%type <str> from_in
-%type <str> GrantStmt
-%type <str> RevokeStmt
-%type <str> privileges
-%type <str> privilege_list
-%type <str> privilege
-%type <str> privilege_target
-%type <str> grantee_list
-%type <str> grantee
-%type <str> opt_grant_grant_option
-%type <str> function_with_argtypes_list
-%type <str> function_with_argtypes
-%type <str> GrantRoleStmt
-%type <str> RevokeRoleStmt
-%type <str> opt_grant_admin_option
-%type <str> opt_granted_by
-%type <str> IndexStmt
-%type <str> index_opt_unique
-%type <str> access_method_clause
-%type <str> index_params
-%type <str> index_elem
-%type <str> opt_class
-%type <str> opt_asc_desc
-%type <str> opt_nulls_order
-%type <str> CreateFunctionStmt
-%type <str> opt_or_replace
-%type <str> func_args
-%type <str> func_args_list
-%type <str> func_arg
-%type <str> arg_class
-%type <str> param_name
-%type <str> func_return
-%type <str> func_type
-%type <str> createfunc_opt_list
-%type <str> common_func_opt_item
-%type <str> createfunc_opt_item
-%type <str> func_as
-%type <str> opt_definition
-%type <str> table_func_column
-%type <str> table_func_column_list
-%type <str> AlterFunctionStmt
-%type <str> alterfunc_opt_list
-%type <str> opt_restrict
-%type <str> RemoveFuncStmt
-%type <str> RemoveAggrStmt
-%type <str> RemoveOperStmt
-%type <str> oper_argtypes
-%type <str> any_operator
-%type <str> CreateCastStmt
-%type <str> cast_context
-%type <str> DropCastStmt
-%type <str> opt_if_exists
-%type <str> ReindexStmt
-%type <str> reindex_type
-%type <str> opt_force
-%type <str> RenameStmt
-%type <str> opt_column
-%type <str> opt_set_data
-%type <str> AlterObjectSchemaStmt
-%type <str> AlterOwnerStmt
-%type <str> RuleActionList
-%type <str> RuleActionMulti
-%type <str> RuleActionStmt
-%type <str> RuleActionStmtOrEmpty
-%type <str> event
-%type <str> opt_instead
-%type <str> DropRuleStmt
-%type <str> NotifyStmt
-%type <str> ListenStmt
-%type <str> UnlistenStmt
-%type <str> TransactionStmt
-%type <str> opt_transaction
-%type <str> transaction_mode_item
-%type <str> transaction_mode_list
-%type <str> transaction_mode_list_or_empty
-%type <str> ViewStmt
-%type <str> opt_check_option
-%type <str> LoadStmt
-%type <str> CreatedbStmt
-%type <str> createdb_opt_list
-%type <str> createdb_opt_item
-%type <str> opt_equal
-%type <str> AlterDatabaseStmt
-%type <str> AlterDatabaseSetStmt
-%type <str> alterdb_opt_list
-%type <str> alterdb_opt_item
-%type <str> DropdbStmt
-%type <str> CreateDomainStmt
-%type <str> AlterDomainStmt
-%type <str> opt_as
-%type <str> AlterTSDictionaryStmt
-%type <str> AlterTSConfigurationStmt
-%type <str> CreateConversionStmt
-%type <str> ClusterStmt
-%type <str> cluster_index_specification
-%type <str> VacuumStmt
-%type <str> AnalyzeStmt
-%type <str> analyze_keyword
-%type <str> opt_verbose
-%type <str> opt_full
-%type <str> opt_freeze
-%type <str> opt_name_list
-%type <str> ExplainStmt
-%type <str> ExplainableStmt
-%type <str> opt_analyze
-%type <prep> PrepareStmt
-%type <str> prep_type_clause
-%type <str> PreparableStmt
-%type <str> ExecuteStmt
-%type <str> execute_param_clause
-%type <str> InsertStmt
-%type <str> insert_rest
-%type <str> insert_column_list
-%type <str> insert_column_item
-%type <str> returning_clause
-%type <str> DeleteStmt
-%type <str> using_clause
-%type <str> LockStmt
-%type <str> opt_lock
-%type <str> lock_type
-%type <str> opt_nowait
-%type <str> UpdateStmt
-%type <str> set_clause_list
-%type <str> set_clause
-%type <str> single_set_clause
-%type <str> multiple_set_clause
-%type <str> set_target
-%type <str> set_target_list
-%type <str> DeclareCursorStmt
-%type <str> cursor_options
-%type <str> opt_hold
-%type <str> SelectStmt
-%type <str> select_with_parens
-%type <str> select_no_parens
-%type <str> select_clause
-%type <str> simple_select
-%type <str> with_clause
-%type <str> cte_list
-%type <str> common_table_expr
-%type <str> into_clause
-%type <str> OptTempTableName
-%type <str> opt_table
-%type <str> opt_all
-%type <str> opt_distinct
-%type <str> opt_sort_clause
-%type <str> sort_clause
-%type <str> sortby_list
-%type <str> sortby
-%type <str> select_limit
-%type <str> opt_select_limit
-%type <str> select_limit_value
-%type <str> opt_select_fetch_first_value
-%type <str> select_offset_value
-%type <str> select_offset_value2
-%type <str> row_or_rows
-%type <str> first_or_next
-%type <str> group_clause
-%type <str> having_clause
-%type <str> for_locking_clause
-%type <str> opt_for_locking_clause
-%type <str> for_locking_items
-%type <str> for_locking_item
-%type <str> locked_rels_list
-%type <str> values_clause
-%type <str> from_clause
-%type <str> from_list
-%type <str> table_ref
-%type <str> joined_table
-%type <str> alias_clause
-%type <str> join_type
-%type <str> join_outer
-%type <str> join_qual
-%type <str> relation_expr
-%type <str> relation_expr_opt_alias
-%type <str> func_table
-%type <str> where_clause
-%type <str> where_or_current_clause
-%type <str> TableFuncElementList
-%type <str> TableFuncElement
-%type <str> Typename
-%type <index> opt_array_bounds
-%type <str> SimpleTypename
-%type <str> ConstTypename
-%type <str> GenericType
-%type <str> opt_type_modifiers
-%type <str> Numeric
-%type <str> opt_float
-%type <str> Bit
-%type <str> ConstBit
-%type <str> BitWithLength
-%type <str> BitWithoutLength
-%type <str> Character
-%type <str> ConstCharacter
-%type <str> CharacterWithLength
-%type <str> CharacterWithoutLength
-%type <str> character
-%type <str> opt_varying
-%type <str> opt_charset
-%type <str> ConstDatetime
-%type <str> ConstInterval
-%type <str> opt_timezone
-%type <str> opt_interval
-%type <str> interval_second
-%type <str> a_expr
-%type <str> b_expr
-%type <str> c_expr
-%type <str> func_expr
-%type <str> xml_root_version
-%type <str> opt_xml_root_standalone
-%type <str> xml_attributes
-%type <str> xml_attribute_list
-%type <str> xml_attribute_el
-%type <str> document_or_content
-%type <str> xml_whitespace_option
-%type <str> row
-%type <str> sub_type
-%type <str> all_Op
-%type <str> MathOp
-%type <str> qual_Op
-%type <str> qual_all_Op
-%type <str> subquery_Op
-%type <str> expr_list
-%type <str> type_list
-%type <str> array_expr
-%type <str> array_expr_list
-%type <str> extract_list
-%type <str> extract_arg
-%type <str> overlay_list
-%type <str> overlay_placing
-%type <str> position_list
-%type <str> substr_list
-%type <str> substr_from
-%type <str> substr_for
-%type <str> trim_list
-%type <str> in_expr
-%type <str> case_expr
-%type <str> when_clause_list
-%type <str> when_clause
-%type <str> case_default
-%type <str> case_arg
-%type <str> columnref
-%type <str> indirection_el
-%type <str> indirection
-%type <str> opt_indirection
-%type <str> opt_asymmetric
-%type <str> ctext_expr
-%type <str> ctext_expr_list
-%type <str> ctext_row
-%type <str> target_list
-%type <str> target_el
-%type <str> relation_name
-%type <str> qualified_name_list
-%type <str> qualified_name
-%type <str> name_list
-%type <str> name
-%type <str> database_name
-%type <str> access_method
-%type <str> attr_name
-%type <str> index_name
-%type <str> file_name
-%type <str> func_name
-%type <str> AexprConst
-%type <str> Iconst
-%type <str> RoleId
-%type <str> SignedIconst
-%type <str> ColId
-%type <str> type_function_name
-%type <str> col_name_keyword
-%type <str> type_func_name_keyword
-%type <str> reserved_keyword
-%type <str> SpecialRuleRelation
-/* ecpgtype */
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.384 2008/11/14 16:25:34 meskes Exp $ */
-%type <str> ECPGAllocateDescr
-%type <str> ECPGCKeywords
-%type <str> ECPGColId
-%type <str> ECPGColLabel
-%type <str> ECPGColLabelCommon
-%type <str> ECPGConnect
-%type <str> ECPGCursorStmt
-%type <str> ECPGDeallocateDescr
-%type <str> ECPGDeclaration
-%type <str> ECPGDeclare
-%type <str> ECPGDescribe
-%type <str> ECPGDisconnect
-%type <str> ECPGExecuteImmediateStmt
-%type <str> ECPGFree
-%type <str> ECPGGetDescHeaderItem
-%type <str> ECPGGetDescItem
-%type <str> ECPGGetDescriptorHeader
-%type <str> ECPGKeywords
-%type <str> ECPGKeywords_rest
-%type <str> ECPGKeywords_vanames
-%type <str> ECPGOpen
-%type <str> ECPGSetAutocommit
-%type <str> ECPGSetConnection
-%type <str> ECPGSetDescHeaderItem
-%type <str> ECPGSetDescItem
-%type <str> ECPGSetDescriptorHeader
-%type <str> ECPGTypeName
-%type <str> ECPGTypedef
-%type <str> ECPGVar
-%type <str> ECPGVarDeclaration
-%type <str> ECPGWhenever
-%type <str> ECPGunreserved
-%type <str> ECPGunreserved_con
-%type <str> ECPGunreserved_interval
-%type <str> UsingConst
-%type <str> UsingValue
-%type <str> c_anything
-%type <str> c_args
-%type <str> c_list
-%type <str> c_stuff
-%type <str> c_stuff_item
-%type <str> c_term
-%type <str> c_thing
-%type <str> char_variable
-%type <str> civar
-%type <str> civarind
-%type <str> ColLabel
-%type <str> connect_options
-%type <str> connection_object
-%type <str> connection_target
-%type <str> coutputvariable
-%type <str> cvariable
-%type <str> db_prefix
-%type <str> CreateAsStmt
-%type <str> DeallocateStmt
-%type <str> dis_name
-%type <str> ecpg_bconst
-%type <str> ecpg_fconst
-%type <str> ecpg_ident
-%type <str> ecpg_interval
-%type <str> ecpg_into
-%type <str> ecpg_param
-%type <str> ecpg_sconst
-%type <str> ecpg_using
-%type <str> ecpg_xconst
-%type <str> enum_definition
-%type <str> enum_type
-%type <str> execstring
-%type <str> execute_rest
-%type <str> indicator
-%type <str> into_descriptor
-%type <str> Iresult
-%type <str> on_off
-%type <str> opt_bit_field
-%type <str> opt_connection_name
-%type <str> opt_database_name
-%type <str> opt_ecpg_using
-%type <str> opt_initializer
-%type <str> opt_options
-%type <str> opt_output
-%type <str> opt_pointer
-%type <str> opt_port
-%type <str> opt_reference
-%type <str> opt_scale
-%type <str> opt_server
-%type <str> opt_user
-%type <str> opt_opt_value
-%type <str> ora_user
-%type <str> precision
-%type <str> prepared_name
-%type <str> quoted_ident_stringvar
-%type <str> RuleStmt
-%type <str> s_struct_union
-%type <str> server
-%type <str> server_name
-%type <str> single_vt_declaration
-%type <str> storage_clause
-%type <str> storage_declaration
-%type <str> storage_modifier
-%type <str> struct_union_type
-%type <str> struct_union_type_with_symbol
-%type <str> symbol
-%type <str> type_declaration
-%type <str> unreserved_keyword 
-%type <str> user_name
-%type <str> using_descriptor
-%type <str> var_declaration
-%type <str> var_type_declarations
-%type <str> variable
-%type <str> variable_declarations
-%type <str> variable_list
-%type <str> vt_declarations 
-
-%type <str> Op
-%type <str> IntConstVar
-%type <str> AllConstVar
-%type <str> CSTRING
-%type <str> CPP_LINE
-%type <str> CVARIABLE
-%type <str> DOLCONST
-%type <str> ECONST
-%type <str> NCONST
-%type <str> SCONST
-%type <str> UCONST
-%type <str> UIDENT
-
-%type  <struct_union> s_struct_union_symbol
-
-%type  <descriptor> ECPGGetDescriptor
-%type  <descriptor> ECPGSetDescriptor
-
-%type  <type_enum> simple_type
-%type  <type_enum> signed_type
-%type  <type_enum> unsigned_type
-
-%type  <dtype_enum> descriptor_item
-%type  <dtype_enum> desc_header_item
-
-%type  <type>   var_type
-
-%type  <action> action
-
-/* orig_tokens */
- %token ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER
- AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC
- ASSERTION ASSIGNMENT ASYMMETRIC AT AUTHORIZATION
-
- BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
- BOOLEAN_P BOTH BY
-
- CACHE CALLED CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHAR_P
- CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
- CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT
- COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS
- CONTENT_P CONTINUE_P CONVERSION_P COPY COST CREATE CREATEDB
- CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P
- CURRENT_CATALOG CURRENT_DATE CURRENT_ROLE CURRENT_SCHEMA
- CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
-
- DATA_P DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS
- DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DESC
- DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP
-
- EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ENUM_P ESCAPE EXCEPT EXCLUDING
- EXCLUSIVE EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT
-
- FALSE_P FAMILY FETCH FIRST_P FLOAT_P FOR FORCE FOREIGN FORWARD
- FREEZE FROM FULL FUNCTION
-
- GLOBAL GRANT GRANTED GREATEST GROUP_P
-
- HANDLER HAVING HEADER_P HOLD HOUR_P
-
- IDENTITY_P IF_P ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IN_P
- INCLUDING INCREMENT INDEX INDEXES INHERIT INHERITS INITIALLY
- INNER_P INOUT INPUT_P INSENSITIVE INSERT INSTEAD INT_P INTEGER
- INTERSECT INTERVAL INTO INVOKER IS ISNULL ISOLATION
-
- JOIN
-
- KEY
-
- LANCOMPILER LANGUAGE LARGE_P LAST_P LEADING LEAST LEFT LEVEL
- LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP LOCATION
- LOCK_P LOGIN_P
-
- MAPPING MATCH MAXVALUE MINUTE_P MINVALUE MODE MONTH_P MOVE
-
- NAME_P NAMES NATIONAL NATURAL NCHAR NEW NEXT NO NOCREATEDB
- NOCREATEROLE NOCREATEUSER NOINHERIT NOLOGIN_P NONE NOSUPERUSER
- NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF NULLS_P NUMERIC
-
- OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR
- ORDER OUT_P OUTER_P OVERLAPS OVERLAY OWNED OWNER
-
- PARSER PARTIAL PASSWORD PLACING PLANS POSITION
- PRECISION PRESERVE PREPARE PREPARED PRIMARY
- PRIOR PRIVILEGES PROCEDURAL PROCEDURE
-
- QUOTE
-
- READ REAL REASSIGN RECHECK RECURSIVE REFERENCES REINDEX RELATIVE_P RELEASE
- RENAME REPEATABLE REPLACE REPLICA RESET RESTART RESTRICT RETURNING RETURNS
- REVOKE RIGHT ROLE ROLLBACK ROW ROWS RULE
-
- SAVEPOINT SCHEMA SCROLL SEARCH SECOND_P SECURITY SELECT SEQUENCE
- SERIALIZABLE SESSION SESSION_USER SET SETOF SHARE
- SHOW SIMILAR SIMPLE SMALLINT SOME STABLE STANDALONE_P START STATEMENT
- STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING SUPERUSER_P
- SYMMETRIC SYSID SYSTEM_P
-
- TABLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIME TIMESTAMP
- TO TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P
- TRUNCATE TRUSTED TYPE_P
-
- UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL
- UPDATE USER USING
-
- VACUUM VALID VALIDATOR VALUE_P VALUES VARCHAR VARIADIC VARYING
- VERBOSE VERSION_P VIEW VOLATILE
-
- WHEN WHERE WHITESPACE_P WITH WITHOUT WORK WRITE
-
- XML_P XMLATTRIBUTES XMLCONCAT XMLELEMENT XMLFOREST XMLPARSE
- XMLPI XMLROOT XMLSERIALIZE
-
- YEAR_P YES_P
-
- ZONE
-
-
-
-
-
- %token NULLS_FIRST NULLS_LAST WITH_TIME
-
-
- %token IDENT FCONST SCONST BCONST XCONST Op
- %token ICONST PARAM
-
-
- %nonassoc SET
- %left UNION EXCEPT
- %left INTERSECT
- %left OR
- %left AND
- %right NOT
- %right '='
- %nonassoc '<' '>'
- %nonassoc LIKE ILIKE SIMILAR
- %nonassoc ESCAPE
- %nonassoc OVERLAPS
- %nonassoc BETWEEN
- %nonassoc IN_P
- %left POSTFIXOP
- %nonassoc IDENT
-%nonassoc CSTRING
-%nonassoc UIDENT
- %left Op OPERATOR
- %nonassoc NOTNULL
- %nonassoc ISNULL
- %nonassoc IS NULL_P TRUE_P FALSE_P UNKNOWN
- %left '+' '-'
- %left '*' '/' '%'
- %left '^'
-
- %left AT ZONE
- %right UMINUS
- %left '[' ']'
- %left '(' ')'
- %left TYPECAST
- %left '.'
-
-
-
-
-
-
-
- %left JOIN CROSS LEFT FULL RIGHT INNER_P NATURAL
-
- %right PRESERVE STRIP_P
-%%
-prog: statements;
-/* rules */
- stmt:
- AlterDatabaseStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterDatabaseSetStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterDomainStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterFunctionStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterGroupStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterObjectSchemaStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterOwnerStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterSeqStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterTableStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterRoleSetStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterRoleStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterTSConfigurationStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterTSDictionaryStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterUserSetStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterUserStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AnalyzeStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CheckPointStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  ClosePortalStmt
-	{
-		if (INFORMIX_MODE)
-		{
-			if (pg_strcasecmp($1+strlen("close "), "database") == 0)
-			{
-				if (connection)
-					mmerror(PARSE_ERROR, ET_ERROR, "no at option for close database statement\n");
-
-				fprintf(yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");");
-				whenever_action(2);
-				free($1);
-				break;
-			}
-		}
-
-		output_statement($1, 0, ECPGst_normal);
-	}
-|  ClusterStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CommentStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  ConstraintsSetStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CopyStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateAsStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateAssertStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateCastStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateConversionStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateDomainStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateFunctionStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateGroupStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateOpClassStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateOpFamilyStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  AlterOpFamilyStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreatePLangStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateSchemaStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateSeqStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateTableSpaceStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateTrigStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateRoleStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreateUserStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  CreatedbStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DeallocateStmt
-	{
-		if (connection)
-			mmerror(PARSE_ERROR, ET_ERROR, "no at option for deallocate statement\n");
-
-		output_deallocate_prepare_statement($1);
-	}
-|  DeclareCursorStmt
-	{ output_simple_statement($1); }
-|  DefineStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DeleteStmt
-	{ output_statement($1, 1, ECPGst_normal); }
-|  DiscardStmt
-	{ output_statement($1, 1, ECPGst_normal); }
-|  DropAssertStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropCastStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropGroupStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropOpClassStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropOpFamilyStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropOwnedStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropPLangStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropRuleStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropTableSpaceStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropTrigStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropRoleStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropUserStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  DropdbStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  ExecuteStmt
-	{ output_statement($1, 1, ECPGst_execute); }
-|  ExplainStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  FetchStmt
-	{ output_statement($1, 1, ECPGst_normal); }
-|  GrantStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  GrantRoleStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  IndexStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  InsertStmt
-	{ output_statement($1, 1, ECPGst_normal); }
-|  ListenStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  LoadStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  LockStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  NotifyStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  PrepareStmt
-	{
-		if ($1.type == NULL || strlen($1.type) == 0)
-			output_prepare_statement($1.name, $1.stmt);
-		else	
-			output_statement(cat_str(5, make_str("prepare"), $1.name, $1.type, make_str("as"), $1.stmt), 0, ECPGst_normal);
-	}
-|  ReassignOwnedStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  ReindexStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  RemoveAggrStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  RemoveFuncStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  RemoveOperStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  RenameStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  RevokeStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  RevokeRoleStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  RuleStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  SelectStmt
-	{ output_statement($1, 1, ECPGst_normal); }
-|  TransactionStmt
-	{
-		fprintf(yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
-		whenever_action(2);
-		free($1);
-	}
-|  TruncateStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  UnlistenStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  UpdateStmt
-	{ output_statement($1, 1, ECPGst_normal); }
-|  VacuumStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  VariableResetStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  VariableSetStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  VariableShowStmt
- { output_statement($1, 0, ECPGst_normal); }
-|  ViewStmt
- { output_statement($1, 0, ECPGst_normal); }
-	| ECPGAllocateDescr
-	{
-		fprintf(yyout,"ECPGallocate_desc(__LINE__, %s);",$1);
-		whenever_action(0);
-		free($1);
-	}
-	| ECPGConnect
-	{
-		if (connection)
-			mmerror(PARSE_ERROR, ET_ERROR, "no at option for connect statement\n");
-
-		fprintf(yyout, "{ ECPGconnect(__LINE__, %d, %s, %d); ", compat, $1, autocommit);
-		reset_variables();
-		whenever_action(2);
-		free($1);
-	}
-	| ECPGCursorStmt
-	{
-		output_simple_statement($1);
-	}
-	| ECPGDeallocateDescr
-	{
-		if (connection)
-			mmerror(PARSE_ERROR, ET_ERROR, "no at option for deallocate statement\n");
-		fprintf(yyout,"ECPGdeallocate_desc(__LINE__, %s);",$1);
-		whenever_action(0);
-		free($1);
-	}
-	| ECPGDeclare
-	{
-		output_simple_statement($1);
-	}
-	| ECPGDescribe
-	{
-		fprintf(yyout, "{ ECPGdescribe(__LINE__, %s,", $1);
-		dump_variables(argsresult, 1);
-		fputs("ECPGt_EORT);", yyout);
-		fprintf(yyout, "}");
-		output_line_number();
-
-		free($1);
-	}
-	| ECPGDisconnect
-	{
-		if (connection)
-			mmerror(PARSE_ERROR, ET_ERROR, "no at option for disconnect statement\n");
-
-		fprintf(yyout, "{ ECPGdisconnect(__LINE__, %s);",
-				$1 ? $1 : "\"CURRENT\"");
-		whenever_action(2);
-		free($1);
-	}
-	| ECPGExecuteImmediateStmt	{ output_statement($1, 0, ECPGst_exec_immediate); }
-	| ECPGFree
-	{
-		const char *con = connection ? connection : "NULL";
-		if (strcmp($1, "all"))
-			fprintf(yyout, "{ ECPGdeallocate(__LINE__, %d, %s, \"%s\");", compat, con, $1);
-		else
-			fprintf(yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con);
-
-		whenever_action(2);
-		free($1);
-	}
-	| ECPGGetDescriptor
-	{
-		lookup_descriptor($1.name, connection);
-		output_get_descr($1.name, $1.str);
-		free($1.name);
-		free($1.str);
-	}
-	| ECPGGetDescriptorHeader
-	{
-		lookup_descriptor($1, connection);
-		output_get_descr_header($1);
-		free($1);
-	}
-	| ECPGOpen
-	{
-		struct cursor *ptr;
-
-		if ((ptr = add_additional_variables($1, true)) != NULL)
-		{
-			connection = ptr->connection ? mm_strdup(ptr->connection) : NULL;
-			output_statement(mm_strdup(ptr->command), 0, 0);
-			ptr->opened = true;
-		}
-	}
-	| ECPGSetAutocommit
-	{
-		fprintf(yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL");
-		whenever_action(2);
-		free($1);
-	}
-	| ECPGSetConnection
-	{
-		if (connection)
-			mmerror(PARSE_ERROR, ET_ERROR, "no at option for set connection statement\n");
-
-		fprintf(yyout, "{ ECPGsetconn(__LINE__, %s);", $1);
-		whenever_action(2);
-		free($1);
-	}
-	| ECPGSetDescriptor
-	{
-		lookup_descriptor($1.name, connection);
-		output_set_descr($1.name, $1.str);
-		free($1.name);
-		free($1.str);
-	}
-	| ECPGSetDescriptorHeader
-	{
-		lookup_descriptor($1, connection);
-		output_set_descr_header($1);
-		free($1);
-	}
-	| ECPGTypedef
-	{
-		if (connection)
-			mmerror(PARSE_ERROR, ET_ERROR, "no at option for typedef statement\n");
-
-		fprintf(yyout, "%s", $1);
-		free($1);
-		output_line_number();
-	}
-	| ECPGVar
-	{
-		if (connection)
-			mmerror(PARSE_ERROR, ET_ERROR, "no at option for var statement\n");
-
-		output_simple_statement($1);
-	}
-	| ECPGWhenever
-	{
-		if (connection)
-			mmerror(PARSE_ERROR, ET_ERROR, "no at option for whenever statement\n");
-
-		output_simple_statement($1);
-	}
-| 
- { $$ = NULL; }
-;
-
-
- CreateRoleStmt:
- CREATE ROLE RoleId opt_with OptRoleList
- { 
- $$ = cat_str(4,make_str("create role"),$3,$4,$5);
-}
-;
-
-
- opt_with:
- WITH
- { 
- $$ = make_str("with");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OptRoleList:
- OptRoleList OptRoleElem
- { 
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OptRoleElem:
- PASSWORD ecpg_sconst
- { 
- $$ = cat_str(2,make_str("password"),$2);
-}
-|  PASSWORD NULL_P
- { 
- $$ = make_str("password null");
-}
-|  ENCRYPTED PASSWORD ecpg_sconst
- { 
- $$ = cat_str(2,make_str("encrypted password"),$3);
-}
-|  UNENCRYPTED PASSWORD ecpg_sconst
- { 
- $$ = cat_str(2,make_str("unencrypted password"),$3);
-}
-|  SUPERUSER_P
- { 
- $$ = make_str("superuser");
-}
-|  NOSUPERUSER
- { 
- $$ = make_str("nosuperuser");
-}
-|  INHERIT
- { 
- $$ = make_str("inherit");
-}
-|  NOINHERIT
- { 
- $$ = make_str("noinherit");
-}
-|  CREATEDB
- { 
- $$ = make_str("createdb");
-}
-|  NOCREATEDB
- { 
- $$ = make_str("nocreatedb");
-}
-|  CREATEROLE
- { 
- $$ = make_str("createrole");
-}
-|  NOCREATEROLE
- { 
- $$ = make_str("nocreaterole");
-}
-|  CREATEUSER
- { 
- $$ = make_str("createuser");
-}
-|  NOCREATEUSER
- { 
- $$ = make_str("nocreateuser");
-}
-|  LOGIN_P
- { 
- $$ = make_str("login");
-}
-|  NOLOGIN_P
- { 
- $$ = make_str("nologin");
-}
-|  CONNECTION LIMIT SignedIconst
- { 
- $$ = cat_str(2,make_str("connection limit"),$3);
-}
-|  VALID UNTIL ecpg_sconst
- { 
- $$ = cat_str(2,make_str("valid until"),$3);
-}
-|  USER name_list
- { 
- $$ = cat_str(2,make_str("user"),$2);
-}
-|  SYSID Iconst
- { 
- $$ = cat_str(2,make_str("sysid"),$2);
-}
-|  ADMIN name_list
- { 
- $$ = cat_str(2,make_str("admin"),$2);
-}
-|  ROLE name_list
- { 
- $$ = cat_str(2,make_str("role"),$2);
-}
-|  IN_P ROLE name_list
- { 
- $$ = cat_str(2,make_str("in role"),$3);
-}
-|  IN_P GROUP_P name_list
- { 
- $$ = cat_str(2,make_str("in group"),$3);
-}
-;
-
-
- CreateUserStmt:
- CREATE USER RoleId opt_with OptRoleList
- { 
- $$ = cat_str(4,make_str("create user"),$3,$4,$5);
-}
-;
-
-
- AlterRoleStmt:
- ALTER ROLE RoleId opt_with OptRoleList
- { 
- $$ = cat_str(4,make_str("alter role"),$3,$4,$5);
-}
-;
-
-
- AlterRoleSetStmt:
- ALTER ROLE RoleId SetResetClause
- { 
- $$ = cat_str(3,make_str("alter role"),$3,$4);
-}
-;
-
-
- AlterUserStmt:
- ALTER USER RoleId opt_with OptRoleList
- { 
- $$ = cat_str(4,make_str("alter user"),$3,$4,$5);
-}
-;
-
-
- AlterUserSetStmt:
- ALTER USER RoleId SetResetClause
- { 
- $$ = cat_str(3,make_str("alter user"),$3,$4);
-}
-;
-
-
- DropRoleStmt:
- DROP ROLE name_list
- { 
- $$ = cat_str(2,make_str("drop role"),$3);
-}
-|  DROP ROLE IF_P EXISTS name_list
- { 
- $$ = cat_str(2,make_str("drop role if exists"),$5);
-}
-;
-
-
- DropUserStmt:
- DROP USER name_list
- { 
- $$ = cat_str(2,make_str("drop user"),$3);
-}
-|  DROP USER IF_P EXISTS name_list
- { 
- $$ = cat_str(2,make_str("drop user if exists"),$5);
-}
-;
-
-
- CreateGroupStmt:
- CREATE GROUP_P RoleId opt_with OptRoleList
- { 
- $$ = cat_str(4,make_str("create group"),$3,$4,$5);
-}
-;
-
-
- AlterGroupStmt:
- ALTER GROUP_P RoleId add_drop USER name_list
- { 
- $$ = cat_str(5,make_str("alter group"),$3,$4,make_str("user"),$6);
-}
-;
-
-
- add_drop:
- ADD_P
- { 
- $$ = make_str("add");
-}
-|  DROP
- { 
- $$ = make_str("drop");
-}
-;
-
-
- DropGroupStmt:
- DROP GROUP_P name_list
- { 
- $$ = cat_str(2,make_str("drop group"),$3);
-}
-|  DROP GROUP_P IF_P EXISTS name_list
- { 
- $$ = cat_str(2,make_str("drop group if exists"),$5);
-}
-;
-
-
- CreateSchemaStmt:
- CREATE SCHEMA OptSchemaName AUTHORIZATION RoleId OptSchemaEltList
- { 
- $$ = cat_str(5,make_str("create schema"),$3,make_str("authorization"),$5,$6);
-}
-|  CREATE SCHEMA ColId OptSchemaEltList
- { 
- $$ = cat_str(3,make_str("create schema"),$3,$4);
-}
-;
-
-
- OptSchemaName:
- ColId
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OptSchemaEltList:
- OptSchemaEltList schema_stmt
- { 
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- schema_stmt:
- CreateStmt
- { 
- $$ = $1;
-}
-|  IndexStmt
- { 
- $$ = $1;
-}
-|  CreateSeqStmt
- { 
- $$ = $1;
-}
-|  CreateTrigStmt
- { 
- $$ = $1;
-}
-|  GrantStmt
- { 
- $$ = $1;
-}
-|  ViewStmt
- { 
- $$ = $1;
-}
-;
-
-
- VariableSetStmt:
- SET set_rest
- { 
- $$ = cat_str(2,make_str("set"),$2);
-}
-|  SET LOCAL set_rest
- { 
- $$ = cat_str(2,make_str("set local"),$3);
-}
-|  SET SESSION set_rest
- { 
- $$ = cat_str(2,make_str("set session"),$3);
-}
-;
-
-
- set_rest:
- var_name TO var_list
- { 
- $$ = cat_str(3,$1,make_str("to"),$3);
-}
-|  var_name '=' var_list
- { 
- $$ = cat_str(3,$1,make_str("="),$3);
-}
-|  var_name TO DEFAULT
- { 
- $$ = cat_str(2,$1,make_str("to default"));
-}
-|  var_name '=' DEFAULT
- { 
- $$ = cat_str(2,$1,make_str("= default"));
-}
-|  var_name FROM CURRENT_P
- { 
- $$ = cat_str(2,$1,make_str("from current"));
-}
-|  TIME ZONE zone_value
- { 
- $$ = cat_str(2,make_str("time zone"),$3);
-}
-|  TRANSACTION transaction_mode_list
- { 
- $$ = cat_str(2,make_str("transaction"),$2);
-}
-|  SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list
- { 
- $$ = cat_str(2,make_str("session characteristics as transaction"),$5);
-}
-|  CATALOG_P ecpg_sconst
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = cat_str(2,make_str("catalog"),$2);
-}
-|  SCHEMA ecpg_sconst
- { 
- $$ = cat_str(2,make_str("schema"),$2);
-}
-|  NAMES opt_encoding
- { 
- $$ = cat_str(2,make_str("names"),$2);
-}
-|  ROLE ColId_or_Sconst
- { 
- $$ = cat_str(2,make_str("role"),$2);
-}
-|  SESSION AUTHORIZATION ColId_or_Sconst
- { 
- $$ = cat_str(2,make_str("session authorization"),$3);
-}
-|  SESSION AUTHORIZATION DEFAULT
- { 
- $$ = make_str("session authorization default");
-}
-|  XML_P OPTION document_or_content
- { 
- $$ = cat_str(2,make_str("xml option"),$3);
-}
-;
-
-
- var_name:
-ECPGColId
- { 
- $$ = $1;
-}
-|  var_name '.' ColId
- { 
- $$ = cat_str(3,$1,make_str("."),$3);
-}
-;
-
-
- var_list:
- var_value
- { 
- $$ = $1;
-}
-|  var_list ',' var_value
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- var_value:
- opt_boolean
- { 
- $$ = $1;
-}
-|  ColId_or_Sconst
- { 
- $$ = $1;
-}
-|  NumericOnly
- { 
-		if ($1[1] == '$')
-		{
-			free($1);
-			$1 = make_str("$0");
-		}
-
- $$ = $1;
-}
-;
-
-
- iso_level:
- READ UNCOMMITTED
- { 
- $$ = make_str("read uncommitted");
-}
-|  READ COMMITTED
- { 
- $$ = make_str("read committed");
-}
-|  REPEATABLE READ
- { 
- $$ = make_str("repeatable read");
-}
-|  SERIALIZABLE
- { 
- $$ = make_str("serializable");
-}
-;
-
-
- opt_boolean:
- TRUE_P
- { 
- $$ = make_str("true");
-}
-|  FALSE_P
- { 
- $$ = make_str("false");
-}
-|  ON
- { 
- $$ = make_str("on");
-}
-|  OFF
- { 
- $$ = make_str("off");
-}
-;
-
-
- zone_value:
- ecpg_sconst
- { 
- $$ = $1;
-}
-|  ecpg_ident
- { 
- $$ = $1;
-}
-|  ConstInterval ecpg_sconst opt_interval
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  ConstInterval '(' Iconst ')' ecpg_sconst opt_interval
- { 
- $$ = cat_str(6,$1,make_str("("),$3,make_str(")"),$5,$6);
-}
-|  NumericOnly
- { 
- $$ = $1;
-}
-|  DEFAULT
- { 
- $$ = make_str("default");
-}
-|  LOCAL
- { 
- $$ = make_str("local");
-}
-;
-
-
- opt_encoding:
- ecpg_sconst
- { 
- $$ = $1;
-}
-|  DEFAULT
- { 
- $$ = make_str("default");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ColId_or_Sconst:
- ColId
- { 
- $$ = $1;
-}
-|  ecpg_sconst
- { 
- $$ = $1;
-}
-;
-
-
- VariableResetStmt:
- RESET var_name
- { 
- $$ = cat_str(2,make_str("reset"),$2);
-}
-|  RESET TIME ZONE
- { 
- $$ = make_str("reset time zone");
-}
-|  RESET TRANSACTION ISOLATION LEVEL
- { 
- $$ = make_str("reset transaction isolation level");
-}
-|  RESET SESSION AUTHORIZATION
- { 
- $$ = make_str("reset session authorization");
-}
-|  RESET ALL
- { 
- $$ = make_str("reset all");
-}
-;
-
-
- SetResetClause:
- SET set_rest
- { 
- $$ = cat_str(2,make_str("set"),$2);
-}
-|  VariableResetStmt
- { 
- $$ = $1;
-}
-;
-
-
- VariableShowStmt:
-SHOW var_name ecpg_into
- { 
- $$ = cat_str(2,make_str("show"),$2);
-}
-| SHOW TIME ZONE ecpg_into
- { 
- $$ = make_str("show time zone");
-}
-| SHOW TRANSACTION ISOLATION LEVEL ecpg_into
- { 
- $$ = make_str("show transaction isolation level");
-}
-| SHOW SESSION AUTHORIZATION ecpg_into
- { 
- $$ = make_str("show session authorization");
-}
-|  SHOW ALL
-	{
-		mmerror(PARSE_ERROR, ET_ERROR, "SHOW ALL not implemented\n");
-		$$ = EMPTY;
-	}
-;
-
-
- ConstraintsSetStmt:
- SET CONSTRAINTS constraints_set_list constraints_set_mode
- { 
- $$ = cat_str(3,make_str("set constraints"),$3,$4);
-}
-;
-
-
- constraints_set_list:
- ALL
- { 
- $$ = make_str("all");
-}
-|  qualified_name_list
- { 
- $$ = $1;
-}
-;
-
-
- constraints_set_mode:
- DEFERRED
- { 
- $$ = make_str("deferred");
-}
-|  IMMEDIATE
- { 
- $$ = make_str("immediate");
-}
-;
-
-
- CheckPointStmt:
- CHECKPOINT
- { 
- $$ = make_str("checkpoint");
-}
-;
-
-
- DiscardStmt:
- DISCARD ALL
- { 
- $$ = make_str("discard all");
-}
-|  DISCARD TEMP
- { 
- $$ = make_str("discard temp");
-}
-|  DISCARD TEMPORARY
- { 
- $$ = make_str("discard temporary");
-}
-|  DISCARD PLANS
- { 
- $$ = make_str("discard plans");
-}
-;
-
-
- AlterTableStmt:
- ALTER TABLE relation_expr alter_table_cmds
- { 
- $$ = cat_str(3,make_str("alter table"),$3,$4);
-}
-|  ALTER INDEX relation_expr alter_table_cmds
- { 
- $$ = cat_str(3,make_str("alter index"),$3,$4);
-}
-|  ALTER SEQUENCE relation_expr alter_table_cmds
- { 
- $$ = cat_str(3,make_str("alter sequence"),$3,$4);
-}
-|  ALTER VIEW relation_expr alter_table_cmds
- { 
- $$ = cat_str(3,make_str("alter view"),$3,$4);
-}
-;
-
-
- alter_table_cmds:
- alter_table_cmd
- { 
- $$ = $1;
-}
-|  alter_table_cmds ',' alter_table_cmd
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- alter_table_cmd:
- ADD_P opt_column columnDef
- { 
- $$ = cat_str(3,make_str("add"),$2,$3);
-}
-|  ALTER opt_column ColId alter_column_default
- { 
- $$ = cat_str(4,make_str("alter"),$2,$3,$4);
-}
-|  ALTER opt_column ColId DROP NOT NULL_P
- { 
- $$ = cat_str(4,make_str("alter"),$2,$3,make_str("drop not null"));
-}
-|  ALTER opt_column ColId SET NOT NULL_P
- { 
- $$ = cat_str(4,make_str("alter"),$2,$3,make_str("set not null"));
-}
-|  ALTER opt_column ColId SET STATISTICS SignedIconst
- { 
- $$ = cat_str(5,make_str("alter"),$2,$3,make_str("set statistics"),$6);
-}
-|  ALTER opt_column ColId SET STORAGE ColId
- { 
- $$ = cat_str(5,make_str("alter"),$2,$3,make_str("set storage"),$6);
-}
-|  DROP opt_column ColId opt_drop_behavior
- { 
- $$ = cat_str(4,make_str("drop"),$2,$3,$4);
-}
-|  ALTER opt_column ColId opt_set_data TYPE_P Typename alter_using
- { 
- $$ = cat_str(7,make_str("alter"),$2,$3,$4,make_str("type"),$6,$7);
-}
-|  ADD_P TableConstraint
- { 
- $$ = cat_str(2,make_str("add"),$2);
-}
-|  DROP CONSTRAINT name opt_drop_behavior
- { 
- $$ = cat_str(3,make_str("drop constraint"),$3,$4);
-}
-|  SET WITHOUT OIDS
- { 
- $$ = make_str("set without oids");
-}
-|  CLUSTER ON name
- { 
- $$ = cat_str(2,make_str("cluster on"),$3);
-}
-|  SET WITHOUT CLUSTER
- { 
- $$ = make_str("set without cluster");
-}
-|  ENABLE_P TRIGGER name
- { 
- $$ = cat_str(2,make_str("enable trigger"),$3);
-}
-|  ENABLE_P ALWAYS TRIGGER name
- { 
- $$ = cat_str(2,make_str("enable always trigger"),$4);
-}
-|  ENABLE_P REPLICA TRIGGER name
- { 
- $$ = cat_str(2,make_str("enable replica trigger"),$4);
-}
-|  ENABLE_P TRIGGER ALL
- { 
- $$ = make_str("enable trigger all");
-}
-|  ENABLE_P TRIGGER USER
- { 
- $$ = make_str("enable trigger user");
-}
-|  DISABLE_P TRIGGER name
- { 
- $$ = cat_str(2,make_str("disable trigger"),$3);
-}
-|  DISABLE_P TRIGGER ALL
- { 
- $$ = make_str("disable trigger all");
-}
-|  DISABLE_P TRIGGER USER
- { 
- $$ = make_str("disable trigger user");
-}
-|  ENABLE_P RULE name
- { 
- $$ = cat_str(2,make_str("enable rule"),$3);
-}
-|  ENABLE_P ALWAYS RULE name
- { 
- $$ = cat_str(2,make_str("enable always rule"),$4);
-}
-|  ENABLE_P REPLICA RULE name
- { 
- $$ = cat_str(2,make_str("enable replica rule"),$4);
-}
-|  DISABLE_P RULE name
- { 
- $$ = cat_str(2,make_str("disable rule"),$3);
-}
-|  INHERIT qualified_name
- { 
- $$ = cat_str(2,make_str("inherit"),$2);
-}
-|  NO INHERIT qualified_name
- { 
- $$ = cat_str(2,make_str("no inherit"),$3);
-}
-|  OWNER TO RoleId
- { 
- $$ = cat_str(2,make_str("owner to"),$3);
-}
-|  SET TABLESPACE name
- { 
- $$ = cat_str(2,make_str("set tablespace"),$3);
-}
-|  SET definition
- { 
- $$ = cat_str(2,make_str("set"),$2);
-}
-|  RESET definition
- { 
- $$ = cat_str(2,make_str("reset"),$2);
-}
-;
-
-
- alter_column_default:
- SET DEFAULT a_expr
- { 
- $$ = cat_str(2,make_str("set default"),$3);
-}
-|  DROP DEFAULT
- { 
- $$ = make_str("drop default");
-}
-;
-
-
- opt_drop_behavior:
- CASCADE
- { 
- $$ = make_str("cascade");
-}
-|  RESTRICT
- { 
- $$ = make_str("restrict");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- alter_using:
- USING a_expr
- { 
- $$ = cat_str(2,make_str("using"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ClosePortalStmt:
- CLOSE name
- { 
- $$ = cat_str(2,make_str("close"),$2);
-}
-|  CLOSE ALL
- { 
- $$ = make_str("close all");
-}
-;
-
-
- CopyStmt:
- COPY opt_binary qualified_name opt_column_list opt_oids copy_from copy_file_name copy_delimiter opt_with copy_opt_list
- { 
-			if (strcmp($6, "to") == 0 && strcmp($7, "stdin") == 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "copy to stdin not possible\n");
-			else if (strcmp($6, "from") == 0 && strcmp($7, "stdout") == 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "copy from stdout not possible\n");
-			else if (strcmp($6, "from") == 0 && strcmp($7, "stdin") == 0)
-				mmerror(PARSE_ERROR, ET_WARNING, "copy from stdin not implemented\n");
-
- $$ = cat_str(10,make_str("copy"),$2,$3,$4,$5,$6,$7,$8,$9,$10);
-}
-|  COPY select_with_parens TO copy_file_name opt_with copy_opt_list
- { 
-			if (strcmp($4, "stdin") == 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "copy to stdin not possible\n");
-
- $$ = cat_str(6,make_str("copy"),$2,make_str("to"),$4,$5,$6);
-}
-;
-
-
- copy_from:
- FROM
- { 
- $$ = make_str("from");
-}
-|  TO
- { 
- $$ = make_str("to");
-}
-;
-
-
- copy_file_name:
- ecpg_sconst
- { 
- $$ = $1;
-}
-|  STDIN
- { 
- $$ = make_str("stdin");
-}
-|  STDOUT
- { 
- $$ = make_str("stdout");
-}
-;
-
-
- copy_opt_list:
- copy_opt_list copy_opt_item
- { 
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- copy_opt_item:
- BINARY
- { 
- $$ = make_str("binary");
-}
-|  OIDS
- { 
- $$ = make_str("oids");
-}
-|  DELIMITER opt_as ecpg_sconst
- { 
- $$ = cat_str(3,make_str("delimiter"),$2,$3);
-}
-|  NULL_P opt_as ecpg_sconst
- { 
- $$ = cat_str(3,make_str("null"),$2,$3);
-}
-|  CSV
- { 
- $$ = make_str("csv");
-}
-|  HEADER_P
- { 
- $$ = make_str("header");
-}
-|  QUOTE opt_as ecpg_sconst
- { 
- $$ = cat_str(3,make_str("quote"),$2,$3);
-}
-|  ESCAPE opt_as ecpg_sconst
- { 
- $$ = cat_str(3,make_str("escape"),$2,$3);
-}
-|  FORCE QUOTE columnList
- { 
- $$ = cat_str(2,make_str("force quote"),$3);
-}
-|  FORCE NOT NULL_P columnList
- { 
- $$ = cat_str(2,make_str("force not null"),$4);
-}
-;
-
-
- opt_binary:
- BINARY
- { 
- $$ = make_str("binary");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_oids:
- WITH OIDS
- { 
- $$ = make_str("with oids");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- copy_delimiter:
- opt_using DELIMITERS ecpg_sconst
- { 
- $$ = cat_str(3,$1,make_str("delimiters"),$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_using:
- USING
- { 
- $$ = make_str("using");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- CreateStmt:
- CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')' OptInherit OptWith OnCommitOption OptTableSpace
- { 
- $$ = cat_str(11,make_str("create"),$2,make_str("table"),$4,make_str("("),$6,make_str(")"),$8,$9,$10,$11);
-}
-|  CREATE OptTemp TABLE qualified_name OF qualified_name '(' OptTableElementList ')' OptWith OnCommitOption OptTableSpace
- { 
- $$ = cat_str(12,make_str("create"),$2,make_str("table"),$4,make_str("of"),$6,make_str("("),$8,make_str(")"),$10,$11,$12);
-}
-;
-
-
- OptTemp:
- TEMPORARY
- { 
- $$ = make_str("temporary");
-}
-|  TEMP
- { 
- $$ = make_str("temp");
-}
-|  LOCAL TEMPORARY
- { 
- $$ = make_str("local temporary");
-}
-|  LOCAL TEMP
- { 
- $$ = make_str("local temp");
-}
-|  GLOBAL TEMPORARY
- { 
- $$ = make_str("global temporary");
-}
-|  GLOBAL TEMP
- { 
- $$ = make_str("global temp");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OptTableElementList:
- TableElementList
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- TableElementList:
- TableElement
- { 
- $$ = $1;
-}
-|  TableElementList ',' TableElement
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- TableElement:
- columnDef
- { 
- $$ = $1;
-}
-|  TableLikeClause
- { 
- $$ = $1;
-}
-|  TableConstraint
- { 
- $$ = $1;
-}
-;
-
-
- columnDef:
- ColId Typename ColQualList
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-;
-
-
- ColQualList:
- ColQualList ColConstraint
- { 
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ColConstraint:
- CONSTRAINT name ColConstraintElem
- { 
- $$ = cat_str(3,make_str("constraint"),$2,$3);
-}
-|  ColConstraintElem
- { 
- $$ = $1;
-}
-|  ConstraintAttr
- { 
- $$ = $1;
-}
-;
-
-
- ColConstraintElem:
- NOT NULL_P
- { 
- $$ = make_str("not null");
-}
-|  NULL_P
- { 
- $$ = make_str("null");
-}
-|  UNIQUE opt_definition OptConsTableSpace
- { 
- $$ = cat_str(3,make_str("unique"),$2,$3);
-}
-|  PRIMARY KEY opt_definition OptConsTableSpace
- { 
- $$ = cat_str(3,make_str("primary key"),$3,$4);
-}
-|  CHECK '(' a_expr ')'
- { 
- $$ = cat_str(3,make_str("check ("),$3,make_str(")"));
-}
-|  DEFAULT b_expr
- { 
- $$ = cat_str(2,make_str("default"),$2);
-}
-|  REFERENCES qualified_name opt_column_list key_match key_actions
- { 
- $$ = cat_str(5,make_str("references"),$2,$3,$4,$5);
-}
-;
-
-
- ConstraintAttr:
- DEFERRABLE
- { 
- $$ = make_str("deferrable");
-}
-|  NOT DEFERRABLE
- { 
- $$ = make_str("not deferrable");
-}
-|  INITIALLY DEFERRED
- { 
- $$ = make_str("initially deferred");
-}
-|  INITIALLY IMMEDIATE
- { 
- $$ = make_str("initially immediate");
-}
-;
-
-
- TableLikeClause:
- LIKE qualified_name TableLikeOptionList
- { 
- $$ = cat_str(3,make_str("like"),$2,$3);
-}
-;
-
-
- TableLikeOptionList:
- TableLikeOptionList TableLikeOption
- { 
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- TableLikeOption:
- INCLUDING DEFAULTS
- { 
- $$ = make_str("including defaults");
-}
-|  EXCLUDING DEFAULTS
- { 
- $$ = make_str("excluding defaults");
-}
-|  INCLUDING CONSTRAINTS
- { 
- $$ = make_str("including constraints");
-}
-|  EXCLUDING CONSTRAINTS
- { 
- $$ = make_str("excluding constraints");
-}
-|  INCLUDING INDEXES
- { 
- $$ = make_str("including indexes");
-}
-|  EXCLUDING INDEXES
- { 
- $$ = make_str("excluding indexes");
-}
-;
-
-
- TableConstraint:
- CONSTRAINT name ConstraintElem
- { 
- $$ = cat_str(3,make_str("constraint"),$2,$3);
-}
-|  ConstraintElem
- { 
- $$ = $1;
-}
-;
-
-
- ConstraintElem:
- CHECK '(' a_expr ')'
- { 
- $$ = cat_str(3,make_str("check ("),$3,make_str(")"));
-}
-|  UNIQUE '(' columnList ')' opt_definition OptConsTableSpace
- { 
- $$ = cat_str(5,make_str("unique ("),$3,make_str(")"),$5,$6);
-}
-|  PRIMARY KEY '(' columnList ')' opt_definition OptConsTableSpace
- { 
- $$ = cat_str(5,make_str("primary key ("),$4,make_str(")"),$6,$7);
-}
-|  FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list key_match key_actions ConstraintAttributeSpec
- { 
- $$ = cat_str(8,make_str("foreign key ("),$4,make_str(") references"),$7,$8,$9,$10,$11);
-}
-;
-
-
- opt_column_list:
- '(' columnList ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- columnList:
- columnElem
- { 
- $$ = $1;
-}
-|  columnList ',' columnElem
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- columnElem:
- ColId
- { 
- $$ = $1;
-}
-;
-
-
- key_match:
- MATCH FULL
- { 
- $$ = make_str("match full");
-}
-|  MATCH PARTIAL
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = make_str("match partial");
-}
-|  MATCH SIMPLE
- { 
- $$ = make_str("match simple");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- key_actions:
- key_update
- { 
- $$ = $1;
-}
-|  key_delete
- { 
- $$ = $1;
-}
-|  key_update key_delete
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  key_delete key_update
- { 
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- key_update:
- ON UPDATE key_action
- { 
- $$ = cat_str(2,make_str("on update"),$3);
-}
-;
-
-
- key_delete:
- ON DELETE_P key_action
- { 
- $$ = cat_str(2,make_str("on delete"),$3);
-}
-;
-
-
- key_action:
- NO ACTION
- { 
- $$ = make_str("no action");
-}
-|  RESTRICT
- { 
- $$ = make_str("restrict");
-}
-|  CASCADE
- { 
- $$ = make_str("cascade");
-}
-|  SET NULL_P
- { 
- $$ = make_str("set null");
-}
-|  SET DEFAULT
- { 
- $$ = make_str("set default");
-}
-;
-
-
- OptInherit:
- INHERITS '(' qualified_name_list ')'
- { 
- $$ = cat_str(3,make_str("inherits ("),$3,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OptWith:
- WITH definition
- { 
- $$ = cat_str(2,make_str("with"),$2);
-}
-|  WITH OIDS
- { 
- $$ = make_str("with oids");
-}
-|  WITHOUT OIDS
- { 
- $$ = make_str("without oids");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OnCommitOption:
- ON COMMIT DROP
- { 
- $$ = make_str("on commit drop");
-}
-|  ON COMMIT DELETE_P ROWS
- { 
- $$ = make_str("on commit delete rows");
-}
-|  ON COMMIT PRESERVE ROWS
- { 
- $$ = make_str("on commit preserve rows");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OptTableSpace:
- TABLESPACE name
- { 
- $$ = cat_str(2,make_str("tablespace"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OptConsTableSpace:
- USING INDEX TABLESPACE name
- { 
- $$ = cat_str(2,make_str("using index tablespace"),$4);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- create_as_target:
- qualified_name OptCreateAs OptWith OnCommitOption OptTableSpace
- { 
- $$ = cat_str(5,$1,$2,$3,$4,$5);
-}
-;
-
-
- OptCreateAs:
- '(' CreateAsList ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- CreateAsList:
- CreateAsElement
- { 
- $$ = $1;
-}
-|  CreateAsList ',' CreateAsElement
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- CreateAsElement:
- ColId
- { 
- $$ = $1;
-}
-;
-
-
- opt_with_data:
- WITH DATA_P
- { 
- $$ = make_str("with data");
-}
-|  WITH NO DATA_P
- { 
- $$ = make_str("with no data");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- CreateSeqStmt:
- CREATE OptTemp SEQUENCE qualified_name OptSeqOptList
- { 
- $$ = cat_str(5,make_str("create"),$2,make_str("sequence"),$4,$5);
-}
-;
-
-
- AlterSeqStmt:
- ALTER SEQUENCE relation_expr SeqOptList
- { 
- $$ = cat_str(3,make_str("alter sequence"),$3,$4);
-}
-;
-
-
- OptSeqOptList:
- SeqOptList
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- SeqOptList:
- SeqOptElem
- { 
- $$ = $1;
-}
-|  SeqOptList SeqOptElem
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- SeqOptElem:
- CACHE NumericOnly
- { 
- $$ = cat_str(2,make_str("cache"),$2);
-}
-|  CYCLE
- { 
- $$ = make_str("cycle");
-}
-|  NO CYCLE
- { 
- $$ = make_str("no cycle");
-}
-|  INCREMENT opt_by NumericOnly
- { 
- $$ = cat_str(3,make_str("increment"),$2,$3);
-}
-|  MAXVALUE NumericOnly
- { 
- $$ = cat_str(2,make_str("maxvalue"),$2);
-}
-|  MINVALUE NumericOnly
- { 
- $$ = cat_str(2,make_str("minvalue"),$2);
-}
-|  NO MAXVALUE
- { 
- $$ = make_str("no maxvalue");
-}
-|  NO MINVALUE
- { 
- $$ = make_str("no minvalue");
-}
-|  OWNED BY any_name
- { 
- $$ = cat_str(2,make_str("owned by"),$3);
-}
-|  START opt_with NumericOnly
- { 
- $$ = cat_str(3,make_str("start"),$2,$3);
-}
-|  RESTART
- { 
- $$ = make_str("restart");
-}
-|  RESTART opt_with NumericOnly
- { 
- $$ = cat_str(3,make_str("restart"),$2,$3);
-}
-;
-
-
- opt_by:
- BY
- { 
- $$ = make_str("by");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- NumericOnly:
- ecpg_fconst
- { 
- $$ = $1;
-}
-|  '-' ecpg_fconst
- { 
- $$ = cat_str(2,make_str("-"),$2);
-}
-|  SignedIconst
- { 
- $$ = $1;
-}
-;
-
-
-;
-
-
- CreatePLangStmt:
- CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst
- { 
- $$ = cat_str(5,make_str("create"),$2,$3,make_str("language"),$5);
-}
-|  CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst HANDLER handler_name opt_validator opt_lancompiler
- { 
- $$ = cat_str(9,make_str("create"),$2,$3,make_str("language"),$5,make_str("handler"),$7,$8,$9);
-}
-;
-
-
- opt_trusted:
- TRUSTED
- { 
- $$ = make_str("trusted");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- handler_name:
- name
- { 
- $$ = $1;
-}
-|  name attrs
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- opt_validator:
- VALIDATOR handler_name
- { 
- $$ = cat_str(2,make_str("validator"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_lancompiler:
- LANCOMPILER ecpg_sconst
- { 
- $$ = cat_str(2,make_str("lancompiler"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- DropPLangStmt:
- DROP opt_procedural LANGUAGE ColId_or_Sconst opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop"),$2,make_str("language"),$4,$5);
-}
-|  DROP opt_procedural LANGUAGE IF_P EXISTS ColId_or_Sconst opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop"),$2,make_str("language if exists"),$6,$7);
-}
-;
-
-
- opt_procedural:
- PROCEDURAL
- { 
- $$ = make_str("procedural");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- CreateTableSpaceStmt:
- CREATE TABLESPACE name OptTableSpaceOwner LOCATION ecpg_sconst
- { 
- $$ = cat_str(5,make_str("create tablespace"),$3,$4,make_str("location"),$6);
-}
-;
-
-
- OptTableSpaceOwner:
- OWNER name
- { 
- $$ = cat_str(2,make_str("owner"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- DropTableSpaceStmt:
- DROP TABLESPACE name
- { 
- $$ = cat_str(2,make_str("drop tablespace"),$3);
-}
-|  DROP TABLESPACE IF_P EXISTS name
- { 
- $$ = cat_str(2,make_str("drop tablespace if exists"),$5);
-}
-;
-
-
- CreateTrigStmt:
- CREATE TRIGGER name TriggerActionTime TriggerEvents ON qualified_name TriggerForSpec EXECUTE PROCEDURE func_name '(' TriggerFuncArgs ')'
- { 
- $$ = cat_str(12,make_str("create trigger"),$3,$4,$5,make_str("on"),$7,$8,make_str("execute procedure"),$11,make_str("("),$13,make_str(")"));
-}
-|  CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON qualified_name OptConstrFromTable ConstraintAttributeSpec FOR EACH ROW EXECUTE PROCEDURE func_name '(' TriggerFuncArgs ')'
- { 
- $$ = cat_str(13,make_str("create constraint trigger"),$4,make_str("after"),$6,make_str("on"),$8,$9,$10,make_str("for each row execute procedure"),$16,make_str("("),$18,make_str(")"));
-}
-;
-
-
- TriggerActionTime:
- BEFORE
- { 
- $$ = make_str("before");
-}
-|  AFTER
- { 
- $$ = make_str("after");
-}
-;
-
-
- TriggerEvents:
- TriggerOneEvent
- { 
- $$ = $1;
-}
-|  TriggerOneEvent OR TriggerOneEvent
- { 
- $$ = cat_str(3,$1,make_str("or"),$3);
-}
-|  TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent
- { 
- $$ = cat_str(5,$1,make_str("or"),$3,make_str("or"),$5);
-}
-;
-
-
- TriggerOneEvent:
- INSERT
- { 
- $$ = make_str("insert");
-}
-|  DELETE_P
- { 
- $$ = make_str("delete");
-}
-|  UPDATE
- { 
- $$ = make_str("update");
-}
-|  TRUNCATE
- { 
- $$ = make_str("truncate");
-}
-;
-
-
- TriggerForSpec:
- FOR TriggerForOpt TriggerForType
- { 
- $$ = cat_str(3,make_str("for"),$2,$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- TriggerForOpt:
- EACH
- { 
- $$ = make_str("each");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- TriggerForType:
- ROW
- { 
- $$ = make_str("row");
-}
-|  STATEMENT
- { 
- $$ = make_str("statement");
-}
-;
-
-
- TriggerFuncArgs:
- TriggerFuncArg
- { 
- $$ = $1;
-}
-|  TriggerFuncArgs ',' TriggerFuncArg
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- TriggerFuncArg:
- Iconst
- { 
- $$ = $1;
-}
-|  ecpg_fconst
- { 
- $$ = $1;
-}
-|  ecpg_sconst
- { 
- $$ = $1;
-}
-|  ecpg_bconst
- { 
- $$ = $1;
-}
-|  XCONST
- { 
- $$ = make_str("xconst");
-}
-|  ColId
- { 
- $$ = $1;
-}
-;
-
-
- OptConstrFromTable:
- FROM qualified_name
- { 
- $$ = cat_str(2,make_str("from"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ConstraintAttributeSpec:
- ConstraintDeferrabilitySpec
- { 
- $$ = $1;
-}
-|  ConstraintDeferrabilitySpec ConstraintTimeSpec
- { 
-			if (strcmp($1, "deferrable") != 0 && strcmp($2, "initially deferrable") == 0 )
-				mmerror(PARSE_ERROR, ET_ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE\n");
-
- $$ = cat_str(2,$1,$2);
-}
-|  ConstraintTimeSpec
- { 
- $$ = $1;
-}
-|  ConstraintTimeSpec ConstraintDeferrabilitySpec
- { 
-			if (strcmp($2, "deferrable") != 0 && strcmp($1, "initially deferrable") == 0 )
-				mmerror(PARSE_ERROR, ET_ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE\n");
-
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ConstraintDeferrabilitySpec:
- NOT DEFERRABLE
- { 
- $$ = make_str("not deferrable");
-}
-|  DEFERRABLE
- { 
- $$ = make_str("deferrable");
-}
-;
-
-
- ConstraintTimeSpec:
- INITIALLY IMMEDIATE
- { 
- $$ = make_str("initially immediate");
-}
-|  INITIALLY DEFERRED
- { 
- $$ = make_str("initially deferred");
-}
-;
-
-
- DropTrigStmt:
- DROP TRIGGER name ON qualified_name opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop trigger"),$3,make_str("on"),$5,$6);
-}
-|  DROP TRIGGER IF_P EXISTS name ON qualified_name opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop trigger if exists"),$5,make_str("on"),$7,$8);
-}
-;
-
-
- CreateAssertStmt:
- CREATE ASSERTION name CHECK '(' a_expr ')' ConstraintAttributeSpec
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = cat_str(6,make_str("create assertion"),$3,make_str("check ("),$6,make_str(")"),$8);
-}
-;
-
-
- DropAssertStmt:
- DROP ASSERTION name opt_drop_behavior
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = cat_str(3,make_str("drop assertion"),$3,$4);
-}
-;
-
-
- DefineStmt:
- CREATE AGGREGATE func_name aggr_args definition
- { 
- $$ = cat_str(4,make_str("create aggregate"),$3,$4,$5);
-}
-|  CREATE AGGREGATE func_name old_aggr_definition
- { 
- $$ = cat_str(3,make_str("create aggregate"),$3,$4);
-}
-|  CREATE OPERATOR any_operator definition
- { 
- $$ = cat_str(3,make_str("create operator"),$3,$4);
-}
-|  CREATE TYPE_P any_name definition
- { 
- $$ = cat_str(3,make_str("create type"),$3,$4);
-}
-|  CREATE TYPE_P any_name
- { 
- $$ = cat_str(2,make_str("create type"),$3);
-}
-|  CREATE TYPE_P any_name AS '(' TableFuncElementList ')'
- { 
- $$ = cat_str(5,make_str("create type"),$3,make_str("as ("),$6,make_str(")"));
-}
-|  CREATE TYPE_P any_name AS ENUM_P '(' enum_val_list ')'
- { 
- $$ = cat_str(5,make_str("create type"),$3,make_str("as enum ("),$7,make_str(")"));
-}
-|  CREATE TEXT_P SEARCH PARSER any_name definition
- { 
- $$ = cat_str(3,make_str("create text search parser"),$5,$6);
-}
-|  CREATE TEXT_P SEARCH DICTIONARY any_name definition
- { 
- $$ = cat_str(3,make_str("create text search dictionary"),$5,$6);
-}
-|  CREATE TEXT_P SEARCH TEMPLATE any_name definition
- { 
- $$ = cat_str(3,make_str("create text search template"),$5,$6);
-}
-|  CREATE TEXT_P SEARCH CONFIGURATION any_name definition
- { 
- $$ = cat_str(3,make_str("create text search configuration"),$5,$6);
-}
-;
-
-
- definition:
- '(' def_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-;
-
-
- def_list:
- def_elem
- { 
- $$ = $1;
-}
-|  def_list ',' def_elem
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- def_elem:
- ColLabel '=' def_arg
- { 
- $$ = cat_str(3,$1,make_str("="),$3);
-}
-|  ColLabel
- { 
- $$ = $1;
-}
-;
-
-
- def_arg:
- func_type
- { 
- $$ = $1;
-}
-|  reserved_keyword
- { 
- $$ = $1;
-}
-|  qual_all_Op
- { 
- $$ = $1;
-}
-|  NumericOnly
- { 
- $$ = $1;
-}
-|  ecpg_sconst
- { 
- $$ = $1;
-}
-;
-
-
- aggr_args:
- '(' type_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-|  '(' '*' ')'
- { 
- $$ = make_str("( * )");
-}
-;
-
-
- old_aggr_definition:
- '(' old_aggr_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-;
-
-
- old_aggr_list:
- old_aggr_elem
- { 
- $$ = $1;
-}
-|  old_aggr_list ',' old_aggr_elem
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- old_aggr_elem:
- ecpg_ident '=' def_arg
- { 
- $$ = cat_str(3,$1,make_str("="),$3);
-}
-;
-
-
- enum_val_list:
- ecpg_sconst
- { 
- $$ = $1;
-}
-|  enum_val_list ',' ecpg_sconst
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- CreateOpClassStmt:
- CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename USING access_method opt_opfamily AS opclass_item_list
- { 
- $$ = cat_str(10,make_str("create operator class"),$4,$5,make_str("for type"),$8,make_str("using"),$10,$11,make_str("as"),$13);
-}
-;
-
-
- opclass_item_list:
- opclass_item
- { 
- $$ = $1;
-}
-|  opclass_item_list ',' opclass_item
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- opclass_item:
- OPERATOR Iconst any_operator opt_recheck
- { 
- $$ = cat_str(4,make_str("operator"),$2,$3,$4);
-}
-|  OPERATOR Iconst any_operator oper_argtypes opt_recheck
- { 
- $$ = cat_str(5,make_str("operator"),$2,$3,$4,$5);
-}
-|  FUNCTION Iconst func_name func_args
- { 
- $$ = cat_str(4,make_str("function"),$2,$3,$4);
-}
-|  FUNCTION Iconst '(' type_list ')' func_name func_args
- { 
- $$ = cat_str(7,make_str("function"),$2,make_str("("),$4,make_str(")"),$6,$7);
-}
-|  STORAGE Typename
- { 
- $$ = cat_str(2,make_str("storage"),$2);
-}
-;
-
-
- opt_default:
- DEFAULT
- { 
- $$ = make_str("default");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_opfamily:
- FAMILY any_name
- { 
- $$ = cat_str(2,make_str("family"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_recheck:
- RECHECK
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = make_str("recheck");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- CreateOpFamilyStmt:
- CREATE OPERATOR FAMILY any_name USING access_method
- { 
- $$ = cat_str(4,make_str("create operator family"),$4,make_str("using"),$6);
-}
-;
-
-
- AlterOpFamilyStmt:
- ALTER OPERATOR FAMILY any_name USING access_method ADD_P opclass_item_list
- { 
- $$ = cat_str(6,make_str("alter operator family"),$4,make_str("using"),$6,make_str("add"),$8);
-}
-|  ALTER OPERATOR FAMILY any_name USING access_method DROP opclass_drop_list
- { 
- $$ = cat_str(6,make_str("alter operator family"),$4,make_str("using"),$6,make_str("drop"),$8);
-}
-;
-
-
- opclass_drop_list:
- opclass_drop
- { 
- $$ = $1;
-}
-|  opclass_drop_list ',' opclass_drop
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- opclass_drop:
- OPERATOR Iconst '(' type_list ')'
- { 
- $$ = cat_str(5,make_str("operator"),$2,make_str("("),$4,make_str(")"));
-}
-|  FUNCTION Iconst '(' type_list ')'
- { 
- $$ = cat_str(5,make_str("function"),$2,make_str("("),$4,make_str(")"));
-}
-;
-
-
- DropOpClassStmt:
- DROP OPERATOR CLASS any_name USING access_method opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop operator class"),$4,make_str("using"),$6,$7);
-}
-|  DROP OPERATOR CLASS IF_P EXISTS any_name USING access_method opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop operator class if exists"),$6,make_str("using"),$8,$9);
-}
-;
-
-
- DropOpFamilyStmt:
- DROP OPERATOR FAMILY any_name USING access_method opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop operator family"),$4,make_str("using"),$6,$7);
-}
-|  DROP OPERATOR FAMILY IF_P EXISTS any_name USING access_method opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop operator family if exists"),$6,make_str("using"),$8,$9);
-}
-;
-
-
- DropOwnedStmt:
- DROP OWNED BY name_list opt_drop_behavior
- { 
- $$ = cat_str(3,make_str("drop owned by"),$4,$5);
-}
-;
-
-
- ReassignOwnedStmt:
- REASSIGN OWNED BY name_list TO name
- { 
- $$ = cat_str(4,make_str("reassign owned by"),$4,make_str("to"),$6);
-}
-;
-
-
- DropStmt:
- DROP drop_type IF_P EXISTS any_name_list opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop"),$2,make_str("if exists"),$5,$6);
-}
-|  DROP drop_type any_name_list opt_drop_behavior
- { 
- $$ = cat_str(4,make_str("drop"),$2,$3,$4);
-}
-;
-
-
- drop_type:
- TABLE
- { 
- $$ = make_str("table");
-}
-|  SEQUENCE
- { 
- $$ = make_str("sequence");
-}
-|  VIEW
- { 
- $$ = make_str("view");
-}
-|  INDEX
- { 
- $$ = make_str("index");
-}
-|  TYPE_P
- { 
- $$ = make_str("type");
-}
-|  DOMAIN_P
- { 
- $$ = make_str("domain");
-}
-|  CONVERSION_P
- { 
- $$ = make_str("conversion");
-}
-|  SCHEMA
- { 
- $$ = make_str("schema");
-}
-|  TEXT_P SEARCH PARSER
- { 
- $$ = make_str("text search parser");
-}
-|  TEXT_P SEARCH DICTIONARY
- { 
- $$ = make_str("text search dictionary");
-}
-|  TEXT_P SEARCH TEMPLATE
- { 
- $$ = make_str("text search template");
-}
-|  TEXT_P SEARCH CONFIGURATION
- { 
- $$ = make_str("text search configuration");
-}
-;
-
-
- any_name_list:
- any_name
- { 
- $$ = $1;
-}
-|  any_name_list ',' any_name
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- any_name:
- ColId
- { 
- $$ = $1;
-}
-|  ColId attrs
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- attrs:
- '.' attr_name
- { 
- $$ = cat_str(2,make_str("."),$2);
-}
-|  attrs '.' attr_name
- { 
- $$ = cat_str(3,$1,make_str("."),$3);
-}
-;
-
-
- TruncateStmt:
- TRUNCATE opt_table qualified_name_list opt_restart_seqs opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("truncate"),$2,$3,$4,$5);
-}
-;
-
-
- opt_restart_seqs:
- CONTINUE_P IDENTITY_P
- { 
- $$ = make_str("continue identity");
-}
-|  RESTART IDENTITY_P
- { 
- $$ = make_str("restart identity");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- CommentStmt:
- COMMENT ON comment_type any_name IS comment_text
- { 
- $$ = cat_str(5,make_str("comment on"),$3,$4,make_str("is"),$6);
-}
-|  COMMENT ON AGGREGATE func_name aggr_args IS comment_text
- { 
- $$ = cat_str(5,make_str("comment on aggregate"),$4,$5,make_str("is"),$7);
-}
-|  COMMENT ON FUNCTION func_name func_args IS comment_text
- { 
- $$ = cat_str(5,make_str("comment on function"),$4,$5,make_str("is"),$7);
-}
-|  COMMENT ON OPERATOR any_operator oper_argtypes IS comment_text
- { 
- $$ = cat_str(5,make_str("comment on operator"),$4,$5,make_str("is"),$7);
-}
-|  COMMENT ON CONSTRAINT name ON any_name IS comment_text
- { 
- $$ = cat_str(6,make_str("comment on constraint"),$4,make_str("on"),$6,make_str("is"),$8);
-}
-|  COMMENT ON RULE name ON any_name IS comment_text
- { 
- $$ = cat_str(6,make_str("comment on rule"),$4,make_str("on"),$6,make_str("is"),$8);
-}
-|  COMMENT ON RULE name IS comment_text
- { 
- $$ = cat_str(4,make_str("comment on rule"),$4,make_str("is"),$6);
-}
-|  COMMENT ON TRIGGER name ON any_name IS comment_text
- { 
- $$ = cat_str(6,make_str("comment on trigger"),$4,make_str("on"),$6,make_str("is"),$8);
-}
-|  COMMENT ON OPERATOR CLASS any_name USING access_method IS comment_text
- { 
- $$ = cat_str(6,make_str("comment on operator class"),$5,make_str("using"),$7,make_str("is"),$9);
-}
-|  COMMENT ON OPERATOR FAMILY any_name USING access_method IS comment_text
- { 
- $$ = cat_str(6,make_str("comment on operator family"),$5,make_str("using"),$7,make_str("is"),$9);
-}
-|  COMMENT ON LARGE_P OBJECT_P NumericOnly IS comment_text
- { 
- $$ = cat_str(4,make_str("comment on large object"),$5,make_str("is"),$7);
-}
-|  COMMENT ON CAST '(' Typename AS Typename ')' IS comment_text
- { 
- $$ = cat_str(6,make_str("comment on cast ("),$5,make_str("as"),$7,make_str(") is"),$10);
-}
-|  COMMENT ON opt_procedural LANGUAGE any_name IS comment_text
- { 
- $$ = cat_str(6,make_str("comment on"),$3,make_str("language"),$5,make_str("is"),$7);
-}
-|  COMMENT ON TEXT_P SEARCH PARSER any_name IS comment_text
- { 
- $$ = cat_str(4,make_str("comment on text search parser"),$6,make_str("is"),$8);
-}
-|  COMMENT ON TEXT_P SEARCH DICTIONARY any_name IS comment_text
- { 
- $$ = cat_str(4,make_str("comment on text search dictionary"),$6,make_str("is"),$8);
-}
-|  COMMENT ON TEXT_P SEARCH TEMPLATE any_name IS comment_text
- { 
- $$ = cat_str(4,make_str("comment on text search template"),$6,make_str("is"),$8);
-}
-|  COMMENT ON TEXT_P SEARCH CONFIGURATION any_name IS comment_text
- { 
- $$ = cat_str(4,make_str("comment on text search configuration"),$6,make_str("is"),$8);
-}
-;
-
-
- comment_type:
- COLUMN
- { 
- $$ = make_str("column");
-}
-|  DATABASE
- { 
- $$ = make_str("database");
-}
-|  SCHEMA
- { 
- $$ = make_str("schema");
-}
-|  INDEX
- { 
- $$ = make_str("index");
-}
-|  SEQUENCE
- { 
- $$ = make_str("sequence");
-}
-|  TABLE
- { 
- $$ = make_str("table");
-}
-|  DOMAIN_P
- { 
- $$ = make_str("domain");
-}
-|  TYPE_P
- { 
- $$ = make_str("type");
-}
-|  VIEW
- { 
- $$ = make_str("view");
-}
-|  CONVERSION_P
- { 
- $$ = make_str("conversion");
-}
-|  TABLESPACE
- { 
- $$ = make_str("tablespace");
-}
-|  ROLE
- { 
- $$ = make_str("role");
-}
-;
-
-
- comment_text:
- ecpg_sconst
- { 
- $$ = $1;
-}
-|  NULL_P
- { 
- $$ = make_str("null");
-}
-;
-
-
- FetchStmt:
- FETCH fetch_direction from_in name
-	{
-		add_additional_variables($4, false);
-		$$ = cat_str(4, make_str("fetch"), $2, $3, $4);
-	}
-|  FETCH name
-	{
-		add_additional_variables($2, false);
-		$$ = cat_str(2, make_str("fetch"), $2);
-	}
-|  MOVE fetch_direction from_in name
- { 
- $$ = cat_str(4,make_str("move"),$2,$3,$4);
-}
-|  MOVE name
- { 
- $$ = cat_str(2,make_str("move"),$2);
-}
-	| FETCH fetch_direction from_in name ecpg_into
-		{
-			add_additional_variables($4, false);
-			$$ = cat_str(4, make_str("fetch"), $2, $3, $4);
-		}
-	| FETCH fetch_direction name ecpg_into
-		{
-			add_additional_variables($3, false);
-			$$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3);
-		}
-	| FETCH from_in name ecpg_into
-		{
-			add_additional_variables($3, false);
-			$$ = cat_str(3, make_str("fetch"), $2, $3);
-		}
-	| FETCH name ecpg_into
-		{
-			add_additional_variables($2, false);
-			$$ = cat2_str(make_str("fetch"), $2);
-		}
-	| FETCH fetch_direction name
-		{
-			add_additional_variables($3, false);
-			$$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3);
-		}
-	| FETCH from_in name
-		{
-			add_additional_variables($3, false);
-			$$ = cat_str(3, make_str("fetch"), $2, $3);
-		}
-;
-
-
- fetch_direction:
- NEXT
- { 
- $$ = make_str("next");
-}
-|  PRIOR
- { 
- $$ = make_str("prior");
-}
-|  FIRST_P
- { 
- $$ = make_str("first");
-}
-|  LAST_P
- { 
- $$ = make_str("last");
-}
-|  ABSOLUTE_P SignedIconst
- { 
-		if ($2[1] == '$')
-		{
-			free($2);
-			$2 = make_str("$0");
-		}
-
- $$ = cat_str(2,make_str("absolute"),$2);
-}
-|  RELATIVE_P SignedIconst
- { 
-		if ($2[1] == '$')
-		{
-			free($2);
-			$2 = make_str("$0");
-		}
-
- $$ = cat_str(2,make_str("relative"),$2);
-}
-|  SignedIconst
- { 
-		if ($1[1] == '$')
-		{
-			free($1);
-			$1 = make_str("$0");
-		}
-
- $$ = $1;
-}
-|  ALL
- { 
- $$ = make_str("all");
-}
-|  FORWARD
- { 
- $$ = make_str("forward");
-}
-|  FORWARD SignedIconst
- { 
-		if ($2[1] == '$')
-		{
-			free($2);
-			$2 = make_str("$0");
-		}
-
- $$ = cat_str(2,make_str("forward"),$2);
-}
-|  FORWARD ALL
- { 
- $$ = make_str("forward all");
-}
-|  BACKWARD
- { 
- $$ = make_str("backward");
-}
-|  BACKWARD SignedIconst
- { 
-		if ($2[1] == '$')
-		{
-			free($2);
-			$2 = make_str("$0");
-		}
-
- $$ = cat_str(2,make_str("backward"),$2);
-}
-|  BACKWARD ALL
- { 
- $$ = make_str("backward all");
-}
-;
-
-
- from_in:
- FROM
- { 
- $$ = make_str("from");
-}
-|  IN_P
- { 
- $$ = make_str("in");
-}
-;
-
-
- GrantStmt:
- GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option
- { 
- $$ = cat_str(7,make_str("grant"),$2,make_str("on"),$4,make_str("to"),$6,$7);
-}
-;
-
-
- RevokeStmt:
- REVOKE privileges ON privilege_target FROM grantee_list opt_drop_behavior
- { 
- $$ = cat_str(7,make_str("revoke"),$2,make_str("on"),$4,make_str("from"),$6,$7);
-}
-|  REVOKE GRANT OPTION FOR privileges ON privilege_target FROM grantee_list opt_drop_behavior
- { 
- $$ = cat_str(7,make_str("revoke grant option for"),$5,make_str("on"),$7,make_str("from"),$9,$10);
-}
-;
-
-
- privileges:
- privilege_list
- { 
- $$ = $1;
-}
-|  ALL
- { 
- $$ = make_str("all");
-}
-|  ALL PRIVILEGES
- { 
- $$ = make_str("all privileges");
-}
-;
-
-
- privilege_list:
- privilege
- { 
- $$ = $1;
-}
-|  privilege_list ',' privilege
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- privilege:
- SELECT
- { 
- $$ = make_str("select");
-}
-|  REFERENCES
- { 
- $$ = make_str("references");
-}
-|  CREATE
- { 
- $$ = make_str("create");
-}
-|  ColId
- { 
- $$ = $1;
-}
-;
-
-
- privilege_target:
- qualified_name_list
- { 
- $$ = $1;
-}
-|  TABLE qualified_name_list
- { 
- $$ = cat_str(2,make_str("table"),$2);
-}
-|  SEQUENCE qualified_name_list
- { 
- $$ = cat_str(2,make_str("sequence"),$2);
-}
-|  FUNCTION function_with_argtypes_list
- { 
- $$ = cat_str(2,make_str("function"),$2);
-}
-|  DATABASE name_list
- { 
- $$ = cat_str(2,make_str("database"),$2);
-}
-|  LANGUAGE name_list
- { 
- $$ = cat_str(2,make_str("language"),$2);
-}
-|  SCHEMA name_list
- { 
- $$ = cat_str(2,make_str("schema"),$2);
-}
-|  TABLESPACE name_list
- { 
- $$ = cat_str(2,make_str("tablespace"),$2);
-}
-;
-
-
- grantee_list:
- grantee
- { 
- $$ = $1;
-}
-|  grantee_list ',' grantee
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- grantee:
- RoleId
- { 
- $$ = $1;
-}
-|  GROUP_P RoleId
- { 
- $$ = cat_str(2,make_str("group"),$2);
-}
-;
-
-
- opt_grant_grant_option:
- WITH GRANT OPTION
- { 
- $$ = make_str("with grant option");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- function_with_argtypes_list:
- function_with_argtypes
- { 
- $$ = $1;
-}
-|  function_with_argtypes_list ',' function_with_argtypes
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- function_with_argtypes:
- func_name func_args
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- GrantRoleStmt:
- GRANT privilege_list TO name_list opt_grant_admin_option opt_granted_by
- { 
- $$ = cat_str(6,make_str("grant"),$2,make_str("to"),$4,$5,$6);
-}
-;
-
-
- RevokeRoleStmt:
- REVOKE privilege_list FROM name_list opt_granted_by opt_drop_behavior
- { 
- $$ = cat_str(6,make_str("revoke"),$2,make_str("from"),$4,$5,$6);
-}
-|  REVOKE ADMIN OPTION FOR privilege_list FROM name_list opt_granted_by opt_drop_behavior
- { 
- $$ = cat_str(6,make_str("revoke admin option for"),$5,make_str("from"),$7,$8,$9);
-}
-;
-
-
- opt_grant_admin_option:
- WITH ADMIN OPTION
- { 
- $$ = make_str("with admin option");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_granted_by:
- GRANTED BY RoleId
- { 
- $$ = cat_str(2,make_str("granted by"),$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- IndexStmt:
- CREATE index_opt_unique INDEX index_name ON qualified_name access_method_clause '(' index_params ')' opt_definition OptTableSpace where_clause
- { 
- $$ = cat_str(13,make_str("create"),$2,make_str("index"),$4,make_str("on"),$6,$7,make_str("("),$9,make_str(")"),$11,$12,$13);
-}
-|  CREATE index_opt_unique INDEX CONCURRENTLY index_name ON qualified_name access_method_clause '(' index_params ')' opt_definition OptTableSpace where_clause
- { 
- $$ = cat_str(13,make_str("create"),$2,make_str("index concurrently"),$5,make_str("on"),$7,$8,make_str("("),$10,make_str(")"),$12,$13,$14);
-}
-;
-
-
- index_opt_unique:
- UNIQUE
- { 
- $$ = make_str("unique");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- access_method_clause:
- USING access_method
- { 
- $$ = cat_str(2,make_str("using"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- index_params:
- index_elem
- { 
- $$ = $1;
-}
-|  index_params ',' index_elem
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- index_elem:
- ColId opt_class opt_asc_desc opt_nulls_order
- { 
- $$ = cat_str(4,$1,$2,$3,$4);
-}
-|  func_expr opt_class opt_asc_desc opt_nulls_order
- { 
- $$ = cat_str(4,$1,$2,$3,$4);
-}
-|  '(' a_expr ')' opt_class opt_asc_desc opt_nulls_order
- { 
- $$ = cat_str(6,make_str("("),$2,make_str(")"),$4,$5,$6);
-}
-;
-
-
- opt_class:
- any_name
- { 
- $$ = $1;
-}
-|  USING any_name
- { 
- $$ = cat_str(2,make_str("using"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_asc_desc:
- ASC
- { 
- $$ = make_str("asc");
-}
-|  DESC
- { 
- $$ = make_str("desc");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_nulls_order:
- NULLS_FIRST
- { 
- $$ = make_str("nulls first");
-}
-|  NULLS_LAST
- { 
- $$ = make_str("nulls last");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- CreateFunctionStmt:
- CREATE opt_or_replace FUNCTION func_name func_args RETURNS func_return createfunc_opt_list opt_definition
- { 
- $$ = cat_str(9,make_str("create"),$2,make_str("function"),$4,$5,make_str("returns"),$7,$8,$9);
-}
-|  CREATE opt_or_replace FUNCTION func_name func_args RETURNS TABLE '(' table_func_column_list ')' createfunc_opt_list opt_definition
- { 
- $$ = cat_str(10,make_str("create"),$2,make_str("function"),$4,$5,make_str("returns table ("),$9,make_str(")"),$11,$12);
-}
-|  CREATE opt_or_replace FUNCTION func_name func_args createfunc_opt_list opt_definition
- { 
- $$ = cat_str(7,make_str("create"),$2,make_str("function"),$4,$5,$6,$7);
-}
-;
-
-
- opt_or_replace:
- OR REPLACE
- { 
- $$ = make_str("or replace");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- func_args:
- '(' func_args_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-|  '(' ')'
- { 
- $$ = make_str("( )");
-}
-;
-
-
- func_args_list:
- func_arg
- { 
- $$ = $1;
-}
-|  func_args_list ',' func_arg
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- func_arg:
- arg_class param_name func_type
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  param_name arg_class func_type
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  param_name func_type
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  arg_class func_type
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  func_type
- { 
- $$ = $1;
-}
-;
-
-
- arg_class:
- IN_P
- { 
- $$ = make_str("in");
-}
-|  OUT_P
- { 
- $$ = make_str("out");
-}
-|  INOUT
- { 
- $$ = make_str("inout");
-}
-|  IN_P OUT_P
- { 
- $$ = make_str("in out");
-}
-|  VARIADIC
- { 
- $$ = make_str("variadic");
-}
-;
-
-
- param_name:
- type_function_name
- { 
- $$ = $1;
-}
-;
-
-
- func_return:
- func_type
- { 
- $$ = $1;
-}
-;
-
-
- func_type:
- Typename
- { 
- $$ = $1;
-}
-|  type_function_name attrs '%' TYPE_P
- { 
- $$ = cat_str(3,$1,$2,make_str("% type"));
-}
-|  SETOF type_function_name attrs '%' TYPE_P
- { 
- $$ = cat_str(4,make_str("setof"),$2,$3,make_str("% type"));
-}
-;
-
-
- createfunc_opt_list:
- createfunc_opt_item
- { 
- $$ = $1;
-}
-|  createfunc_opt_list createfunc_opt_item
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- common_func_opt_item:
- CALLED ON NULL_P INPUT_P
- { 
- $$ = make_str("called on null input");
-}
-|  RETURNS NULL_P ON NULL_P INPUT_P
- { 
- $$ = make_str("returns null on null input");
-}
-|  STRICT_P
- { 
- $$ = make_str("strict");
-}
-|  IMMUTABLE
- { 
- $$ = make_str("immutable");
-}
-|  STABLE
- { 
- $$ = make_str("stable");
-}
-|  VOLATILE
- { 
- $$ = make_str("volatile");
-}
-|  EXTERNAL SECURITY DEFINER
- { 
- $$ = make_str("external security definer");
-}
-|  EXTERNAL SECURITY INVOKER
- { 
- $$ = make_str("external security invoker");
-}
-|  SECURITY DEFINER
- { 
- $$ = make_str("security definer");
-}
-|  SECURITY INVOKER
- { 
- $$ = make_str("security invoker");
-}
-|  COST NumericOnly
- { 
- $$ = cat_str(2,make_str("cost"),$2);
-}
-|  ROWS NumericOnly
- { 
- $$ = cat_str(2,make_str("rows"),$2);
-}
-|  SetResetClause
- { 
- $$ = $1;
-}
-;
-
-
- createfunc_opt_item:
- AS func_as
- { 
- $$ = cat_str(2,make_str("as"),$2);
-}
-|  LANGUAGE ColId_or_Sconst
- { 
- $$ = cat_str(2,make_str("language"),$2);
-}
-|  common_func_opt_item
- { 
- $$ = $1;
-}
-;
-
-
- func_as:
- ecpg_sconst
- { 
- $$ = $1;
-}
-|  ecpg_sconst ',' ecpg_sconst
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- opt_definition:
- WITH definition
- { 
- $$ = cat_str(2,make_str("with"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- table_func_column:
- param_name func_type
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- table_func_column_list:
- table_func_column
- { 
- $$ = $1;
-}
-|  table_func_column_list ',' table_func_column
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- AlterFunctionStmt:
- ALTER FUNCTION function_with_argtypes alterfunc_opt_list opt_restrict
- { 
- $$ = cat_str(4,make_str("alter function"),$3,$4,$5);
-}
-;
-
-
- alterfunc_opt_list:
- common_func_opt_item
- { 
- $$ = $1;
-}
-|  alterfunc_opt_list common_func_opt_item
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- opt_restrict:
- RESTRICT
- { 
- $$ = make_str("restrict");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- RemoveFuncStmt:
- DROP FUNCTION func_name func_args opt_drop_behavior
- { 
- $$ = cat_str(4,make_str("drop function"),$3,$4,$5);
-}
-|  DROP FUNCTION IF_P EXISTS func_name func_args opt_drop_behavior
- { 
- $$ = cat_str(4,make_str("drop function if exists"),$5,$6,$7);
-}
-;
-
-
- RemoveAggrStmt:
- DROP AGGREGATE func_name aggr_args opt_drop_behavior
- { 
- $$ = cat_str(4,make_str("drop aggregate"),$3,$4,$5);
-}
-|  DROP AGGREGATE IF_P EXISTS func_name aggr_args opt_drop_behavior
- { 
- $$ = cat_str(4,make_str("drop aggregate if exists"),$5,$6,$7);
-}
-;
-
-
- RemoveOperStmt:
- DROP OPERATOR any_operator oper_argtypes opt_drop_behavior
- { 
- $$ = cat_str(4,make_str("drop operator"),$3,$4,$5);
-}
-|  DROP OPERATOR IF_P EXISTS any_operator oper_argtypes opt_drop_behavior
- { 
- $$ = cat_str(4,make_str("drop operator if exists"),$5,$6,$7);
-}
-;
-
-
- oper_argtypes:
- '(' Typename ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-|  '(' Typename ',' Typename ')'
- { 
- $$ = cat_str(5,make_str("("),$2,make_str(","),$4,make_str(")"));
-}
-|  '(' NONE ',' Typename ')'
- { 
- $$ = cat_str(3,make_str("( none ,"),$4,make_str(")"));
-}
-|  '(' Typename ',' NONE ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(", none )"));
-}
-;
-
-
- any_operator:
- all_Op
- { 
- $$ = $1;
-}
-|  ColId '.' any_operator
- { 
- $$ = cat_str(3,$1,make_str("."),$3);
-}
-;
-
-
- CreateCastStmt:
- CREATE CAST '(' Typename AS Typename ')' WITH FUNCTION function_with_argtypes cast_context
- { 
- $$ = cat_str(7,make_str("create cast ("),$4,make_str("as"),$6,make_str(") with function"),$10,$11);
-}
-|  CREATE CAST '(' Typename AS Typename ')' WITHOUT FUNCTION cast_context
- { 
- $$ = cat_str(6,make_str("create cast ("),$4,make_str("as"),$6,make_str(") without function"),$10);
-}
-|  CREATE CAST '(' Typename AS Typename ')' WITH INOUT cast_context
- { 
- $$ = cat_str(6,make_str("create cast ("),$4,make_str("as"),$6,make_str(") with inout"),$10);
-}
-;
-
-
- cast_context:
- AS IMPLICIT_P
- { 
- $$ = make_str("as implicit");
-}
-|  AS ASSIGNMENT
- { 
- $$ = make_str("as assignment");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- DropCastStmt:
- DROP CAST opt_if_exists '(' Typename AS Typename ')' opt_drop_behavior
- { 
- $$ = cat_str(8,make_str("drop cast"),$3,make_str("("),$5,make_str("as"),$7,make_str(")"),$9);
-}
-;
-
-
- opt_if_exists:
- IF_P EXISTS
- { 
- $$ = make_str("if exists");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ReindexStmt:
- REINDEX reindex_type qualified_name opt_force
- { 
- $$ = cat_str(4,make_str("reindex"),$2,$3,$4);
-}
-|  REINDEX SYSTEM_P name opt_force
- { 
- $$ = cat_str(3,make_str("reindex system"),$3,$4);
-}
-|  REINDEX DATABASE name opt_force
- { 
- $$ = cat_str(3,make_str("reindex database"),$3,$4);
-}
-;
-
-
- reindex_type:
- INDEX
- { 
- $$ = make_str("index");
-}
-|  TABLE
- { 
- $$ = make_str("table");
-}
-;
-
-
- opt_force:
- FORCE
- { 
- $$ = make_str("force");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- RenameStmt:
- ALTER AGGREGATE func_name aggr_args RENAME TO name
- { 
- $$ = cat_str(5,make_str("alter aggregate"),$3,$4,make_str("rename to"),$7);
-}
-|  ALTER CONVERSION_P any_name RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter conversion"),$3,make_str("rename to"),$6);
-}
-|  ALTER DATABASE database_name RENAME TO database_name
- { 
- $$ = cat_str(4,make_str("alter database"),$3,make_str("rename to"),$6);
-}
-|  ALTER FUNCTION function_with_argtypes RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter function"),$3,make_str("rename to"),$6);
-}
-|  ALTER GROUP_P RoleId RENAME TO RoleId
- { 
- $$ = cat_str(4,make_str("alter group"),$3,make_str("rename to"),$6);
-}
-|  ALTER opt_procedural LANGUAGE name RENAME TO name
- { 
- $$ = cat_str(6,make_str("alter"),$2,make_str("language"),$4,make_str("rename to"),$7);
-}
-|  ALTER OPERATOR CLASS any_name USING access_method RENAME TO name
- { 
- $$ = cat_str(6,make_str("alter operator class"),$4,make_str("using"),$6,make_str("rename to"),$9);
-}
-|  ALTER OPERATOR FAMILY any_name USING access_method RENAME TO name
- { 
- $$ = cat_str(6,make_str("alter operator family"),$4,make_str("using"),$6,make_str("rename to"),$9);
-}
-|  ALTER SCHEMA name RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter schema"),$3,make_str("rename to"),$6);
-}
-|  ALTER TABLE relation_expr RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter table"),$3,make_str("rename to"),$6);
-}
-|  ALTER SEQUENCE relation_expr RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter sequence"),$3,make_str("rename to"),$6);
-}
-|  ALTER VIEW relation_expr RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter view"),$3,make_str("rename to"),$6);
-}
-|  ALTER INDEX relation_expr RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter index"),$3,make_str("rename to"),$6);
-}
-|  ALTER TABLE relation_expr RENAME opt_column name TO name
- { 
- $$ = cat_str(7,make_str("alter table"),$3,make_str("rename"),$5,$6,make_str("to"),$8);
-}
-|  ALTER TRIGGER name ON relation_expr RENAME TO name
- { 
- $$ = cat_str(6,make_str("alter trigger"),$3,make_str("on"),$5,make_str("rename to"),$8);
-}
-|  ALTER ROLE RoleId RENAME TO RoleId
- { 
- $$ = cat_str(4,make_str("alter role"),$3,make_str("rename to"),$6);
-}
-|  ALTER USER RoleId RENAME TO RoleId
- { 
- $$ = cat_str(4,make_str("alter user"),$3,make_str("rename to"),$6);
-}
-|  ALTER TABLESPACE name RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter tablespace"),$3,make_str("rename to"),$6);
-}
-|  ALTER TEXT_P SEARCH PARSER any_name RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter text search parser"),$5,make_str("rename to"),$8);
-}
-|  ALTER TEXT_P SEARCH DICTIONARY any_name RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter text search dictionary"),$5,make_str("rename to"),$8);
-}
-|  ALTER TEXT_P SEARCH TEMPLATE any_name RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter text search template"),$5,make_str("rename to"),$8);
-}
-|  ALTER TEXT_P SEARCH CONFIGURATION any_name RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter text search configuration"),$5,make_str("rename to"),$8);
-}
-|  ALTER TYPE_P any_name RENAME TO name
- { 
- $$ = cat_str(4,make_str("alter type"),$3,make_str("rename to"),$6);
-}
-;
-
-
- opt_column:
- COLUMN
- { 
- $$ = make_str("column");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_set_data:
- SET DATA_P
- { 
- $$ = make_str("set data");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- AlterObjectSchemaStmt:
- ALTER AGGREGATE func_name aggr_args SET SCHEMA name
- { 
- $$ = cat_str(5,make_str("alter aggregate"),$3,$4,make_str("set schema"),$7);
-}
-|  ALTER DOMAIN_P any_name SET SCHEMA name
- { 
- $$ = cat_str(4,make_str("alter domain"),$3,make_str("set schema"),$6);
-}
-|  ALTER FUNCTION function_with_argtypes SET SCHEMA name
- { 
- $$ = cat_str(4,make_str("alter function"),$3,make_str("set schema"),$6);
-}
-|  ALTER TABLE relation_expr SET SCHEMA name
- { 
- $$ = cat_str(4,make_str("alter table"),$3,make_str("set schema"),$6);
-}
-|  ALTER SEQUENCE relation_expr SET SCHEMA name
- { 
- $$ = cat_str(4,make_str("alter sequence"),$3,make_str("set schema"),$6);
-}
-|  ALTER VIEW relation_expr SET SCHEMA name
- { 
- $$ = cat_str(4,make_str("alter view"),$3,make_str("set schema"),$6);
-}
-|  ALTER TYPE_P any_name SET SCHEMA name
- { 
- $$ = cat_str(4,make_str("alter type"),$3,make_str("set schema"),$6);
-}
-;
-
-
- AlterOwnerStmt:
- ALTER AGGREGATE func_name aggr_args OWNER TO RoleId
- { 
- $$ = cat_str(5,make_str("alter aggregate"),$3,$4,make_str("owner to"),$7);
-}
-|  ALTER CONVERSION_P any_name OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter conversion"),$3,make_str("owner to"),$6);
-}
-|  ALTER DATABASE database_name OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter database"),$3,make_str("owner to"),$6);
-}
-|  ALTER DOMAIN_P any_name OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter domain"),$3,make_str("owner to"),$6);
-}
-|  ALTER FUNCTION function_with_argtypes OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter function"),$3,make_str("owner to"),$6);
-}
-|  ALTER opt_procedural LANGUAGE name OWNER TO RoleId
- { 
- $$ = cat_str(6,make_str("alter"),$2,make_str("language"),$4,make_str("owner to"),$7);
-}
-|  ALTER OPERATOR any_operator oper_argtypes OWNER TO RoleId
- { 
- $$ = cat_str(5,make_str("alter operator"),$3,$4,make_str("owner to"),$7);
-}
-|  ALTER OPERATOR CLASS any_name USING access_method OWNER TO RoleId
- { 
- $$ = cat_str(6,make_str("alter operator class"),$4,make_str("using"),$6,make_str("owner to"),$9);
-}
-|  ALTER OPERATOR FAMILY any_name USING access_method OWNER TO RoleId
- { 
- $$ = cat_str(6,make_str("alter operator family"),$4,make_str("using"),$6,make_str("owner to"),$9);
-}
-|  ALTER SCHEMA name OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter schema"),$3,make_str("owner to"),$6);
-}
-|  ALTER TYPE_P any_name OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter type"),$3,make_str("owner to"),$6);
-}
-|  ALTER TABLESPACE name OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter tablespace"),$3,make_str("owner to"),$6);
-}
-|  ALTER TEXT_P SEARCH DICTIONARY any_name OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter text search dictionary"),$5,make_str("owner to"),$8);
-}
-|  ALTER TEXT_P SEARCH CONFIGURATION any_name OWNER TO RoleId
- { 
- $$ = cat_str(4,make_str("alter text search configuration"),$5,make_str("owner to"),$8);
-}
-;
-
-
- RuleActionList:
- NOTHING
- { 
- $$ = make_str("nothing");
-}
-|  RuleActionStmt
- { 
- $$ = $1;
-}
-|  '(' RuleActionMulti ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-;
-
-
- RuleActionMulti:
- RuleActionMulti ';' RuleActionStmtOrEmpty
- { 
- $$ = cat_str(3,$1,make_str(";"),$3);
-}
-|  RuleActionStmtOrEmpty
- { 
- $$ = $1;
-}
-;
-
-
- RuleActionStmt:
- SelectStmt
- { 
- $$ = $1;
-}
-|  InsertStmt
- { 
- $$ = $1;
-}
-|  UpdateStmt
- { 
- $$ = $1;
-}
-|  DeleteStmt
- { 
- $$ = $1;
-}
-|  NotifyStmt
- { 
- $$ = $1;
-}
-;
-
-
- RuleActionStmtOrEmpty:
- RuleActionStmt
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- event:
- SELECT
- { 
- $$ = make_str("select");
-}
-|  UPDATE
- { 
- $$ = make_str("update");
-}
-|  DELETE_P
- { 
- $$ = make_str("delete");
-}
-|  INSERT
- { 
- $$ = make_str("insert");
-}
-;
-
-
- opt_instead:
- INSTEAD
- { 
- $$ = make_str("instead");
-}
-|  ALSO
- { 
- $$ = make_str("also");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- DropRuleStmt:
- DROP RULE name ON qualified_name opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop rule"),$3,make_str("on"),$5,$6);
-}
-|  DROP RULE IF_P EXISTS name ON qualified_name opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("drop rule if exists"),$5,make_str("on"),$7,$8);
-}
-;
-
-
- NotifyStmt:
- NOTIFY ColId
- { 
- $$ = cat_str(2,make_str("notify"),$2);
-}
-;
-
-
- ListenStmt:
- LISTEN ColId
- { 
- $$ = cat_str(2,make_str("listen"),$2);
-}
-;
-
-
- UnlistenStmt:
- UNLISTEN ColId
- { 
- $$ = cat_str(2,make_str("unlisten"),$2);
-}
-|  UNLISTEN '*'
- { 
- $$ = make_str("unlisten *");
-}
-;
-
-
- TransactionStmt:
- ABORT_P opt_transaction
- { 
- $$ = cat_str(2,make_str("abort"),$2);
-}
-|  BEGIN_P opt_transaction transaction_mode_list_or_empty
- { 
- $$ = cat_str(3,make_str("begin"),$2,$3);
-}
-|  START TRANSACTION transaction_mode_list_or_empty
- { 
- $$ = cat_str(2,make_str("start transaction"),$3);
-}
-|  COMMIT opt_transaction
- { 
- $$ = cat_str(2,make_str("commit"),$2);
-}
-|  END_P opt_transaction
- { 
- $$ = cat_str(2,make_str("end"),$2);
-}
-|  ROLLBACK opt_transaction
- { 
- $$ = cat_str(2,make_str("rollback"),$2);
-}
-|  SAVEPOINT ColId
- { 
- $$ = cat_str(2,make_str("savepoint"),$2);
-}
-|  RELEASE SAVEPOINT ColId
- { 
- $$ = cat_str(2,make_str("release savepoint"),$3);
-}
-|  RELEASE ColId
- { 
- $$ = cat_str(2,make_str("release"),$2);
-}
-|  ROLLBACK opt_transaction TO SAVEPOINT ColId
- { 
- $$ = cat_str(4,make_str("rollback"),$2,make_str("to savepoint"),$5);
-}
-|  ROLLBACK opt_transaction TO ColId
- { 
- $$ = cat_str(4,make_str("rollback"),$2,make_str("to"),$4);
-}
-|  PREPARE TRANSACTION ecpg_sconst
- { 
- $$ = cat_str(2,make_str("prepare transaction"),$3);
-}
-|  COMMIT PREPARED ecpg_sconst
- { 
- $$ = cat_str(2,make_str("commit prepared"),$3);
-}
-|  ROLLBACK PREPARED ecpg_sconst
- { 
- $$ = cat_str(2,make_str("rollback prepared"),$3);
-}
-;
-
-
- opt_transaction:
- WORK
- { 
- $$ = make_str("work");
-}
-|  TRANSACTION
- { 
- $$ = make_str("transaction");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- transaction_mode_item:
- ISOLATION LEVEL iso_level
- { 
- $$ = cat_str(2,make_str("isolation level"),$3);
-}
-|  READ ONLY
- { 
- $$ = make_str("read only");
-}
-|  READ WRITE
- { 
- $$ = make_str("read write");
-}
-;
-
-
- transaction_mode_list:
- transaction_mode_item
- { 
- $$ = $1;
-}
-|  transaction_mode_list ',' transaction_mode_item
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-|  transaction_mode_list transaction_mode_item
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- transaction_mode_list_or_empty:
- transaction_mode_list
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ViewStmt:
- CREATE OptTemp VIEW qualified_name opt_column_list AS SelectStmt opt_check_option
- { 
- $$ = cat_str(8,make_str("create"),$2,make_str("view"),$4,$5,make_str("as"),$7,$8);
-}
-|  CREATE OR REPLACE OptTemp VIEW qualified_name opt_column_list AS SelectStmt opt_check_option
- { 
- $$ = cat_str(8,make_str("create or replace"),$4,make_str("view"),$6,$7,make_str("as"),$9,$10);
-}
-;
-
-
- opt_check_option:
- WITH CHECK OPTION
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = make_str("with check option");
-}
-|  WITH CASCADED CHECK OPTION
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = make_str("with cascaded check option");
-}
-|  WITH LOCAL CHECK OPTION
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = make_str("with local check option");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- LoadStmt:
- LOAD file_name
- { 
- $$ = cat_str(2,make_str("load"),$2);
-}
-;
-
-
- CreatedbStmt:
- CREATE DATABASE database_name opt_with createdb_opt_list
- { 
- $$ = cat_str(4,make_str("create database"),$3,$4,$5);
-}
-;
-
-
- createdb_opt_list:
- createdb_opt_list createdb_opt_item
- { 
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- createdb_opt_item:
- TABLESPACE opt_equal name
- { 
- $$ = cat_str(3,make_str("tablespace"),$2,$3);
-}
-|  TABLESPACE opt_equal DEFAULT
- { 
- $$ = cat_str(3,make_str("tablespace"),$2,make_str("default"));
-}
-|  LOCATION opt_equal ecpg_sconst
- { 
- $$ = cat_str(3,make_str("location"),$2,$3);
-}
-|  LOCATION opt_equal DEFAULT
- { 
- $$ = cat_str(3,make_str("location"),$2,make_str("default"));
-}
-|  TEMPLATE opt_equal name
- { 
- $$ = cat_str(3,make_str("template"),$2,$3);
-}
-|  TEMPLATE opt_equal DEFAULT
- { 
- $$ = cat_str(3,make_str("template"),$2,make_str("default"));
-}
-|  ENCODING opt_equal ecpg_sconst
- { 
- $$ = cat_str(3,make_str("encoding"),$2,$3);
-}
-|  ENCODING opt_equal Iconst
- { 
- $$ = cat_str(3,make_str("encoding"),$2,$3);
-}
-|  ENCODING opt_equal DEFAULT
- { 
- $$ = cat_str(3,make_str("encoding"),$2,make_str("default"));
-}
-|  COLLATE opt_equal ecpg_sconst
- { 
- $$ = cat_str(3,make_str("collate"),$2,$3);
-}
-|  COLLATE opt_equal DEFAULT
- { 
- $$ = cat_str(3,make_str("collate"),$2,make_str("default"));
-}
-|  CTYPE opt_equal ecpg_sconst
- { 
- $$ = cat_str(3,make_str("ctype"),$2,$3);
-}
-|  CTYPE opt_equal DEFAULT
- { 
- $$ = cat_str(3,make_str("ctype"),$2,make_str("default"));
-}
-|  CONNECTION LIMIT opt_equal SignedIconst
- { 
- $$ = cat_str(3,make_str("connection limit"),$3,$4);
-}
-|  OWNER opt_equal name
- { 
- $$ = cat_str(3,make_str("owner"),$2,$3);
-}
-|  OWNER opt_equal DEFAULT
- { 
- $$ = cat_str(3,make_str("owner"),$2,make_str("default"));
-}
-;
-
-
- opt_equal:
- '='
- { 
- $$ = make_str("=");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- AlterDatabaseStmt:
- ALTER DATABASE database_name opt_with alterdb_opt_list
- { 
- $$ = cat_str(4,make_str("alter database"),$3,$4,$5);
-}
-|  ALTER DATABASE database_name SET TABLESPACE name
- { 
- $$ = cat_str(4,make_str("alter database"),$3,make_str("set tablespace"),$6);
-}
-;
-
-
- AlterDatabaseSetStmt:
- ALTER DATABASE database_name SetResetClause
- { 
- $$ = cat_str(3,make_str("alter database"),$3,$4);
-}
-;
-
-
- alterdb_opt_list:
- alterdb_opt_list alterdb_opt_item
- { 
- $$ = cat_str(2,$1,$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- alterdb_opt_item:
- CONNECTION LIMIT opt_equal SignedIconst
- { 
- $$ = cat_str(3,make_str("connection limit"),$3,$4);
-}
-;
-
-
- DropdbStmt:
- DROP DATABASE database_name
- { 
- $$ = cat_str(2,make_str("drop database"),$3);
-}
-|  DROP DATABASE IF_P EXISTS database_name
- { 
- $$ = cat_str(2,make_str("drop database if exists"),$5);
-}
-;
-
-
- CreateDomainStmt:
- CREATE DOMAIN_P any_name opt_as Typename ColQualList
- { 
- $$ = cat_str(5,make_str("create domain"),$3,$4,$5,$6);
-}
-;
-
-
- AlterDomainStmt:
- ALTER DOMAIN_P any_name alter_column_default
- { 
- $$ = cat_str(3,make_str("alter domain"),$3,$4);
-}
-|  ALTER DOMAIN_P any_name DROP NOT NULL_P
- { 
- $$ = cat_str(3,make_str("alter domain"),$3,make_str("drop not null"));
-}
-|  ALTER DOMAIN_P any_name SET NOT NULL_P
- { 
- $$ = cat_str(3,make_str("alter domain"),$3,make_str("set not null"));
-}
-|  ALTER DOMAIN_P any_name ADD_P TableConstraint
- { 
- $$ = cat_str(4,make_str("alter domain"),$3,make_str("add"),$5);
-}
-|  ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior
- { 
- $$ = cat_str(5,make_str("alter domain"),$3,make_str("drop constraint"),$6,$7);
-}
-;
-
-
- opt_as:
- AS
- { 
- $$ = make_str("as");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- AlterTSDictionaryStmt:
- ALTER TEXT_P SEARCH DICTIONARY any_name definition
- { 
- $$ = cat_str(3,make_str("alter text search dictionary"),$5,$6);
-}
-;
-
-
- AlterTSConfigurationStmt:
- ALTER TEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list WITH any_name_list
- { 
- $$ = cat_str(6,make_str("alter text search configuration"),$5,make_str("add mapping for"),$9,make_str("with"),$11);
-}
-|  ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list WITH any_name_list
- { 
- $$ = cat_str(6,make_str("alter text search configuration"),$5,make_str("alter mapping for"),$9,make_str("with"),$11);
-}
-|  ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING REPLACE any_name WITH any_name
- { 
- $$ = cat_str(6,make_str("alter text search configuration"),$5,make_str("alter mapping replace"),$9,make_str("with"),$11);
-}
-|  ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list REPLACE any_name WITH any_name
- { 
- $$ = cat_str(8,make_str("alter text search configuration"),$5,make_str("alter mapping for"),$9,make_str("replace"),$11,make_str("with"),$13);
-}
-|  ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list
- { 
- $$ = cat_str(4,make_str("alter text search configuration"),$5,make_str("drop mapping for"),$9);
-}
-|  ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS FOR name_list
- { 
- $$ = cat_str(4,make_str("alter text search configuration"),$5,make_str("drop mapping if exists for"),$11);
-}
-;
-
-
- CreateConversionStmt:
- CREATE opt_default CONVERSION_P any_name FOR ecpg_sconst TO ecpg_sconst FROM any_name
- { 
- $$ = cat_str(10,make_str("create"),$2,make_str("conversion"),$4,make_str("for"),$6,make_str("to"),$8,make_str("from"),$10);
-}
-;
-
-
- ClusterStmt:
- CLUSTER qualified_name cluster_index_specification
- { 
- $$ = cat_str(3,make_str("cluster"),$2,$3);
-}
-|  CLUSTER
- { 
- $$ = make_str("cluster");
-}
-|  CLUSTER index_name ON qualified_name
- { 
- $$ = cat_str(4,make_str("cluster"),$2,make_str("on"),$4);
-}
-;
-
-
- cluster_index_specification:
- USING index_name
- { 
- $$ = cat_str(2,make_str("using"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- VacuumStmt:
- VACUUM opt_full opt_freeze opt_verbose
- { 
- $$ = cat_str(4,make_str("vacuum"),$2,$3,$4);
-}
-|  VACUUM opt_full opt_freeze opt_verbose qualified_name
- { 
- $$ = cat_str(5,make_str("vacuum"),$2,$3,$4,$5);
-}
-|  VACUUM opt_full opt_freeze opt_verbose AnalyzeStmt
- { 
- $$ = cat_str(5,make_str("vacuum"),$2,$3,$4,$5);
-}
-;
-
-
- AnalyzeStmt:
- analyze_keyword opt_verbose
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  analyze_keyword opt_verbose qualified_name opt_name_list
- { 
- $$ = cat_str(4,$1,$2,$3,$4);
-}
-;
-
-
- analyze_keyword:
- ANALYZE
- { 
- $$ = make_str("analyze");
-}
-|  ANALYSE
- { 
- $$ = make_str("analyse");
-}
-;
-
-
- opt_verbose:
- VERBOSE
- { 
- $$ = make_str("verbose");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_full:
- FULL
- { 
- $$ = make_str("full");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_freeze:
- FREEZE
- { 
- $$ = make_str("freeze");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_name_list:
- '(' name_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ExplainStmt:
- EXPLAIN opt_analyze opt_verbose ExplainableStmt
- { 
- $$ = cat_str(4,make_str("explain"),$2,$3,$4);
-}
-;
-
-
- ExplainableStmt:
- SelectStmt
- { 
- $$ = $1;
-}
-|  InsertStmt
- { 
- $$ = $1;
-}
-|  UpdateStmt
- { 
- $$ = $1;
-}
-|  DeleteStmt
- { 
- $$ = $1;
-}
-|  DeclareCursorStmt
- { 
- $$ = $1;
-}
-|  CreateAsStmt
- { 
- $$ = $1;
-}
-|  ExecuteStmt
- { 
- $$ = $1;
-}
-;
-
-
- opt_analyze:
- analyze_keyword
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- PrepareStmt:
-PREPARE prepared_name prep_type_clause AS PreparableStmt
-	{
-		$$.name = $2;
-		$$.type = $3;
-		$$.stmt = cat_str(3, make_str("\""), $5, make_str("\""));
-	}
-	| PREPARE prepared_name FROM execstring
-	{
-		$$.name = $2;
-		$$.type = NULL;
-		$$.stmt = $4;
-	}
-;
-
-
- prep_type_clause:
- '(' type_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- PreparableStmt:
- SelectStmt
- { 
- $$ = $1;
-}
-|  InsertStmt
- { 
- $$ = $1;
-}
-|  UpdateStmt
- { 
- $$ = $1;
-}
-|  DeleteStmt
- { 
- $$ = $1;
-}
-;
-
-
- ExecuteStmt:
-EXECUTE prepared_name execute_param_clause execute_rest
-	{ $$ = $2; }
-| CREATE OptTemp TABLE create_as_target AS EXECUTE prepared_name execute_param_clause
- { 
- $$ = cat_str(7,make_str("create"),$2,make_str("table"),$4,make_str("as execute"),$7,$8);
-}
-;
-
-
- execute_param_clause:
- '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- InsertStmt:
- INSERT INTO qualified_name insert_rest returning_clause
- { 
- $$ = cat_str(4,make_str("insert into"),$3,$4,$5);
-}
-;
-
-
- insert_rest:
- SelectStmt
- { 
- $$ = $1;
-}
-|  '(' insert_column_list ')' SelectStmt
- { 
- $$ = cat_str(4,make_str("("),$2,make_str(")"),$4);
-}
-|  DEFAULT VALUES
- { 
- $$ = make_str("default values");
-}
-;
-
-
- insert_column_list:
- insert_column_item
- { 
- $$ = $1;
-}
-|  insert_column_list ',' insert_column_item
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- insert_column_item:
- ColId opt_indirection
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- returning_clause:
- RETURNING target_list
- { 
- $$ = cat_str(2,make_str("returning"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- DeleteStmt:
- DELETE_P FROM relation_expr_opt_alias using_clause where_or_current_clause returning_clause
- { 
- $$ = cat_str(5,make_str("delete from"),$3,$4,$5,$6);
-}
-;
-
-
- using_clause:
- USING from_list
- { 
- $$ = cat_str(2,make_str("using"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- LockStmt:
- LOCK_P opt_table qualified_name_list opt_lock opt_nowait
- { 
- $$ = cat_str(5,make_str("lock"),$2,$3,$4,$5);
-}
-;
-
-
- opt_lock:
- IN_P lock_type MODE
- { 
- $$ = cat_str(3,make_str("in"),$2,make_str("mode"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- lock_type:
- ACCESS SHARE
- { 
- $$ = make_str("access share");
-}
-|  ROW SHARE
- { 
- $$ = make_str("row share");
-}
-|  ROW EXCLUSIVE
- { 
- $$ = make_str("row exclusive");
-}
-|  SHARE UPDATE EXCLUSIVE
- { 
- $$ = make_str("share update exclusive");
-}
-|  SHARE
- { 
- $$ = make_str("share");
-}
-|  SHARE ROW EXCLUSIVE
- { 
- $$ = make_str("share row exclusive");
-}
-|  EXCLUSIVE
- { 
- $$ = make_str("exclusive");
-}
-|  ACCESS EXCLUSIVE
- { 
- $$ = make_str("access exclusive");
-}
-;
-
-
- opt_nowait:
- NOWAIT
- { 
- $$ = make_str("nowait");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- UpdateStmt:
- UPDATE relation_expr_opt_alias SET set_clause_list from_clause where_or_current_clause returning_clause
- { 
- $$ = cat_str(7,make_str("update"),$2,make_str("set"),$4,$5,$6,$7);
-}
-;
-
-
- set_clause_list:
- set_clause
- { 
- $$ = $1;
-}
-|  set_clause_list ',' set_clause
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- set_clause:
- single_set_clause
- { 
- $$ = $1;
-}
-|  multiple_set_clause
- { 
- $$ = $1;
-}
-;
-
-
- single_set_clause:
- set_target '=' ctext_expr
- { 
- $$ = cat_str(3,$1,make_str("="),$3);
-}
-;
-
-
- multiple_set_clause:
- '(' set_target_list ')' '=' ctext_row
- { 
- $$ = cat_str(4,make_str("("),$2,make_str(") ="),$5);
-}
-;
-
-
- set_target:
- ColId opt_indirection
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- set_target_list:
- set_target
- { 
- $$ = $1;
-}
-|  set_target_list ',' set_target
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- DeclareCursorStmt:
- DECLARE name cursor_options CURSOR opt_hold FOR SelectStmt
-	{
-		struct cursor *ptr, *this;
-
-		for (ptr = cur; ptr != NULL; ptr = ptr->next)
-		{
-			if (strcmp($2, ptr->name) == 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" already defined\n", $2);
-		}
-
-		this = (struct cursor *) mm_alloc(sizeof(struct cursor));
-
-		this->next = cur;
-		this->name = $2;
-		this->connection = connection;
-		this->opened = false;
-		this->command =  cat_str(7, make_str("declare"), mm_strdup($2), $3, make_str("cursor"), $5, make_str("for"), $7);
-		this->argsinsert = argsinsert;
-		this->argsresult = argsresult;
-		argsinsert = argsresult = NULL;
-		cur = this;
-
-		if (INFORMIX_MODE)
-			$$ = cat_str(5, adjust_informix(this->argsinsert), adjust_informix(this->argsresult), make_str("/*"), mm_strdup(this->command), make_str("*/"));
-		else
-			$$ = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
-	}
-;
-
-
- cursor_options:
-
- { 
- $$=EMPTY; }
-|  cursor_options NO SCROLL
- { 
- $$ = cat_str(2,$1,make_str("no scroll"));
-}
-|  cursor_options SCROLL
- { 
- $$ = cat_str(2,$1,make_str("scroll"));
-}
-|  cursor_options BINARY
- { 
- $$ = cat_str(2,$1,make_str("binary"));
-}
-|  cursor_options INSENSITIVE
- { 
- $$ = cat_str(2,$1,make_str("insensitive"));
-}
-;
-
-
- opt_hold:
-
-	{
-		if (compat == ECPG_COMPAT_INFORMIX_SE && autocommit == true)
-			$$ = make_str("with hold");
-		else
-			$$ = EMPTY;
-	}
-|  WITH HOLD
- { 
- $$ = make_str("with hold");
-}
-|  WITHOUT HOLD
- { 
- $$ = make_str("without hold");
-}
-;
-
-
- SelectStmt:
- select_no_parens %prec UMINUS
- { 
- $$ = $1;
-}
-|  select_with_parens %prec UMINUS
- { 
- $$ = $1;
-}
-;
-
-
- select_with_parens:
- '(' select_no_parens ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-|  '(' select_with_parens ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-;
-
-
- select_no_parens:
- simple_select
- { 
- $$ = $1;
-}
-|  select_clause sort_clause
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  select_clause opt_sort_clause for_locking_clause opt_select_limit
- { 
- $$ = cat_str(4,$1,$2,$3,$4);
-}
-|  select_clause opt_sort_clause select_limit opt_for_locking_clause
- { 
- $$ = cat_str(4,$1,$2,$3,$4);
-}
-|  with_clause simple_select
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  with_clause select_clause sort_clause
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  with_clause select_clause opt_sort_clause for_locking_clause opt_select_limit
- { 
- $$ = cat_str(5,$1,$2,$3,$4,$5);
-}
-|  with_clause select_clause opt_sort_clause select_limit opt_for_locking_clause
- { 
- $$ = cat_str(5,$1,$2,$3,$4,$5);
-}
-;
-
-
- select_clause:
- simple_select
- { 
- $$ = $1;
-}
-|  select_with_parens
- { 
- $$ = $1;
-}
-;
-
-
- simple_select:
- SELECT opt_distinct target_list into_clause from_clause where_clause group_clause having_clause
- { 
- $$ = cat_str(8,make_str("select"),$2,$3,$4,$5,$6,$7,$8);
-}
-|  values_clause
- { 
- $$ = $1;
-}
-|  select_clause UNION opt_all select_clause
- { 
- $$ = cat_str(4,$1,make_str("union"),$3,$4);
-}
-|  select_clause INTERSECT opt_all select_clause
- { 
- $$ = cat_str(4,$1,make_str("intersect"),$3,$4);
-}
-|  select_clause EXCEPT opt_all select_clause
- { 
- $$ = cat_str(4,$1,make_str("except"),$3,$4);
-}
-;
-
-
- with_clause:
- WITH cte_list
- { 
- $$ = cat_str(2,make_str("with"),$2);
-}
-|  WITH RECURSIVE cte_list
- { 
- $$ = cat_str(2,make_str("with recursive"),$3);
-}
-;
-
-
- cte_list:
- common_table_expr
- { 
- $$ = $1;
-}
-|  cte_list ',' common_table_expr
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- common_table_expr:
- name opt_name_list AS select_with_parens
- { 
- $$ = cat_str(4,$1,$2,make_str("as"),$4);
-}
-;
-
-
- into_clause:
- INTO OptTempTableName
-					{
-						FoundInto = 1;
-						$$= cat2_str(make_str("into"), $2);
-					}
-	| ecpg_into                     { $$ = EMPTY; }
-| 
- { 
- $$=EMPTY; }
-;
-
-
- OptTempTableName:
- TEMPORARY opt_table qualified_name
- { 
- $$ = cat_str(3,make_str("temporary"),$2,$3);
-}
-|  TEMP opt_table qualified_name
- { 
- $$ = cat_str(3,make_str("temp"),$2,$3);
-}
-|  LOCAL TEMPORARY opt_table qualified_name
- { 
- $$ = cat_str(3,make_str("local temporary"),$3,$4);
-}
-|  LOCAL TEMP opt_table qualified_name
- { 
- $$ = cat_str(3,make_str("local temp"),$3,$4);
-}
-|  GLOBAL TEMPORARY opt_table qualified_name
- { 
- $$ = cat_str(3,make_str("global temporary"),$3,$4);
-}
-|  GLOBAL TEMP opt_table qualified_name
- { 
- $$ = cat_str(3,make_str("global temp"),$3,$4);
-}
-|  TABLE qualified_name
- { 
- $$ = cat_str(2,make_str("table"),$2);
-}
-|  qualified_name
- { 
- $$ = $1;
-}
-;
-
-
- opt_table:
- TABLE
- { 
- $$ = make_str("table");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_all:
- ALL
- { 
- $$ = make_str("all");
-}
-|  DISTINCT
- { 
- $$ = make_str("distinct");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_distinct:
- DISTINCT
- { 
- $$ = make_str("distinct");
-}
-|  DISTINCT ON '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("distinct on ("),$4,make_str(")"));
-}
-|  ALL
- { 
- $$ = make_str("all");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_sort_clause:
- sort_clause
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- sort_clause:
- ORDER BY sortby_list
- { 
- $$ = cat_str(2,make_str("order by"),$3);
-}
-;
-
-
- sortby_list:
- sortby
- { 
- $$ = $1;
-}
-|  sortby_list ',' sortby
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- sortby:
- a_expr USING qual_all_Op opt_nulls_order
- { 
- $$ = cat_str(4,$1,make_str("using"),$3,$4);
-}
-|  a_expr opt_asc_desc opt_nulls_order
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-;
-
-
- select_limit:
- LIMIT select_limit_value OFFSET select_offset_value
- { 
- $$ = cat_str(4,make_str("limit"),$2,make_str("offset"),$4);
-}
-|  OFFSET select_offset_value LIMIT select_limit_value
- { 
- $$ = cat_str(4,make_str("offset"),$2,make_str("limit"),$4);
-}
-|  LIMIT select_limit_value
- { 
- $$ = cat_str(2,make_str("limit"),$2);
-}
-|  OFFSET select_offset_value
- { 
- $$ = cat_str(2,make_str("offset"),$2);
-}
-|  LIMIT select_limit_value ',' select_offset_value
-        {
-                mmerror(PARSE_ERROR, ET_WARNING, "no longer supported LIMIT #,# syntax passed to backend");
-                $$ = cat_str(4, make_str("limit"), $2, make_str(","), $4);
-        }
-|  OFFSET select_offset_value2 row_or_rows
- { 
- $$ = cat_str(3,make_str("offset"),$2,$3);
-}
-|  FETCH first_or_next opt_select_fetch_first_value row_or_rows ONLY
- { 
- $$ = cat_str(5,make_str("fetch"),$2,$3,$4,make_str("only"));
-}
-|  OFFSET select_offset_value2 row_or_rows FETCH first_or_next opt_select_fetch_first_value row_or_rows ONLY
- { 
- $$ = cat_str(8,make_str("offset"),$2,$3,make_str("fetch"),$5,$6,$7,make_str("only"));
-}
-;
-
-
- opt_select_limit:
- select_limit
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- select_limit_value:
- a_expr
- { 
- $$ = $1;
-}
-|  ALL
- { 
- $$ = make_str("all");
-}
-;
-
-
- opt_select_fetch_first_value:
- SignedIconst
- { 
- $$ = $1;
-}
-|  '(' a_expr ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- select_offset_value:
- a_expr
- { 
- $$ = $1;
-}
-;
-
-
- select_offset_value2:
- c_expr
- { 
- $$ = $1;
-}
-;
-
-
- row_or_rows:
- ROW
- { 
- $$ = make_str("row");
-}
-|  ROWS
- { 
- $$ = make_str("rows");
-}
-;
-
-
- first_or_next:
- FIRST_P
- { 
- $$ = make_str("first");
-}
-|  NEXT
- { 
- $$ = make_str("next");
-}
-;
-
-
- group_clause:
- GROUP_P BY expr_list
- { 
- $$ = cat_str(2,make_str("group by"),$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- having_clause:
- HAVING a_expr
- { 
- $$ = cat_str(2,make_str("having"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- for_locking_clause:
- for_locking_items
- { 
- $$ = $1;
-}
-|  FOR READ ONLY
- { 
- $$ = make_str("for read only");
-}
-;
-
-
- opt_for_locking_clause:
- for_locking_clause
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- for_locking_items:
- for_locking_item
- { 
- $$ = $1;
-}
-|  for_locking_items for_locking_item
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- for_locking_item:
- FOR UPDATE locked_rels_list opt_nowait
- { 
- $$ = cat_str(3,make_str("for update"),$3,$4);
-}
-|  FOR SHARE locked_rels_list opt_nowait
- { 
- $$ = cat_str(3,make_str("for share"),$3,$4);
-}
-;
-
-
- locked_rels_list:
- OF qualified_name_list
- { 
- $$ = cat_str(2,make_str("of"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- values_clause:
- VALUES ctext_row
- { 
- $$ = cat_str(2,make_str("values"),$2);
-}
-|  values_clause ',' ctext_row
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- from_clause:
- FROM from_list
- { 
- $$ = cat_str(2,make_str("from"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- from_list:
- table_ref
- { 
- $$ = $1;
-}
-|  from_list ',' table_ref
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- table_ref:
- relation_expr
- { 
- $$ = $1;
-}
-|  relation_expr alias_clause
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  func_table
- { 
- $$ = $1;
-}
-|  func_table alias_clause
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  func_table AS '(' TableFuncElementList ')'
- { 
- $$ = cat_str(4,$1,make_str("as ("),$4,make_str(")"));
-}
-|  func_table AS ColId '(' TableFuncElementList ')'
- { 
- $$ = cat_str(6,$1,make_str("as"),$3,make_str("("),$5,make_str(")"));
-}
-|  func_table ColId '(' TableFuncElementList ')'
- { 
- $$ = cat_str(5,$1,$2,make_str("("),$4,make_str(")"));
-}
-|  select_with_parens
- { 
-		mmerror(PARSE_ERROR, ET_ERROR, "sub-SELECT in FROM must have an alias\n");
-
- $$ = $1;
-}
-|  select_with_parens alias_clause
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  joined_table
- { 
- $$ = $1;
-}
-|  '(' joined_table ')' alias_clause
- { 
- $$ = cat_str(4,make_str("("),$2,make_str(")"),$4);
-}
-;
-
-
- joined_table:
- '(' joined_table ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-|  table_ref CROSS JOIN table_ref
- { 
- $$ = cat_str(3,$1,make_str("cross join"),$4);
-}
-|  table_ref join_type JOIN table_ref join_qual
- { 
- $$ = cat_str(5,$1,$2,make_str("join"),$4,$5);
-}
-|  table_ref JOIN table_ref join_qual
- { 
- $$ = cat_str(4,$1,make_str("join"),$3,$4);
-}
-|  table_ref NATURAL join_type JOIN table_ref
- { 
- $$ = cat_str(5,$1,make_str("natural"),$3,make_str("join"),$5);
-}
-|  table_ref NATURAL JOIN table_ref
- { 
- $$ = cat_str(3,$1,make_str("natural join"),$4);
-}
-;
-
-
- alias_clause:
- AS ColId '(' name_list ')'
- { 
- $$ = cat_str(5,make_str("as"),$2,make_str("("),$4,make_str(")"));
-}
-|  AS ColId
- { 
- $$ = cat_str(2,make_str("as"),$2);
-}
-|  ColId '(' name_list ')'
- { 
- $$ = cat_str(4,$1,make_str("("),$3,make_str(")"));
-}
-|  ColId
- { 
- $$ = $1;
-}
-;
-
-
- join_type:
- FULL join_outer
- { 
- $$ = cat_str(2,make_str("full"),$2);
-}
-|  LEFT join_outer
- { 
- $$ = cat_str(2,make_str("left"),$2);
-}
-|  RIGHT join_outer
- { 
- $$ = cat_str(2,make_str("right"),$2);
-}
-|  INNER_P
- { 
- $$ = make_str("inner");
-}
-;
-
-
- join_outer:
- OUTER_P
- { 
- $$ = make_str("outer");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- join_qual:
- USING '(' name_list ')'
- { 
- $$ = cat_str(3,make_str("using ("),$3,make_str(")"));
-}
-|  ON a_expr
- { 
- $$ = cat_str(2,make_str("on"),$2);
-}
-;
-
-
- relation_expr:
- qualified_name
- { 
- $$ = $1;
-}
-|  qualified_name '*'
- { 
- $$ = cat_str(2,$1,make_str("*"));
-}
-|  ONLY qualified_name
- { 
- $$ = cat_str(2,make_str("only"),$2);
-}
-|  ONLY '(' qualified_name ')'
- { 
- $$ = cat_str(3,make_str("only ("),$3,make_str(")"));
-}
-;
-
-
- relation_expr_opt_alias:
- relation_expr %prec UMINUS
- { 
- $$ = $1;
-}
-|  relation_expr ColId
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  relation_expr AS ColId
- { 
- $$ = cat_str(3,$1,make_str("as"),$3);
-}
-;
-
-
- func_table:
- func_expr
- { 
- $$ = $1;
-}
-;
-
-
- where_clause:
- WHERE a_expr
- { 
- $$ = cat_str(2,make_str("where"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- where_or_current_clause:
- WHERE a_expr
- { 
- $$ = cat_str(2,make_str("where"),$2);
-}
-|  WHERE CURRENT_P OF name
- { 
- $$ = cat_str(2,make_str("where current of"),$4);
-}
-|  WHERE CURRENT_P OF ecpg_param
- { 
- $$ = cat_str(2,make_str("where current of"),$4);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- TableFuncElementList:
- TableFuncElement
- { 
- $$ = $1;
-}
-|  TableFuncElementList ',' TableFuncElement
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- TableFuncElement:
- ColId Typename
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- Typename:
- SimpleTypename opt_array_bounds
-	{	$$ = cat2_str($1, $2.str); }
-|  SETOF SimpleTypename opt_array_bounds
-	{	$$ = $$ = cat_str(3, make_str("setof"), $2, $3.str); }
-|  SimpleTypename ARRAY '[' Iconst ']'
- { 
- $$ = cat_str(4,$1,make_str("array ["),$4,make_str("]"));
-}
-|  SETOF SimpleTypename ARRAY '[' Iconst ']'
- { 
- $$ = cat_str(5,make_str("setof"),$2,make_str("array ["),$5,make_str("]"));
-}
-|  SimpleTypename ARRAY
- { 
- $$ = cat_str(2,$1,make_str("array"));
-}
-|  SETOF SimpleTypename ARRAY
- { 
- $$ = cat_str(3,make_str("setof"),$2,make_str("array"));
-}
-;
-
-
- opt_array_bounds:
- opt_array_bounds '[' ']'
-	{
-		$$.index1 = $1.index1;
-		$$.index2 = $1.index2;
-		if (strcmp($$.index1, "-1") == 0)
-			$$.index1 = make_str("0");
-		else if (strcmp($1.index2, "-1") == 0)
-			$$.index2 = make_str("0");
-		$$.str = cat_str(2, $1.str, make_str("[]"));
-	}
-	| opt_array_bounds '[' Iresult ']'
-	{
-		$$.index1 = $1.index1;
-		$$.index2 = $1.index2;
-		if (strcmp($1.index1, "-1") == 0)
-			$$.index1 = strdup($3);
-		else if (strcmp($1.index2, "-1") == 0)
-			$$.index2 = strdup($3);
-		$$.str = cat_str(4, $1.str, make_str("["), $3, make_str("]"));
-	}
-| 
-	{
-		$$.index1 = make_str("-1");
-		$$.index2 = make_str("-1");
-		$$.str= EMPTY;
-	}
-;
-
-
- SimpleTypename:
- GenericType
- { 
- $$ = $1;
-}
-|  Numeric
- { 
- $$ = $1;
-}
-|  Bit
- { 
- $$ = $1;
-}
-|  Character
- { 
- $$ = $1;
-}
-|  ConstDatetime
- { 
- $$ = $1;
-}
-|  ConstInterval opt_interval
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  ConstInterval '(' Iconst ')' opt_interval
- { 
- $$ = cat_str(5,$1,make_str("("),$3,make_str(")"),$5);
-}
-;
-
-
- ConstTypename:
- Numeric
- { 
- $$ = $1;
-}
-|  ConstBit
- { 
- $$ = $1;
-}
-|  ConstCharacter
- { 
- $$ = $1;
-}
-|  ConstDatetime
- { 
- $$ = $1;
-}
-;
-
-
- GenericType:
- type_function_name opt_type_modifiers
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  type_function_name attrs opt_type_modifiers
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-;
-
-
- opt_type_modifiers:
- '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- Numeric:
- INT_P
- { 
- $$ = make_str("int");
-}
-|  INTEGER
- { 
- $$ = make_str("integer");
-}
-|  SMALLINT
- { 
- $$ = make_str("smallint");
-}
-|  BIGINT
- { 
- $$ = make_str("bigint");
-}
-|  REAL
- { 
- $$ = make_str("real");
-}
-|  FLOAT_P opt_float
- { 
- $$ = cat_str(2,make_str("float"),$2);
-}
-|  DOUBLE_P PRECISION
- { 
- $$ = make_str("double precision");
-}
-|  DECIMAL_P opt_type_modifiers
- { 
- $$ = cat_str(2,make_str("decimal"),$2);
-}
-|  DEC opt_type_modifiers
- { 
- $$ = cat_str(2,make_str("dec"),$2);
-}
-|  NUMERIC opt_type_modifiers
- { 
- $$ = cat_str(2,make_str("numeric"),$2);
-}
-|  BOOLEAN_P
- { 
- $$ = make_str("boolean");
-}
-;
-
-
- opt_float:
- '(' Iconst ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- Bit:
- BitWithLength
- { 
- $$ = $1;
-}
-|  BitWithoutLength
- { 
- $$ = $1;
-}
-;
-
-
- ConstBit:
- BitWithLength
- { 
- $$ = $1;
-}
-|  BitWithoutLength
- { 
- $$ = $1;
-}
-;
-
-
- BitWithLength:
- BIT opt_varying '(' expr_list ')'
- { 
- $$ = cat_str(5,make_str("bit"),$2,make_str("("),$4,make_str(")"));
-}
-;
-
-
- BitWithoutLength:
- BIT opt_varying
- { 
- $$ = cat_str(2,make_str("bit"),$2);
-}
-;
-
-
- Character:
- CharacterWithLength
- { 
- $$ = $1;
-}
-|  CharacterWithoutLength
- { 
- $$ = $1;
-}
-;
-
-
- ConstCharacter:
- CharacterWithLength
- { 
- $$ = $1;
-}
-|  CharacterWithoutLength
- { 
- $$ = $1;
-}
-;
-
-
- CharacterWithLength:
- character '(' Iconst ')' opt_charset
- { 
- $$ = cat_str(5,$1,make_str("("),$3,make_str(")"),$5);
-}
-;
-
-
- CharacterWithoutLength:
- character opt_charset
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- character:
- CHARACTER opt_varying
- { 
- $$ = cat_str(2,make_str("character"),$2);
-}
-|  CHAR_P opt_varying
- { 
- $$ = cat_str(2,make_str("char"),$2);
-}
-|  VARCHAR
- { 
- $$ = make_str("varchar");
-}
-|  NATIONAL CHARACTER opt_varying
- { 
- $$ = cat_str(2,make_str("national character"),$3);
-}
-|  NATIONAL CHAR_P opt_varying
- { 
- $$ = cat_str(2,make_str("national char"),$3);
-}
-|  NCHAR opt_varying
- { 
- $$ = cat_str(2,make_str("nchar"),$2);
-}
-;
-
-
- opt_varying:
- VARYING
- { 
- $$ = make_str("varying");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_charset:
- CHARACTER SET ColId
- { 
- $$ = cat_str(2,make_str("character set"),$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ConstDatetime:
- TIMESTAMP '(' Iconst ')' opt_timezone
- { 
- $$ = cat_str(4,make_str("timestamp ("),$3,make_str(")"),$5);
-}
-|  TIMESTAMP opt_timezone
- { 
- $$ = cat_str(2,make_str("timestamp"),$2);
-}
-|  TIME '(' Iconst ')' opt_timezone
- { 
- $$ = cat_str(4,make_str("time ("),$3,make_str(")"),$5);
-}
-|  TIME opt_timezone
- { 
- $$ = cat_str(2,make_str("time"),$2);
-}
-;
-
-
- ConstInterval:
- INTERVAL
- { 
- $$ = make_str("interval");
-}
-;
-
-
- opt_timezone:
- WITH_TIME ZONE
- { 
- $$ = make_str("with time zone");
-}
-|  WITHOUT TIME ZONE
- { 
- $$ = make_str("without time zone");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- opt_interval:
- YEAR_P
- { 
- $$ = make_str("year");
-}
-|  MONTH_P
- { 
- $$ = make_str("month");
-}
-|  DAY_P
- { 
- $$ = make_str("day");
-}
-|  HOUR_P
- { 
- $$ = make_str("hour");
-}
-|  MINUTE_P
- { 
- $$ = make_str("minute");
-}
-|  interval_second
- { 
- $$ = $1;
-}
-|  YEAR_P TO MONTH_P
- { 
- $$ = make_str("year to month");
-}
-|  DAY_P TO HOUR_P
- { 
- $$ = make_str("day to hour");
-}
-|  DAY_P TO MINUTE_P
- { 
- $$ = make_str("day to minute");
-}
-|  DAY_P TO interval_second
- { 
- $$ = cat_str(2,make_str("day to"),$3);
-}
-|  HOUR_P TO MINUTE_P
- { 
- $$ = make_str("hour to minute");
-}
-|  HOUR_P TO interval_second
- { 
- $$ = cat_str(2,make_str("hour to"),$3);
-}
-|  MINUTE_P TO interval_second
- { 
- $$ = cat_str(2,make_str("minute to"),$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- interval_second:
- SECOND_P
- { 
- $$ = make_str("second");
-}
-|  SECOND_P '(' Iconst ')'
- { 
- $$ = cat_str(3,make_str("second ("),$3,make_str(")"));
-}
-;
-
-
- a_expr:
- c_expr
- { 
- $$ = $1;
-}
-|  a_expr TYPECAST Typename
- { 
- $$ = cat_str(3,$1,make_str("::"),$3);
-}
-|  a_expr AT TIME ZONE a_expr
- { 
- $$ = cat_str(3,$1,make_str("at time zone"),$5);
-}
-|  '+' a_expr %prec UMINUS
- { 
- $$ = cat_str(2,make_str("+"),$2);
-}
-|  '-' a_expr %prec UMINUS
- { 
- $$ = cat_str(2,make_str("-"),$2);
-}
-|  a_expr '+' a_expr
- { 
- $$ = cat_str(3,$1,make_str("+"),$3);
-}
-|  a_expr '-' a_expr
- { 
- $$ = cat_str(3,$1,make_str("-"),$3);
-}
-|  a_expr '*' a_expr
- { 
- $$ = cat_str(3,$1,make_str("*"),$3);
-}
-|  a_expr '/' a_expr
- { 
- $$ = cat_str(3,$1,make_str("/"),$3);
-}
-|  a_expr '%' a_expr
- { 
- $$ = cat_str(3,$1,make_str("%"),$3);
-}
-|  a_expr '^' a_expr
- { 
- $$ = cat_str(3,$1,make_str("^"),$3);
-}
-|  a_expr '<' a_expr
- { 
- $$ = cat_str(3,$1,make_str("<"),$3);
-}
-|  a_expr '>' a_expr
- { 
- $$ = cat_str(3,$1,make_str(">"),$3);
-}
-|  a_expr '=' a_expr
- { 
- $$ = cat_str(3,$1,make_str("="),$3);
-}
-|  a_expr qual_Op a_expr %prec Op
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  qual_Op a_expr %prec Op
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  a_expr qual_Op %prec POSTFIXOP
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  a_expr AND a_expr
- { 
- $$ = cat_str(3,$1,make_str("and"),$3);
-}
-|  a_expr OR a_expr
- { 
- $$ = cat_str(3,$1,make_str("or"),$3);
-}
-|  NOT a_expr
- { 
- $$ = cat_str(2,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 SIMILAR TO a_expr %prec SIMILAR
- { 
- $$ = cat_str(3,$1,make_str("similar to"),$4);
-}
-|  a_expr SIMILAR TO a_expr ESCAPE a_expr
- { 
- $$ = cat_str(5,$1,make_str("similar to"),$4,make_str("escape"),$6);
-}
-|  a_expr NOT SIMILAR TO a_expr %prec SIMILAR
- { 
- $$ = cat_str(3,$1,make_str("not similar to"),$5);
-}
-|  a_expr NOT SIMILAR TO a_expr ESCAPE a_expr
- { 
- $$ = cat_str(5,$1,make_str("not similar to"),$5,make_str("escape"),$7);
-}
-|  a_expr IS NULL_P
- { 
- $$ = cat_str(2,$1,make_str("is null"));
-}
-|  a_expr ISNULL
- { 
- $$ = cat_str(2,$1,make_str("isnull"));
-}
-|  a_expr IS NOT NULL_P
- { 
- $$ = cat_str(2,$1,make_str("is not null"));
-}
-|  a_expr NOTNULL
- { 
- $$ = cat_str(2,$1,make_str("notnull"));
-}
-|  row OVERLAPS row
- { 
- $$ = cat_str(3,$1,make_str("overlaps"),$3);
-}
-|  a_expr IS TRUE_P
- { 
- $$ = cat_str(2,$1,make_str("is true"));
-}
-|  a_expr IS NOT TRUE_P
- { 
- $$ = cat_str(2,$1,make_str("is not true"));
-}
-|  a_expr IS FALSE_P
- { 
- $$ = cat_str(2,$1,make_str("is false"));
-}
-|  a_expr IS NOT FALSE_P
- { 
- $$ = cat_str(2,$1,make_str("is not false"));
-}
-|  a_expr IS UNKNOWN
- { 
- $$ = cat_str(2,$1,make_str("is unknown"));
-}
-|  a_expr IS NOT UNKNOWN
- { 
- $$ = cat_str(2,$1,make_str("is not unknown"));
-}
-|  a_expr IS DISTINCT FROM a_expr %prec IS
- { 
- $$ = cat_str(3,$1,make_str("is distinct from"),$5);
-}
-|  a_expr IS NOT DISTINCT FROM a_expr %prec IS
- { 
- $$ = cat_str(3,$1,make_str("is not distinct from"),$6);
-}
-|  a_expr IS OF '(' type_list ')' %prec IS
- { 
- $$ = cat_str(4,$1,make_str("is of ("),$5,make_str(")"));
-}
-|  a_expr IS NOT OF '(' type_list ')' %prec IS
- { 
- $$ = cat_str(4,$1,make_str("is not of ("),$6,make_str(")"));
-}
-|  a_expr BETWEEN opt_asymmetric b_expr AND b_expr %prec BETWEEN
- { 
- $$ = cat_str(6,$1,make_str("between"),$3,$4,make_str("and"),$6);
-}
-|  a_expr NOT BETWEEN opt_asymmetric b_expr AND b_expr %prec BETWEEN
- { 
- $$ = cat_str(6,$1,make_str("not between"),$4,$5,make_str("and"),$7);
-}
-|  a_expr BETWEEN SYMMETRIC b_expr AND b_expr %prec BETWEEN
- { 
- $$ = cat_str(5,$1,make_str("between symmetric"),$4,make_str("and"),$6);
-}
-|  a_expr NOT BETWEEN SYMMETRIC b_expr AND b_expr %prec BETWEEN
- { 
- $$ = cat_str(5,$1,make_str("not between symmetric"),$5,make_str("and"),$7);
-}
-|  a_expr IN_P in_expr
- { 
- $$ = cat_str(3,$1,make_str("in"),$3);
-}
-|  a_expr NOT IN_P in_expr
- { 
- $$ = cat_str(3,$1,make_str("not in"),$4);
-}
-|  a_expr subquery_Op sub_type select_with_parens %prec Op
- { 
- $$ = cat_str(4,$1,$2,$3,$4);
-}
-|  a_expr subquery_Op sub_type '(' a_expr ')' %prec Op
- { 
- $$ = cat_str(6,$1,$2,$3,make_str("("),$5,make_str(")"));
-}
-|  UNIQUE select_with_parens
- { 
-mmerror(PARSE_ERROR, ET_WARNING, "unsupported feature will be passed to backend\n");
- $$ = cat_str(2,make_str("unique"),$2);
-}
-|  a_expr IS DOCUMENT_P %prec IS
- { 
- $$ = cat_str(2,$1,make_str("is document"));
-}
-|  a_expr IS NOT DOCUMENT_P %prec IS
- { 
- $$ = cat_str(2,$1,make_str("is not document"));
-}
-;
-
-
- b_expr:
- c_expr
- { 
- $$ = $1;
-}
-|  b_expr TYPECAST Typename
- { 
- $$ = cat_str(3,$1,make_str("::"),$3);
-}
-|  '+' b_expr %prec UMINUS
- { 
- $$ = cat_str(2,make_str("+"),$2);
-}
-|  '-' b_expr %prec UMINUS
- { 
- $$ = cat_str(2,make_str("-"),$2);
-}
-|  b_expr '+' b_expr
- { 
- $$ = cat_str(3,$1,make_str("+"),$3);
-}
-|  b_expr '-' b_expr
- { 
- $$ = cat_str(3,$1,make_str("-"),$3);
-}
-|  b_expr '*' b_expr
- { 
- $$ = cat_str(3,$1,make_str("*"),$3);
-}
-|  b_expr '/' b_expr
- { 
- $$ = cat_str(3,$1,make_str("/"),$3);
-}
-|  b_expr '%' b_expr
- { 
- $$ = cat_str(3,$1,make_str("%"),$3);
-}
-|  b_expr '^' b_expr
- { 
- $$ = cat_str(3,$1,make_str("^"),$3);
-}
-|  b_expr '<' b_expr
- { 
- $$ = cat_str(3,$1,make_str("<"),$3);
-}
-|  b_expr '>' b_expr
- { 
- $$ = cat_str(3,$1,make_str(">"),$3);
-}
-|  b_expr '=' b_expr
- { 
- $$ = cat_str(3,$1,make_str("="),$3);
-}
-|  b_expr qual_Op b_expr %prec Op
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  qual_Op b_expr %prec Op
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  b_expr qual_Op %prec POSTFIXOP
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  b_expr IS DISTINCT FROM b_expr %prec IS
- { 
- $$ = cat_str(3,$1,make_str("is distinct from"),$5);
-}
-|  b_expr IS NOT DISTINCT FROM b_expr %prec IS
- { 
- $$ = cat_str(3,$1,make_str("is not distinct from"),$6);
-}
-|  b_expr IS OF '(' type_list ')' %prec IS
- { 
- $$ = cat_str(4,$1,make_str("is of ("),$5,make_str(")"));
-}
-|  b_expr IS NOT OF '(' type_list ')' %prec IS
- { 
- $$ = cat_str(4,$1,make_str("is not of ("),$6,make_str(")"));
-}
-|  b_expr IS DOCUMENT_P %prec IS
- { 
- $$ = cat_str(2,$1,make_str("is document"));
-}
-|  b_expr IS NOT DOCUMENT_P %prec IS
- { 
- $$ = cat_str(2,$1,make_str("is not document"));
-}
-;
-
-
- c_expr:
- columnref
- { 
- $$ = $1;
-}
-|  AexprConst
- { 
- $$ = $1;
-}
-|  ecpg_param opt_indirection
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  '(' a_expr ')' opt_indirection
- { 
- $$ = cat_str(4,make_str("("),$2,make_str(")"),$4);
-}
-|  case_expr
- { 
- $$ = $1;
-}
-|  func_expr
- { 
- $$ = $1;
-}
-|  select_with_parens %prec UMINUS
- { 
- $$ = $1;
-}
-|  EXISTS select_with_parens
- { 
- $$ = cat_str(2,make_str("exists"),$2);
-}
-|  ARRAY select_with_parens
- { 
- $$ = cat_str(2,make_str("array"),$2);
-}
-|  ARRAY array_expr
- { 
- $$ = cat_str(2,make_str("array"),$2);
-}
-|  row
- { 
- $$ = $1;
-}
-;
-
-
- func_expr:
- func_name '(' ')'
- { 
- $$ = cat_str(2,$1,make_str("( )"));
-}
-|  func_name '(' expr_list ')'
- { 
- $$ = cat_str(4,$1,make_str("("),$3,make_str(")"));
-}
-|  func_name '(' VARIADIC a_expr ')'
- { 
- $$ = cat_str(4,$1,make_str("( variadic"),$4,make_str(")"));
-}
-|  func_name '(' expr_list ',' VARIADIC a_expr ')'
- { 
- $$ = cat_str(6,$1,make_str("("),$3,make_str(", variadic"),$6,make_str(")"));
-}
-|  func_name '(' ALL expr_list ')'
- { 
- $$ = cat_str(4,$1,make_str("( all"),$4,make_str(")"));
-}
-|  func_name '(' DISTINCT expr_list ')'
- { 
- $$ = cat_str(4,$1,make_str("( distinct"),$4,make_str(")"));
-}
-|  func_name '(' '*' ')'
- { 
- $$ = cat_str(2,$1,make_str("( * )"));
-}
-|  CURRENT_DATE
- { 
- $$ = make_str("current_date");
-}
-|  CURRENT_TIME
- { 
- $$ = make_str("current_time");
-}
-|  CURRENT_TIME '(' Iconst ')'
- { 
- $$ = cat_str(3,make_str("current_time ("),$3,make_str(")"));
-}
-|  CURRENT_TIMESTAMP
- { 
- $$ = make_str("current_timestamp");
-}
-|  CURRENT_TIMESTAMP '(' Iconst ')'
- { 
- $$ = cat_str(3,make_str("current_timestamp ("),$3,make_str(")"));
-}
-|  LOCALTIME
- { 
- $$ = make_str("localtime");
-}
-|  LOCALTIME '(' Iconst ')'
- { 
- $$ = cat_str(3,make_str("localtime ("),$3,make_str(")"));
-}
-|  LOCALTIMESTAMP
- { 
- $$ = make_str("localtimestamp");
-}
-|  LOCALTIMESTAMP '(' Iconst ')'
- { 
- $$ = cat_str(3,make_str("localtimestamp ("),$3,make_str(")"));
-}
-|  CURRENT_ROLE
- { 
- $$ = make_str("current_role");
-}
-|  CURRENT_USER
- { 
- $$ = make_str("current_user");
-}
-|  SESSION_USER
- { 
- $$ = make_str("session_user");
-}
-|  USER
- { 
- $$ = make_str("user");
-}
-|  CURRENT_CATALOG
- { 
- $$ = make_str("current_catalog");
-}
-|  CURRENT_SCHEMA
- { 
- $$ = make_str("current_schema");
-}
-|  CAST '(' a_expr AS Typename ')'
- { 
- $$ = cat_str(5,make_str("cast ("),$3,make_str("as"),$5,make_str(")"));
-}
-|  EXTRACT '(' extract_list ')'
- { 
- $$ = cat_str(3,make_str("extract ("),$3,make_str(")"));
-}
-|  OVERLAY '(' overlay_list ')'
- { 
- $$ = cat_str(3,make_str("overlay ("),$3,make_str(")"));
-}
-|  POSITION '(' position_list ')'
- { 
- $$ = cat_str(3,make_str("position ("),$3,make_str(")"));
-}
-|  SUBSTRING '(' substr_list ')'
- { 
- $$ = cat_str(3,make_str("substring ("),$3,make_str(")"));
-}
-|  TREAT '(' a_expr AS Typename ')'
- { 
- $$ = cat_str(5,make_str("treat ("),$3,make_str("as"),$5,make_str(")"));
-}
-|  TRIM '(' BOTH trim_list ')'
- { 
- $$ = cat_str(3,make_str("trim ( both"),$4,make_str(")"));
-}
-|  TRIM '(' LEADING trim_list ')'
- { 
- $$ = cat_str(3,make_str("trim ( leading"),$4,make_str(")"));
-}
-|  TRIM '(' TRAILING trim_list ')'
- { 
- $$ = cat_str(3,make_str("trim ( trailing"),$4,make_str(")"));
-}
-|  TRIM '(' trim_list ')'
- { 
- $$ = cat_str(3,make_str("trim ("),$3,make_str(")"));
-}
-|  NULLIF '(' a_expr ',' a_expr ')'
- { 
- $$ = cat_str(5,make_str("nullif ("),$3,make_str(","),$5,make_str(")"));
-}
-|  COALESCE '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("coalesce ("),$3,make_str(")"));
-}
-|  GREATEST '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("greatest ("),$3,make_str(")"));
-}
-|  LEAST '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("least ("),$3,make_str(")"));
-}
-|  XMLCONCAT '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("xmlconcat ("),$3,make_str(")"));
-}
-|  XMLELEMENT '(' NAME_P ColLabel ')'
- { 
- $$ = cat_str(3,make_str("xmlelement ( name"),$4,make_str(")"));
-}
-|  XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ')'
- { 
- $$ = cat_str(5,make_str("xmlelement ( name"),$4,make_str(","),$6,make_str(")"));
-}
-|  XMLELEMENT '(' NAME_P ColLabel ',' expr_list ')'
- { 
- $$ = cat_str(5,make_str("xmlelement ( name"),$4,make_str(","),$6,make_str(")"));
-}
-|  XMLELEMENT '(' NAME_P ColLabel ',' xml_attributes ',' expr_list ')'
- { 
- $$ = cat_str(7,make_str("xmlelement ( name"),$4,make_str(","),$6,make_str(","),$8,make_str(")"));
-}
-|  XMLFOREST '(' xml_attribute_list ')'
- { 
- $$ = cat_str(3,make_str("xmlforest ("),$3,make_str(")"));
-}
-|  XMLPARSE '(' document_or_content a_expr xml_whitespace_option ')'
- { 
- $$ = cat_str(5,make_str("xmlparse ("),$3,$4,$5,make_str(")"));
-}
-|  XMLPI '(' NAME_P ColLabel ')'
- { 
- $$ = cat_str(3,make_str("xmlpi ( name"),$4,make_str(")"));
-}
-|  XMLPI '(' NAME_P ColLabel ',' a_expr ')'
- { 
- $$ = cat_str(5,make_str("xmlpi ( name"),$4,make_str(","),$6,make_str(")"));
-}
-|  XMLROOT '(' a_expr ',' xml_root_version opt_xml_root_standalone ')'
- { 
- $$ = cat_str(6,make_str("xmlroot ("),$3,make_str(","),$5,$6,make_str(")"));
-}
-|  XMLSERIALIZE '(' document_or_content a_expr AS SimpleTypename ')'
- { 
- $$ = cat_str(6,make_str("xmlserialize ("),$3,$4,make_str("as"),$6,make_str(")"));
-}
-;
-
-
- xml_root_version:
- VERSION_P a_expr
- { 
- $$ = cat_str(2,make_str("version"),$2);
-}
-|  VERSION_P NO VALUE_P
- { 
- $$ = make_str("version no value");
-}
-;
-
-
- opt_xml_root_standalone:
- ',' STANDALONE_P YES_P
- { 
- $$ = make_str(", standalone yes");
-}
-|  ',' STANDALONE_P NO
- { 
- $$ = make_str(", standalone no");
-}
-|  ',' STANDALONE_P NO VALUE_P
- { 
- $$ = make_str(", standalone no value");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- xml_attributes:
- XMLATTRIBUTES '(' xml_attribute_list ')'
- { 
- $$ = cat_str(3,make_str("xmlattributes ("),$3,make_str(")"));
-}
-;
-
-
- xml_attribute_list:
- xml_attribute_el
- { 
- $$ = $1;
-}
-|  xml_attribute_list ',' xml_attribute_el
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- xml_attribute_el:
- a_expr AS ColLabel
- { 
- $$ = cat_str(3,$1,make_str("as"),$3);
-}
-|  a_expr
- { 
- $$ = $1;
-}
-;
-
-
- document_or_content:
- DOCUMENT_P
- { 
- $$ = make_str("document");
-}
-|  CONTENT_P
- { 
- $$ = make_str("content");
-}
-;
-
-
- xml_whitespace_option:
- PRESERVE WHITESPACE_P
- { 
- $$ = make_str("preserve whitespace");
-}
-|  STRIP_P WHITESPACE_P
- { 
- $$ = make_str("strip whitespace");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- row:
- ROW '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("row ("),$3,make_str(")"));
-}
-|  ROW '(' ')'
- { 
- $$ = make_str("row ( )");
-}
-|  '(' expr_list ',' a_expr ')'
- { 
- $$ = cat_str(5,make_str("("),$2,make_str(","),$4,make_str(")"));
-}
-;
-
-
- sub_type:
- ANY
- { 
- $$ = make_str("any");
-}
-|  SOME
- { 
- $$ = make_str("some");
-}
-|  ALL
- { 
- $$ = make_str("all");
-}
-;
-
-
- all_Op:
- Op
- { 
- $$ = $1;
-}
-|  MathOp
- { 
- $$ = $1;
-}
-;
-
-
- MathOp:
- '+'
- { 
- $$ = make_str("+");
-}
-|  '-'
- { 
- $$ = make_str("-");
-}
-|  '*'
- { 
- $$ = make_str("*");
-}
-|  '/'
- { 
- $$ = make_str("/");
-}
-|  '%'
- { 
- $$ = make_str("%");
-}
-|  '^'
- { 
- $$ = make_str("^");
-}
-|  '<'
- { 
- $$ = make_str("<");
-}
-|  '>'
- { 
- $$ = make_str(">");
-}
-|  '='
- { 
- $$ = make_str("=");
-}
-;
-
-
- qual_Op:
- Op
- { 
- $$ = $1;
-}
-|  OPERATOR '(' any_operator ')'
- { 
- $$ = cat_str(3,make_str("operator ("),$3,make_str(")"));
-}
-;
-
-
- qual_all_Op:
- all_Op
- { 
- $$ = $1;
-}
-|  OPERATOR '(' any_operator ')'
- { 
- $$ = cat_str(3,make_str("operator ("),$3,make_str(")"));
-}
-;
-
-
- subquery_Op:
- all_Op
- { 
- $$ = $1;
-}
-|  OPERATOR '(' any_operator ')'
- { 
- $$ = cat_str(3,make_str("operator ("),$3,make_str(")"));
-}
-|  LIKE
- { 
- $$ = make_str("like");
-}
-|  NOT LIKE
- { 
- $$ = make_str("not like");
-}
-|  ILIKE
- { 
- $$ = make_str("ilike");
-}
-|  NOT ILIKE
- { 
- $$ = make_str("not ilike");
-}
-;
-
-
- expr_list:
- a_expr
- { 
- $$ = $1;
-}
-|  expr_list ',' a_expr
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- type_list:
- Typename
- { 
- $$ = $1;
-}
-|  type_list ',' Typename
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- array_expr:
- '[' expr_list ']'
- { 
- $$ = cat_str(3,make_str("["),$2,make_str("]"));
-}
-|  '[' array_expr_list ']'
- { 
- $$ = cat_str(3,make_str("["),$2,make_str("]"));
-}
-|  '[' ']'
- { 
- $$ = make_str("[ ]");
-}
-;
-
-
- array_expr_list:
- array_expr
- { 
- $$ = $1;
-}
-|  array_expr_list ',' array_expr
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- extract_list:
- extract_arg FROM a_expr
- { 
- $$ = cat_str(3,$1,make_str("from"),$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- extract_arg:
- ecpg_ident
- { 
- $$ = $1;
-}
-|  YEAR_P
- { 
- $$ = make_str("year");
-}
-|  MONTH_P
- { 
- $$ = make_str("month");
-}
-|  DAY_P
- { 
- $$ = make_str("day");
-}
-|  HOUR_P
- { 
- $$ = make_str("hour");
-}
-|  MINUTE_P
- { 
- $$ = make_str("minute");
-}
-|  SECOND_P
- { 
- $$ = make_str("second");
-}
-|  ecpg_sconst
- { 
- $$ = $1;
-}
-;
-
-
- overlay_list:
- a_expr overlay_placing substr_from substr_for
- { 
- $$ = cat_str(4,$1,$2,$3,$4);
-}
-|  a_expr overlay_placing substr_from
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-;
-
-
- overlay_placing:
- PLACING a_expr
- { 
- $$ = cat_str(2,make_str("placing"),$2);
-}
-;
-
-
- position_list:
- b_expr IN_P b_expr
- { 
- $$ = cat_str(3,$1,make_str("in"),$3);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- substr_list:
- a_expr substr_from substr_for
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  a_expr substr_for substr_from
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  a_expr substr_from
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  a_expr substr_for
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  expr_list
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- substr_from:
- FROM a_expr
- { 
- $$ = cat_str(2,make_str("from"),$2);
-}
-;
-
-
- substr_for:
- FOR a_expr
- { 
- $$ = cat_str(2,make_str("for"),$2);
-}
-;
-
-
- trim_list:
- a_expr FROM expr_list
- { 
- $$ = cat_str(3,$1,make_str("from"),$3);
-}
-|  FROM expr_list
- { 
- $$ = cat_str(2,make_str("from"),$2);
-}
-|  expr_list
- { 
- $$ = $1;
-}
-;
-
-
- in_expr:
- select_with_parens
- { 
- $$ = $1;
-}
-|  '(' expr_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-;
-
-
- case_expr:
- CASE case_arg when_clause_list case_default END_P
- { 
- $$ = cat_str(5,make_str("case"),$2,$3,$4,make_str("end"));
-}
-;
-
-
- when_clause_list:
- when_clause
- { 
- $$ = $1;
-}
-|  when_clause_list when_clause
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- when_clause:
- WHEN a_expr THEN a_expr
- { 
- $$ = cat_str(4,make_str("when"),$2,make_str("then"),$4);
-}
-;
-
-
- case_default:
- ELSE a_expr
- { 
- $$ = cat_str(2,make_str("else"),$2);
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- case_arg:
- a_expr
- { 
- $$ = $1;
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- columnref:
- relation_name
- { 
- $$ = $1;
-}
-|  relation_name indirection
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- indirection_el:
- '.' attr_name
- { 
- $$ = cat_str(2,make_str("."),$2);
-}
-|  '.' '*'
- { 
- $$ = make_str(". *");
-}
-|  '[' a_expr ']'
- { 
- $$ = cat_str(3,make_str("["),$2,make_str("]"));
-}
-|  '[' a_expr ':' a_expr ']'
- { 
- $$ = cat_str(5,make_str("["),$2,make_str(":"),$4,make_str("]"));
-}
-;
-
-
- indirection:
- indirection_el
- { 
- $$ = $1;
-}
-|  indirection indirection_el
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- opt_indirection:
-
- { 
- $$=EMPTY; }
-|  opt_indirection indirection_el
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- opt_asymmetric:
- ASYMMETRIC
- { 
- $$ = make_str("asymmetric");
-}
-| 
- { 
- $$=EMPTY; }
-;
-
-
- ctext_expr:
- a_expr
- { 
- $$ = $1;
-}
-|  DEFAULT
- { 
- $$ = make_str("default");
-}
-;
-
-
- ctext_expr_list:
- ctext_expr
- { 
- $$ = $1;
-}
-|  ctext_expr_list ',' ctext_expr
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- ctext_row:
- '(' ctext_expr_list ')'
- { 
- $$ = cat_str(3,make_str("("),$2,make_str(")"));
-}
-;
-
-
- target_list:
- target_el
- { 
- $$ = $1;
-}
-|  target_list ',' target_el
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- target_el:
- a_expr AS ColLabel
- { 
- $$ = cat_str(3,$1,make_str("as"),$3);
-}
-|  a_expr ecpg_ident
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  a_expr
- { 
- $$ = $1;
-}
-|  '*'
- { 
- $$ = make_str("*");
-}
-;
-
-
- relation_name:
- SpecialRuleRelation
- { 
- $$ = $1;
-}
-|  ColId
- { 
- $$ = $1;
-}
-;
-
-
- qualified_name_list:
- qualified_name
- { 
- $$ = $1;
-}
-|  qualified_name_list ',' qualified_name
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- qualified_name:
- relation_name
- { 
- $$ = $1;
-}
-|  relation_name indirection
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- name_list:
- name
- { 
- $$ = $1;
-}
-|  name_list ',' name
- { 
- $$ = cat_str(3,$1,make_str(","),$3);
-}
-;
-
-
- name:
- ColId
- { 
- $$ = $1;
-}
-;
-
-
- database_name:
- ColId
- { 
- $$ = $1;
-}
-;
-
-
- access_method:
- ColId
- { 
- $$ = $1;
-}
-;
-
-
- attr_name:
- ColLabel
- { 
- $$ = $1;
-}
-;
-
-
- index_name:
- ColId
- { 
- $$ = $1;
-}
-;
-
-
- file_name:
- ecpg_sconst
- { 
- $$ = $1;
-}
-;
-
-
- func_name:
- type_function_name
- { 
- $$ = $1;
-}
-|  relation_name indirection
- { 
- $$ = cat_str(2,$1,$2);
-}
-;
-
-
- AexprConst:
- Iconst
- { 
- $$ = $1;
-}
-|  ecpg_fconst
- { 
- $$ = $1;
-}
-|  ecpg_sconst
- { 
- $$ = $1;
-}
-|  ecpg_bconst
- { 
- $$ = $1;
-}
-|  XCONST
- { 
- $$ = make_str("xconst");
-}
-|  func_name ecpg_sconst
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  func_name '(' expr_list ')' ecpg_sconst
- { 
- $$ = cat_str(5,$1,make_str("("),$3,make_str(")"),$5);
-}
-|  ConstTypename ecpg_sconst
- { 
- $$ = cat_str(2,$1,$2);
-}
-|  ConstInterval ecpg_sconst opt_interval
- { 
- $$ = cat_str(3,$1,$2,$3);
-}
-|  ConstInterval '(' Iconst ')' ecpg_sconst opt_interval
- { 
- $$ = cat_str(6,$1,make_str("("),$3,make_str(")"),$5,$6);
-}
-|  TRUE_P
- { 
- $$ = make_str("true");
-}
-|  FALSE_P
- { 
- $$ = make_str("false");
-}
-|  NULL_P
- { 
- $$ = make_str("null");
-}
-	| civar			{ $$ = $1; }
-	| civarind		{ $$ = $1; }
-;
-
-
- Iconst:
- ICONST
-	{ $$ = make_name(); }
-;
-
-
- RoleId:
- ColId
- { 
- $$ = $1;
-}
-;
-
-
- SignedIconst:
- Iconst
- { 
- $$ = $1;
-}
-	| civar	{ $$ = $1; }
-|  '+' Iconst
- { 
- $$ = cat_str(2,make_str("+"),$2);
-}
-|  '-' Iconst
- { 
- $$ = cat_str(2,make_str("-"),$2);
-}
-;
-
-
- ColId:
- ecpg_ident
- { 
- $$ = $1;
-}
-|  unreserved_keyword
- { 
- $$ = $1;
-}
-|  col_name_keyword
- { 
- $$ = $1;
-}
-	| ECPGKeywords                  { $$ = $1; }
-	| ECPGCKeywords                 { $$ = $1; }
-	| CHAR_P                        { $$ = make_str("char"); }
-	| VALUES                        { $$ = make_str("values"); }
-;
-
-
- type_function_name:
- ecpg_ident
- { 
- $$ = $1;
-}
-|  unreserved_keyword
- { 
- $$ = $1;
-}
-|  type_func_name_keyword
- { 
- $$ = $1;
-}
-	| ECPGKeywords                          { $$ = $1; }
-	| ECPGTypeName                          { $$ = $1; }
-	| ECPGCKeywords                         { $$ = $1; }
-;
-
-
- col_name_keyword:
- BIGINT
- { 
- $$ = make_str("bigint");
-}
-|  BIT
- { 
- $$ = make_str("bit");
-}
-|  BOOLEAN_P
- { 
- $$ = make_str("boolean");
-}
-|  CHARACTER
- { 
- $$ = make_str("character");
-}
-|  COALESCE
- { 
- $$ = make_str("coalesce");
-}
-|  DEC
- { 
- $$ = make_str("dec");
-}
-|  DECIMAL_P
- { 
- $$ = make_str("decimal");
-}
-|  EXISTS
- { 
- $$ = make_str("exists");
-}
-|  EXTRACT
- { 
- $$ = make_str("extract");
-}
-|  FLOAT_P
- { 
- $$ = make_str("float");
-}
-|  GREATEST
- { 
- $$ = make_str("greatest");
-}
-|  INOUT
- { 
- $$ = make_str("inout");
-}
-|  INTEGER
- { 
- $$ = make_str("integer");
-}
-|  INTERVAL
- { 
- $$ = make_str("interval");
-}
-|  LEAST
- { 
- $$ = make_str("least");
-}
-|  NATIONAL
- { 
- $$ = make_str("national");
-}
-|  NCHAR
- { 
- $$ = make_str("nchar");
-}
-|  NONE
- { 
- $$ = make_str("none");
-}
-|  NULLIF
- { 
- $$ = make_str("nullif");
-}
-|  NUMERIC
- { 
- $$ = make_str("numeric");
-}
-|  OUT_P
- { 
- $$ = make_str("out");
-}
-|  OVERLAY
- { 
- $$ = make_str("overlay");
-}
-|  POSITION
- { 
- $$ = make_str("position");
-}
-|  PRECISION
- { 
- $$ = make_str("precision");
-}
-|  REAL
- { 
- $$ = make_str("real");
-}
-|  ROW
- { 
- $$ = make_str("row");
-}
-|  SETOF
- { 
- $$ = make_str("setof");
-}
-|  SMALLINT
- { 
- $$ = make_str("smallint");
-}
-|  SUBSTRING
- { 
- $$ = make_str("substring");
-}
-|  TIME
- { 
- $$ = make_str("time");
-}
-|  TIMESTAMP
- { 
- $$ = make_str("timestamp");
-}
-|  TREAT
- { 
- $$ = make_str("treat");
-}
-|  TRIM
- { 
- $$ = make_str("trim");
-}
-|  VARCHAR
- { 
- $$ = make_str("varchar");
-}
-|  XMLATTRIBUTES
- { 
- $$ = make_str("xmlattributes");
-}
-|  XMLCONCAT
- { 
- $$ = make_str("xmlconcat");
-}
-|  XMLELEMENT
- { 
- $$ = make_str("xmlelement");
-}
-|  XMLFOREST
- { 
- $$ = make_str("xmlforest");
-}
-|  XMLPARSE
- { 
- $$ = make_str("xmlparse");
-}
-|  XMLPI
- { 
- $$ = make_str("xmlpi");
-}
-|  XMLROOT
- { 
- $$ = make_str("xmlroot");
-}
-|  XMLSERIALIZE
- { 
- $$ = make_str("xmlserialize");
-}
-;
-
-
- type_func_name_keyword:
- AUTHORIZATION
- { 
- $$ = make_str("authorization");
-}
-|  BETWEEN
- { 
- $$ = make_str("between");
-}
-|  BINARY
- { 
- $$ = make_str("binary");
-}
-|  CROSS
- { 
- $$ = make_str("cross");
-}
-|  CURRENT_SCHEMA
- { 
- $$ = make_str("current_schema");
-}
-|  FREEZE
- { 
- $$ = make_str("freeze");
-}
-|  FULL
- { 
- $$ = make_str("full");
-}
-|  ILIKE
- { 
- $$ = make_str("ilike");
-}
-|  INNER_P
- { 
- $$ = make_str("inner");
-}
-|  IS
- { 
- $$ = make_str("is");
-}
-|  ISNULL
- { 
- $$ = make_str("isnull");
-}
-|  JOIN
- { 
- $$ = make_str("join");
-}
-|  LEFT
- { 
- $$ = make_str("left");
-}
-|  LIKE
- { 
- $$ = make_str("like");
-}
-|  NATURAL
- { 
- $$ = make_str("natural");
-}
-|  NOTNULL
- { 
- $$ = make_str("notnull");
-}
-|  OUTER_P
- { 
- $$ = make_str("outer");
-}
-|  OVERLAPS
- { 
- $$ = make_str("overlaps");
-}
-|  RIGHT
- { 
- $$ = make_str("right");
-}
-|  SIMILAR
- { 
- $$ = make_str("similar");
-}
-|  VERBOSE
- { 
- $$ = make_str("verbose");
-}
-;
-
-
- reserved_keyword:
- ALL
- { 
- $$ = make_str("all");
-}
-|  ANALYSE
- { 
- $$ = make_str("analyse");
-}
-|  ANALYZE
- { 
- $$ = make_str("analyze");
-}
-|  AND
- { 
- $$ = make_str("and");
-}
-|  ANY
- { 
- $$ = make_str("any");
-}
-|  ARRAY
- { 
- $$ = make_str("array");
-}
-|  AS
- { 
- $$ = make_str("as");
-}
-|  ASC
- { 
- $$ = make_str("asc");
-}
-|  ASYMMETRIC
- { 
- $$ = make_str("asymmetric");
-}
-|  BOTH
- { 
- $$ = make_str("both");
-}
-|  CASE
- { 
- $$ = make_str("case");
-}
-|  CAST
- { 
- $$ = make_str("cast");
-}
-|  CHECK
- { 
- $$ = make_str("check");
-}
-|  COLLATE
- { 
- $$ = make_str("collate");
-}
-|  COLUMN
- { 
- $$ = make_str("column");
-}
-|  CONSTRAINT
- { 
- $$ = make_str("constraint");
-}
-|  CREATE
- { 
- $$ = make_str("create");
-}
-|  CURRENT_CATALOG
- { 
- $$ = make_str("current_catalog");
-}
-|  CURRENT_DATE
- { 
- $$ = make_str("current_date");
-}
-|  CURRENT_ROLE
- { 
- $$ = make_str("current_role");
-}
-|  CURRENT_TIME
- { 
- $$ = make_str("current_time");
-}
-|  CURRENT_TIMESTAMP
- { 
- $$ = make_str("current_timestamp");
-}
-|  CURRENT_USER
- { 
- $$ = make_str("current_user");
-}
-|  DEFAULT
- { 
- $$ = make_str("default");
-}
-|  DEFERRABLE
- { 
- $$ = make_str("deferrable");
-}
-|  DESC
- { 
- $$ = make_str("desc");
-}
-|  DISTINCT
- { 
- $$ = make_str("distinct");
-}
-|  DO
- { 
- $$ = make_str("do");
-}
-|  ELSE
- { 
- $$ = make_str("else");
-}
-|  END_P
- { 
- $$ = make_str("end");
-}
-|  EXCEPT
- { 
- $$ = make_str("except");
-}
-|  FALSE_P
- { 
- $$ = make_str("false");
-}
-|  FETCH
- { 
- $$ = make_str("fetch");
-}
-|  FOR
- { 
- $$ = make_str("for");
-}
-|  FOREIGN
- { 
- $$ = make_str("foreign");
-}
-|  FROM
- { 
- $$ = make_str("from");
-}
-|  GRANT
- { 
- $$ = make_str("grant");
-}
-|  GROUP_P
- { 
- $$ = make_str("group");
-}
-|  HAVING
- { 
- $$ = make_str("having");
-}
-|  IN_P
- { 
- $$ = make_str("in");
-}
-|  INITIALLY
- { 
- $$ = make_str("initially");
-}
-|  INTERSECT
- { 
- $$ = make_str("intersect");
-}
-|  INTO
- { 
- $$ = make_str("into");
-}
-|  LEADING
- { 
- $$ = make_str("leading");
-}
-|  LIMIT
- { 
- $$ = make_str("limit");
-}
-|  LOCALTIME
- { 
- $$ = make_str("localtime");
-}
-|  LOCALTIMESTAMP
- { 
- $$ = make_str("localtimestamp");
-}
-|  NEW
- { 
- $$ = make_str("new");
-}
-|  NOT
- { 
- $$ = make_str("not");
-}
-|  NULL_P
- { 
- $$ = make_str("null");
-}
-|  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");
-}
-|  PLACING
- { 
- $$ = make_str("placing");
-}
-|  PRIMARY
- { 
- $$ = make_str("primary");
-}
-|  REFERENCES
- { 
- $$ = make_str("references");
-}
-|  RETURNING
- { 
- $$ = make_str("returning");
-}
-|  SELECT
- { 
- $$ = make_str("select");
-}
-|  SESSION_USER
- { 
- $$ = make_str("session_user");
-}
-|  SOME
- { 
- $$ = make_str("some");
-}
-|  SYMMETRIC
- { 
- $$ = make_str("symmetric");
-}
-|  TABLE
- { 
- $$ = make_str("table");
-}
-|  THEN
- { 
- $$ = make_str("then");
-}
-|  TRAILING
- { 
- $$ = make_str("trailing");
-}
-|  TRUE_P
- { 
- $$ = make_str("true");
-}
-|  UNIQUE
- { 
- $$ = make_str("unique");
-}
-|  USER
- { 
- $$ = make_str("user");
-}
-|  USING
- { 
- $$ = make_str("using");
-}
-|  VARIADIC
- { 
- $$ = make_str("variadic");
-}
-|  WHEN
- { 
- $$ = make_str("when");
-}
-|  WHERE
- { 
- $$ = make_str("where");
-}
-|  WITH
- { 
- $$ = make_str("with");
-}
-;
-
-
- SpecialRuleRelation:
- OLD
- { 
-		if (!QueryIsRule)
-			mmerror(PARSE_ERROR, ET_ERROR, "OLD used in non-rule query\n");
-
- $$ = make_str("old");
-}
-|  NEW
- { 
-		if (!QueryIsRule)
-			mmerror(PARSE_ERROR, ET_ERROR, "NEW used in non-rule query\n");
-
- $$ = make_str("new");
-}
-;
-
-
-/* trailer */
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.384 2008/11/14 16:25:34 meskes Exp $ */
-
-statements: /*EMPTY*/
-                | statements statement
-                ;
-
-statement: ecpgstart at stmt ';'        { connection = NULL; }
-                | ecpgstart stmt ';'
-                | ecpgstart ECPGVarDeclaration
-                {
-                        fprintf(yyout, "%s", $2);
-                        free($2);
-                        output_line_number();
-                }
-                | ECPGDeclaration
-                | c_thing               { fprintf(yyout, "%s", $1); free($1); }
-                | CPP_LINE              { fprintf(yyout, "%s", $1); free($1); }
-                | '{'                   { braces_open++; fputs("{", yyout); }
-                | '}'                   { remove_typedefs(braces_open); remove_variables(braces_open--); fputs("}", yyout); }
-                ;
-
-CreateAsStmt: CREATE OptTemp TABLE create_as_target AS {FoundInto = 0;} SelectStmt opt_with_data
-		{
-			if (FoundInto == 1)
-				mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE / AS SELECT cannot specify INTO\n");
-
-			$$ = cat_str(6, make_str("create"), $2, make_str("table"), $4, make_str("as"), $7);
-		}
-	;
-
-RuleStmt: CREATE opt_or_replace RULE name AS
-		{QueryIsRule = 1;}
-		ON event TO qualified_name where_clause
-		DO opt_instead RuleActionList
-		{
-			QueryIsRule=0;
-			$$ = cat_str(12, make_str("create"), $2, make_str("rule"), $4, make_str("as on"), $8, make_str("to"), $10, $11, make_str("do"), $13, $14);
-		}
-	;
-
-at: AT connection_object
-                {
-                        connection = $2;
-                        /*
-                         *      Do we have a variable as connection target?
-                         *      Remove the variable from the variable
-                         *      list or else it will be used twice
-                         */
-                        if (argsinsert != NULL)
-                                argsinsert = NULL;
-                }
-        ;
-
-/*
- * the exec sql connect statement: connect to the given database
- */
-ECPGConnect: SQL_CONNECT TO connection_target opt_connection_name opt_user
-			{ $$ = cat_str(5, $3, make_str(","), $5, make_str(","), $4); }
-		| SQL_CONNECT TO DEFAULT
-			{ $$ = make_str("NULL, NULL, NULL, \"DEFAULT\""); }
-		  /* also allow ORACLE syntax */
-		| SQL_CONNECT ora_user
-			{ $$ = cat_str(3, make_str("NULL,"), $2, make_str(", NULL")); }
-		| DATABASE connection_target
-			{ $$ = cat2_str($2, make_str(", NULL, NULL, NULL")); }
-		;
-
-connection_target: opt_database_name opt_server opt_port
-		{
-			/* old style: dbname[@server][:port] */
-			if (strlen($2) > 0 && *($2) != '@')
-				mmerror(PARSE_ERROR, ET_ERROR, "expected \"@\", found \"%s\"", $2);
-			
-			/* C strings need to be handled differently */
-			if ($1[0] == '\"')
-				$$ = $1;
-			else
-				$$ = make3_str(make_str("\""), make3_str($1, $2, $3), make_str("\""));
-		}
-		|  db_prefix ':' server opt_port '/' opt_database_name opt_options
-		{
-			/* new style: <tcp|unix>:postgresql://server[:port][/dbname] */
-			if (strncmp($1, "unix:postgresql", strlen("unix:postgresql")) != 0 && strncmp($1, "tcp:postgresql", strlen("tcp:postgresql")) != 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "only protocols \"tcp\" and \"unix\" and database type \"postgresql\" are supported");
-
-			if (strncmp($3, "//", strlen("//")) != 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "expected \"://\", found \"%s\"", $3);
-
-			if (strncmp($1, "unix", strlen("unix")) == 0 &&
-				strncmp($3 + strlen("//"), "localhost", strlen("localhost")) != 0 &&
-				strncmp($3 + strlen("//"), "127.0.0.1", strlen("127.0.0.1")) != 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "unix domain sockets only work on \"localhost\" but not on \"%s\"", $3 + strlen("//"));
-
-			$$ = make3_str(make3_str(make_str("\""), $1, make_str(":")), $3, make3_str(make3_str($4, make_str("/"), $6),	$7, make_str("\"")));
-		}
-		| char_variable
-		{
-			$$ = $1;
-		}
-		| ecpg_sconst
-		{
-			/* We can only process double quoted strings not single quotes ones,
-			 * so we change the quotes.
-			 * Note, that the rule for ecpg_sconst adds these single quotes. */
-			$1[0] = '\"';
-			$1[strlen($1)-1] = '\"';
-			$$ = $1;
-		}
-		;
-
-opt_database_name: database_name		{ $$ = $1; }
-		| /*EMPTY*/			{ $$ = EMPTY; }
-		;
-
-db_prefix: ecpg_ident cvariable
-		{
-			if (strcmp($2, "postgresql") != 0 && strcmp($2, "postgres") != 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "expected \"postgresql\", found \"%s\"", $2);
-
-			if (strcmp($1, "tcp") != 0 && strcmp($1, "unix") != 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "illegal connection type %s", $1);
-
-			$$ = make3_str($1, make_str(":"), $2);
-		}
-		;
-
-server: Op server_name
-		{
-			if (strcmp($1, "@") != 0 && strcmp($1, "//") != 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "expected \"@\" or \"://\", found \"%s\"", $1);
-
-			$$ = make2_str($1, $2);
-		}
-		;
-
-opt_server: server			{ $$ = $1; }
-		| /*EMPTY*/			{ $$ = EMPTY; }
-		;
-
-server_name: ColId					{ $$ = $1; }
-		| ColId '.' server_name		{ $$ = make3_str($1, make_str("."), $3); }
-		| IP						{ $$ = make_name(); }
-		;
-
-opt_port: ':' Iconst		{ $$ = make2_str(make_str(":"), $2); }
-		| /*EMPTY*/	{ $$ = EMPTY; }
-		;
-
-opt_connection_name: AS connection_object	{ $$ = $2; }
-		| /*EMPTY*/			{ $$ = make_str("NULL"); }
-		;
-
-opt_user: USER ora_user		{ $$ = $2; }
-		| /*EMPTY*/			{ $$ = make_str("NULL, NULL"); }
-		;
-
-ora_user: user_name
-			{ $$ = cat2_str($1, make_str(", NULL")); }
-		| user_name '/' user_name
-			{ $$ = cat_str(3, $1, make_str(","), $3); }
-		| user_name SQL_IDENTIFIED BY user_name
-			{ $$ = cat_str(3, $1, make_str(","), $4); }
-		| user_name USING user_name
-			{ $$ = cat_str(3, $1, make_str(","), $3); }
-		;
-
-user_name: RoleId
-		{
-			if ($1[0] == '\"')
-				$$ = $1;
-			else
-				$$ = make3_str(make_str("\""), $1, make_str("\""));
-		}
-		| ecpg_sconst
-		{
-			if ($1[0] == '\"')
-				$$ = $1;
-			else
-				$$ = make3_str(make_str("\""), $1, make_str("\""));
-		}
-		| civar
-		{
-			enum ECPGttype type = argsinsert->variable->type->type;
-
-			/* if array see what's inside */
-			if (type == ECPGt_array)
-				type = argsinsert->variable->type->u.element->type;
-
-			/* handle varchars */
-			if (type == ECPGt_varchar)
-				$$ = make2_str(mm_strdup(argsinsert->variable->name), make_str(".arr"));
-			else
-				$$ = mm_strdup(argsinsert->variable->name);
-		}
-		;
-
-char_variable: cvariable
-		{
-			/* check if we have a string variable */
-			struct variable *p = find_variable($1);
-			enum ECPGttype type = p->type->type;
-
-			/* If we have just one character this is not a string */
-			if (atol(p->type->size) == 1)
-					mmerror(PARSE_ERROR, ET_ERROR, "invalid datatype");
-			else
-			{
-				/* if array see what's inside */
-				if (type == ECPGt_array)
-					type = p->type->u.element->type;
-
-				switch (type)
-				{
-					case ECPGt_char:
-					case ECPGt_unsigned_char:
-						$$ = $1;
-						break;
-					case ECPGt_varchar:
-						$$ = make2_str($1, make_str(".arr"));
-						break;
-					default:
-						mmerror(PARSE_ERROR, ET_ERROR, "invalid datatype");
-						$$ = $1;
-						break;
-				}
-			}
-		}
-		;
-
-opt_options: Op connect_options
-		{
-			if (strlen($1) == 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement");
-
-			if (strcmp($1, "?") != 0)
-				mmerror(PARSE_ERROR, ET_ERROR, "unrecognized token \"%s\"", $1);
-
-			$$ = make2_str(make_str("?"), $2);
-		}
-		| /*EMPTY*/ 	{ $$ = EMPTY; }
-		;
-
-connect_options:  ColId opt_opt_value 
-			{ $$ = make2_str($1, $2); }
-	| ColId opt_opt_value Op connect_options
-			{
-				if (strlen($3) == 0)
-					mmerror(PARSE_ERROR, ET_ERROR, "incomplete statement");
-
-				if (strcmp($3, "&") != 0)
-					mmerror(PARSE_ERROR, ET_ERROR, "unrecognized token \"%s\"", $3);
-
-				$$ = cat_str(3, make2_str($1, $2), $3, $4);
-			}
-	;
-
-opt_opt_value: /*EMPTY*/
-			{ $$ = EMPTY; }
-		| '=' Iconst
-			{ $$ = make2_str(make_str("="), $2); }
-		| '=' ecpg_ident
-			{ $$ = make2_str(make_str("="), $2); }
-		| '=' civar
-			{ $$ = make2_str(make_str("="), $2); }
-		;
-
-prepared_name: name             {
-                                        if ($1[0] == '\"' && $1[strlen($1)-1] == '\"') /* already quoted? */
-                                                $$ = $1;
-                                        else /* not quoted => convert to lowercase */
-                                        {
-                                                int i;
-
-                                                for (i = 0; i< strlen($1); i++)
-                                                        $1[i] = tolower((unsigned char) $1[i]);
-
-                                                $$ = make3_str(make_str("\""), $1, make_str("\""));
-                                        }
-                                }
-                | char_variable { $$ = $1; }
-                ;
-
-/*
- * Declare a prepared cursor. The syntax is different from the standard
- * declare statement, so we create a new rule.
- */
-ECPGCursorStmt:  DECLARE name cursor_options CURSOR opt_hold FOR prepared_name
-		{
-			struct cursor *ptr, *this;
-			struct variable *thisquery = (struct variable *)mm_alloc(sizeof(struct variable));
-			const char *con = connection ? connection : "NULL";
-
-			for (ptr = cur; ptr != NULL; ptr = ptr->next)
-			{
-				if (strcmp($2, ptr->name) == 0)
-					/* re-definition is a bug */
-					mmerror(PARSE_ERROR, ET_ERROR, "cursor \"%s\" already defined", $2);
-			}
-
-			this = (struct cursor *) mm_alloc(sizeof(struct cursor));
-
-			/* initial definition */
-			this->next = cur;
-			this->name = $2;
-			this->connection = connection;
-			this->command =  cat_str(6, make_str("declare"), mm_strdup($2), $3, make_str("cursor"), $5, make_str("for $1"));
-			this->argsresult = NULL;
-
-			thisquery->type = &ecpg_query;
-			thisquery->brace_level = 0;
-			thisquery->next = NULL;
-			thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement(, , __LINE__)") + strlen(con) + strlen($7));
-			sprintf(thisquery->name, "ECPGprepared_statement(%s, %s, __LINE__)", con, $7);
-
-			this->argsinsert = NULL;
-			add_variable_to_head(&(this->argsinsert), thisquery, &no_indicator);
-
-			cur = this;
-
-			$$ = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
-		}
-		;
-
-ECPGExecuteImmediateStmt: EXECUTE IMMEDIATE execstring
-			{ 
-			  /* execute immediate means prepare the statement and
-			   * immediately execute it */
-			  $$ = $3;
-			};
-/*
- * variable decalartion outside exec sql declare block
- */
-ECPGVarDeclaration: single_vt_declaration;
-
-single_vt_declaration: type_declaration		{ $$ = $1; }
-		| var_declaration		{ $$ = $1; }
-		;
-
-precision:	NumericOnly	{ $$ = $1; };
-
-opt_scale:	',' NumericOnly	{ $$ = $2; }
-		| /* EMPTY */	{ $$ = EMPTY; }
-		;
-
-ecpg_interval:	opt_interval	{ $$ = $1; }
-		| YEAR_P TO MINUTE_P	{ $$ = make_str("year to minute"); }
-		| YEAR_P TO SECOND_P	{ $$ = make_str("year to second"); }
-		| DAY_P TO DAY_P		{ $$ = make_str("day to day"); }
-		| MONTH_P TO MONTH_P	{ $$ = make_str("month to month"); }
-		;
-
-/*
- * variable declaration inside exec sql declare block
- */
-ECPGDeclaration: sql_startdeclare
-		{ fputs("/* exec sql begin declare section */", yyout); }
-		var_type_declarations sql_enddeclare
-		{
-			fprintf(yyout, "%s/* exec sql end declare section */", $3);
-			free($3);
-			output_line_number();
-		}
-		;
-
-sql_startdeclare: ecpgstart BEGIN_P DECLARE SQL_SECTION ';' {};
-
-sql_enddeclare: ecpgstart END_P DECLARE SQL_SECTION ';' {};
-
-var_type_declarations:	/*EMPTY*/			{ $$ = EMPTY; }
-		| vt_declarations			{ $$ = $1; }
-		| CPP_LINE				{ $$ = $1; }
-		;
-
-vt_declarations:  var_declaration			{ $$ = $1; }
-		| type_declaration			{ $$ = $1; }
-		| vt_declarations var_declaration	{ $$ = cat2_str($1, $2); }
-		| vt_declarations type_declaration	{ $$ = cat2_str($1, $2); }
-		| vt_declarations CPP_LINE		{ $$ = cat2_str($1, $2); }
-		;
-
-variable_declarations:	var_declaration 	{ $$ = $1; }
-		| variable_declarations var_declaration 	{ $$ = cat2_str($1, $2); }
-		;
-
-type_declaration: S_TYPEDEF
-	{
-		/* reset this variable so we see if there was */
-		/* an initializer specified */
-		initializer = 0;
-	}
-	var_type opt_pointer ECPGColLabelCommon opt_array_bounds ';'
-	{
-		add_typedef($5, $6.index1, $6.index2, $3.type_enum, $3.type_dimension, $3.type_index, initializer, *$4 ? 1 : 0);
-
-		fprintf(yyout, "typedef %s %s %s %s;\n", $3.type_str, *$4 ? "*" : "", $5, $6.str);
-		output_line_number();
-		$$ = make_str("");
-	};
-
-var_declaration: storage_declaration
-		var_type
-		{
-			actual_type[struct_level].type_enum = $2.type_enum;
-			actual_type[struct_level].type_dimension = $2.type_dimension;
-			actual_type[struct_level].type_index = $2.type_index;
-			actual_type[struct_level].type_sizeof = $2.type_sizeof;
-
-			actual_startline[struct_level] = hashline_number();
-		}
-		variable_list ';'
-		{
-			$$ = cat_str(5, actual_startline[struct_level], $1, $2.type_str, $4, make_str(";\n"));
-		}
-		| var_type
-		{
-			actual_type[struct_level].type_enum = $1.type_enum;
-			actual_type[struct_level].type_dimension = $1.type_dimension;
-			actual_type[struct_level].type_index = $1.type_index;
-			actual_type[struct_level].type_sizeof = $1.type_sizeof;
-
-			actual_startline[struct_level] = hashline_number();
-		}
-		variable_list ';'
-		{
-			$$ = cat_str(4, actual_startline[struct_level], $1.type_str, $3, make_str(";\n"));
-		}
-		| struct_union_type_with_symbol ';'
-		{
-			$$ = cat2_str($1, make_str(";"));
-		}
-		;
-
-opt_bit_field:	':' Iconst	{ $$ =cat2_str(make_str(":"), $2); }
-		| /* EMPTY */	{ $$ = EMPTY; }
-		;
-
-storage_declaration: storage_clause storage_modifier
-			{$$ = cat2_str ($1, $2); }
-		| storage_clause		{$$ = $1; }
-		| storage_modifier		{$$ = $1; }
-		;
-
-storage_clause : S_EXTERN	{ $$ = make_str("extern"); }
-		| S_STATIC			{ $$ = make_str("static"); }
-		| S_REGISTER		{ $$ = make_str("register"); }
-		| S_AUTO			{ $$ = make_str("auto"); }
-		;
-
-storage_modifier : S_CONST	{ $$ = make_str("const"); }
-		| S_VOLATILE		{ $$ = make_str("volatile"); }
-		;
-
-var_type:	simple_type
-		{
-			$$.type_enum = $1;
-			$$.type_str = mm_strdup(ecpg_type_name($1));
-			$$.type_dimension = make_str("-1");
-			$$.type_index = make_str("-1");
-			$$.type_sizeof = NULL;
-		}
-		| struct_union_type
-		{
-			$$.type_str = $1;
-			$$.type_dimension = make_str("-1");
-			$$.type_index = make_str("-1");
-
-			if (strncmp($1, "struct", sizeof("struct")-1) == 0)
-			{
-				$$.type_enum = ECPGt_struct;
-				$$.type_sizeof = ECPGstruct_sizeof;
-			}
-			else
-			{
-				$$.type_enum = ECPGt_union;
-				$$.type_sizeof = NULL;
-			}
-		}
-		| enum_type
-		{
-			$$.type_str = $1;
-			$$.type_enum = ECPGt_int;
-			$$.type_dimension = make_str("-1");
-			$$.type_index = make_str("-1");
-			$$.type_sizeof = NULL;
-		}
-		| ECPGColLabelCommon '(' precision opt_scale ')'
-		{
-			if (strcmp($1, "numeric") == 0)
-			{
-				$$.type_enum = ECPGt_numeric;
-				$$.type_str = make_str("numeric");
-			}
-			else if (strcmp($1, "decimal") == 0)
-			{
-				$$.type_enum = ECPGt_decimal;
-				$$.type_str = make_str("decimal");
-			}
-			else
-			{
-				mmerror(PARSE_ERROR, ET_ERROR, "only numeric/decimal have precision/scale argument");
-				$$.type_enum = ECPGt_numeric;
-				$$.type_str = make_str("numeric");
-			}
-
-			$$.type_dimension = make_str("-1");
-			$$.type_index = make_str("-1");
-			$$.type_sizeof = NULL;
-		}
-		| ECPGColLabelCommon ecpg_interval
-		{
-			if (strlen($2) != 0 && strcmp ($1, "datetime") != 0 && strcmp ($1, "interval") != 0)
-				mmerror (PARSE_ERROR, ET_ERROR, "interval specification not allowed here");
-
-			/*
-			 * Check for type names that the SQL grammar treats as
-			 * unreserved keywords
-			 */
-			if (strcmp($1, "varchar") == 0)
-			{
-				$$.type_enum = ECPGt_varchar;
-				$$.type_str = EMPTY; /*make_str("varchar");*/
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else if (strcmp($1, "float") == 0)
-			{
-				$$.type_enum = ECPGt_float;
-				$$.type_str = make_str("float");
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else if (strcmp($1, "double") == 0)
-			{
-				$$.type_enum = ECPGt_double;
-				$$.type_str = make_str("double");
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else if (strcmp($1, "numeric") == 0)
-			{
-				$$.type_enum = ECPGt_numeric;
-				$$.type_str = make_str("numeric");
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else if (strcmp($1, "decimal") == 0)
-			{
-				$$.type_enum = ECPGt_decimal;
-				$$.type_str = make_str("decimal");
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else if (strcmp($1, "date") == 0)
-			{
-				$$.type_enum = ECPGt_date;
-				$$.type_str = make_str("date");
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else if (strcmp($1, "timestamp") == 0)
-			{
-				$$.type_enum = ECPGt_timestamp;
-				$$.type_str = make_str("timestamp");
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else if (strcmp($1, "interval") == 0)
-			{
-				$$.type_enum = ECPGt_interval;
-				$$.type_str = make_str("interval");
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else if (strcmp($1, "datetime") == 0)
-			{
-				$$.type_enum = ECPGt_timestamp;
-				$$.type_str = make_str("timestamp");
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = NULL;
-			}
-			else
-			{
-				/* this is for typedef'ed types */
-				struct typedefs *this = get_typedef($1);
-
-				$$.type_str = (this->type->type_enum == ECPGt_varchar) ? EMPTY : mm_strdup(this->name);
-				$$.type_enum = this->type->type_enum;
-				$$.type_dimension = this->type->type_dimension;
-				$$.type_index = this->type->type_index;
-				if (this->type->type_sizeof && strlen(this->type->type_sizeof) != 0)
-					$$.type_sizeof = this->type->type_sizeof;
-				else 
-					$$.type_sizeof = cat_str(3, make_str("sizeof("), mm_strdup(this->name), make_str(")"));
-
-				struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
-			}
-		}
-		| s_struct_union_symbol
-		{
-			/* this is for named structs/unions */
-			char *name;
-			struct typedefs *this;
-			bool forward = (forward_name != NULL && strcmp($1.symbol, forward_name) == 0 && strcmp($1.su, "struct") == 0);
-
-			name = cat2_str($1.su, $1.symbol);
-			/* Do we have a forward definition? */
-			if (!forward)
-			{
-				/* No */
-
-				this = get_typedef(name);
-				$$.type_str = mm_strdup(this->name);
-				$$.type_enum = this->type->type_enum;
-				$$.type_dimension = this->type->type_dimension;
-				$$.type_index = this->type->type_index;
-				$$.type_sizeof = this->type->type_sizeof;
-				struct_member_list[struct_level] = ECPGstruct_member_dup(this->struct_member_list);
-				free(name);
-			}
-			else
-			{
-				$$.type_str = name;
-				$$.type_enum = ECPGt_long;
-				$$.type_dimension = make_str("-1");
-				$$.type_index = make_str("-1");
-				$$.type_sizeof = make_str("");
-				struct_member_list[struct_level] = NULL;
-			}
-		}
-		;
-
-enum_type: ENUM_P symbol enum_definition
-			{ $$ = cat_str(3, make_str("enum"), $2, $3); }
-		| ENUM_P enum_definition
-			{ $$ = cat2_str(make_str("enum"), $2); }
-		| ENUM_P symbol
-			{ $$ = cat2_str(make_str("enum"), $2); }
-		;
-
-enum_definition: '{' c_list '}'
-			{ $$ = cat_str(3, make_str("{"), $2, make_str("}")); };
-
-struct_union_type_with_symbol: s_struct_union_symbol
-		{
-			struct_member_list[struct_level++] = NULL;
-			if (struct_level >= STRUCT_DEPTH)
-				 mmerror(PARSE_ERROR, ET_ERROR, "too many levels in nested structure/union definition");
-			forward_name = mm_strdup($1.symbol);
-		}
-		'{' variable_declarations '}'
-		{
-			struct typedefs *ptr, *this;
-			struct this_type su_type;
-
-			ECPGfree_struct_member(struct_member_list[struct_level]);
-			struct_member_list[struct_level] = NULL;
-			struct_level--;
-			if (strncmp($1.su, "struct", sizeof("struct")-1) == 0)
-				su_type.type_enum = ECPGt_struct;
-			else
-				su_type.type_enum = ECPGt_union;
-			su_type.type_str = cat2_str($1.su, $1.symbol);
-			free(forward_name);
-			forward_name = NULL;
-
-			/* This is essantially a typedef but needs the keyword struct/union as well.
-			 * So we create the typedef for each struct definition with symbol */
-			for (ptr = types; ptr != NULL; ptr = ptr->next)
-			{
-					if (strcmp(su_type.type_str, ptr->name) == 0)
-							/* re-definition is a bug */
-							mmerror(PARSE_ERROR, ET_ERROR, "type \"%s\" already defined", su_type.type_str);
-			}
-
-			this = (struct typedefs *) mm_alloc(sizeof(struct typedefs));
-
-			/* initial definition */
-			this->next = types;
-			this->name = mm_strdup(su_type.type_str);
-			this->brace_level = braces_open;
-			this->type = (struct this_type *) mm_alloc(sizeof(struct this_type));
-			this->type->type_enum = su_type.type_enum;
-			this->type->type_str = mm_strdup(su_type.type_str);
-			this->type->type_dimension = make_str("-1"); /* dimension of array */
-			this->type->type_index = make_str("-1");	/* length of string */
-			this->type->type_sizeof = ECPGstruct_sizeof;
-			this->struct_member_list = struct_member_list[struct_level];
-
-			types = this;
-			$$ = cat_str(4, su_type.type_str, make_str("{"), $4, make_str("}"));
-		}
-		;
-
-struct_union_type: struct_union_type_with_symbol	{ $$ = $1; }
-		| s_struct_union
-		{
-			struct_member_list[struct_level++] = NULL;
-			if (struct_level >= STRUCT_DEPTH)
-				 mmerror(PARSE_ERROR, ET_ERROR, "too many levels in nested structure/union definition");
-		}
-		'{' variable_declarations '}'
-		{
-			ECPGfree_struct_member(struct_member_list[struct_level]);
-			struct_member_list[struct_level] = NULL;
-			struct_level--;
-			$$ = cat_str(4, $1, make_str("{"), $4, make_str("}"));
-		}
-		;
-
-s_struct_union_symbol: SQL_STRUCT symbol
-		{
-			$$.su = make_str("struct");
-			$$.symbol = $2;
-			ECPGstruct_sizeof = cat_str(3, make_str("sizeof("), cat2_str(mm_strdup($$.su), mm_strdup($$.symbol)), make_str(")"));
-		}
-		| UNION symbol
-		{
-			$$.su = make_str("union");
-			$$.symbol = $2;
-		}
-		;
-
-s_struct_union: SQL_STRUCT
-		{
-			ECPGstruct_sizeof = make_str(""); /* This must not be NULL to distinguish from simple types. */
-			$$ = make_str("struct");
-		}
-		| UNION 	{ $$ = make_str("union"); }
-		;
-
-simple_type: unsigned_type					{ $$=$1; }
-		|	opt_signed signed_type			{ $$=$2; }
-		;
-
-unsigned_type: SQL_UNSIGNED SQL_SHORT		{ $$ = ECPGt_unsigned_short; }
-		| SQL_UNSIGNED SQL_SHORT INT_P	{ $$ = ECPGt_unsigned_short; }
-		| SQL_UNSIGNED						{ $$ = ECPGt_unsigned_int; }
-		| SQL_UNSIGNED INT_P				{ $$ = ECPGt_unsigned_int; }
-		| SQL_UNSIGNED SQL_LONG				{ $$ = ECPGt_unsigned_long; }
-		| SQL_UNSIGNED SQL_LONG INT_P		{ $$ = ECPGt_unsigned_long; }
-		| SQL_UNSIGNED SQL_LONG SQL_LONG
-		{
-#ifdef HAVE_LONG_LONG_INT_64
-			$$ = ECPGt_unsigned_long_long;
-#else
-			$$ = ECPGt_unsigned_long;
-#endif
-		}
-		| SQL_UNSIGNED SQL_LONG SQL_LONG INT_P
-		{
-#ifdef HAVE_LONG_LONG_INT_64
-			$$ = ECPGt_unsigned_long_long;
-#else
-			$$ = ECPGt_unsigned_long;
-#endif
-		}
-		| SQL_UNSIGNED CHAR_P			{ $$ = ECPGt_unsigned_char; }
-		;
-
-signed_type: SQL_SHORT				{ $$ = ECPGt_short; }
-		| SQL_SHORT INT_P			{ $$ = ECPGt_short; }
-		| INT_P						{ $$ = ECPGt_int; }
-		| SQL_LONG					{ $$ = ECPGt_long; }
-		| SQL_LONG INT_P			{ $$ = ECPGt_long; }
-		| SQL_LONG SQL_LONG
-		{
-#ifdef HAVE_LONG_LONG_INT_64
-			$$ = ECPGt_long_long;
-#else
-			$$ = ECPGt_long;
-#endif
-		}
-		| SQL_LONG SQL_LONG INT_P
-		{
-#ifdef HAVE_LONG_LONG_INT_64
-			$$ = ECPGt_long_long;
-#else
-			$$ = ECPGt_long;
-#endif
-		}
-		| SQL_BOOL					{ $$ = ECPGt_bool; }
-		| CHAR_P					{ $$ = ECPGt_char; }
-		| DOUBLE_P					{ $$ = ECPGt_double; }
-		;
-
-opt_signed: SQL_SIGNED
-		|	/* EMPTY */
-		;
-
-variable_list: variable
-			{ $$ = $1; }
-		| variable_list ',' variable
-			{ $$ = cat_str(3, $1, make_str(","), $3); }
-		;
-
-variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initializer
-		{
-			struct ECPGtype * type;
-			char *dimension = $3.index1; /* dimension of array */
-			char *length = $3.index2;    /* length of string */
-			char dim[14L];
-			char *vcn;
-
-			adjust_array(actual_type[struct_level].type_enum, &dimension, &length, actual_type[struct_level].type_dimension, actual_type[struct_level].type_index, strlen($1), false);
-
-			switch (actual_type[struct_level].type_enum)
-			{
-				case ECPGt_struct:
-				case ECPGt_union:
-					if (atoi(dimension) < 0)
-						type = ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, actual_type[struct_level].type_sizeof);
-					else
-						type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], actual_type[struct_level].type_enum, actual_type[struct_level].type_sizeof), dimension);
-
-					$$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5);
-					break;
-
-				case ECPGt_varchar:
-					if (atoi(dimension) < 0)
-						type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, yylineno);
-					else
-						type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, yylineno), dimension);
-					
-					if (strcmp(dimension, "0") == 0 || abs(atoi(dimension)) == 1)
-							*dim = '\0';
-					else
-							sprintf(dim, "[%s]", dimension);
-					/* cannot check for atoi <= 0 because a defined constant will yield 0 here as well */
-					if (atoi(length) < 0 || strcmp(length, "0") == 0)
-						mmerror(PARSE_ERROR, ET_ERROR, "pointer to varchar are not implemented");
-
-					/* make sure varchar struct name is unique by adding linenumer of its definition */
-					vcn = (char *) mm_alloc(strlen($2) + sizeof(int) * CHAR_BIT * 10 / 3);
-					sprintf(vcn, "%s_%d", $2, yylineno);
-					if (strcmp(dimension, "0") == 0)
-						$$ = cat_str(7, make2_str(make_str(" struct varchar_"), vcn), make_str(" { int len; char arr["), mm_strdup(length), make_str("]; } *"), mm_strdup($2), $4, $5);
-					else
-						$$ = cat_str(8, make2_str(make_str(" struct varchar_"), vcn), make_str(" { int len; char arr["), mm_strdup(length), make_str("]; } "), mm_strdup($2), mm_strdup(dim), $4, $5);
-					break;
-
-				case ECPGt_char:
-				case ECPGt_unsigned_char:
-					if (atoi(dimension) == -1)
-					{
-						int i = strlen($5);
-
-						if (atoi(length) == -1 && i > 0) /* char <var>[] = "string" */
-						{
-							/* if we have an initializer but no string size set, let's use the initializer's length */
-							free(length);
-							length = mm_alloc(i+sizeof("sizeof()"));
-							sprintf(length, "sizeof(%s)", $5+2);
-						}
-						type = ECPGmake_simple_type(actual_type[struct_level].type_enum, length, 0);
-					}
-					else
-						type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, length, 0), dimension);
-
-					$$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5);
-					break;
-
-				default:
-					if (atoi(dimension) < 0)
-						type = ECPGmake_simple_type(actual_type[struct_level].type_enum, make_str("1"), 0);
-					else
-						type = ECPGmake_array_type(ECPGmake_simple_type(actual_type[struct_level].type_enum, make_str("1"), 0), dimension);
-
-					$$ = cat_str(5, $1, mm_strdup($2), $3.str, $4, $5);
-					break;
-			}
-
-			if (struct_level == 0)
-				new_variable($2, type, braces_open);
-			else
-				ECPGmake_struct_member($2, type, &(struct_member_list[struct_level - 1]));
-
-			free($2);
-		}
-		;
-
-opt_initializer: /*EMPTY*/
-			{ $$ = EMPTY; }
-		| '=' c_term
-		{
-			initializer = 1;
-			$$ = cat2_str(make_str("="), $2);
-		}
-		;
-
-opt_pointer: /*EMPTY*/				{ $$ = EMPTY; }
-		| '*'						{ $$ = make_str("*"); }
-		| '*' '*'					{ $$ = make_str("**"); }
-		;
-
-/*
- * We try to simulate the correct DECLARE syntax here so we get dynamic SQL
- */
-ECPGDeclare: DECLARE STATEMENT ecpg_ident
-		{
-			/* this is only supported for compatibility */
-			$$ = cat_str(3, make_str("/* declare statement"), $3, make_str("*/"));
-		}
-		;
-/*
- * the exec sql disconnect statement: disconnect from the given database
- */
-ECPGDisconnect: SQL_DISCONNECT dis_name { $$ = $2; }
-		;
-
-dis_name: connection_object			{ $$ = $1; }
-		| CURRENT_P			{ $$ = make_str("\"CURRENT\""); }
-		| ALL				{ $$ = make_str("\"ALL\""); }
-		| /* EMPTY */			{ $$ = make_str("\"CURRENT\""); }
-		;
-
-connection_object: database_name		{ $$ = make3_str(make_str("\""), $1, make_str("\"")); }
-		| DEFAULT			{ $$ = make_str("\"DEFAULT\""); }
-		| char_variable			{ $$ = $1; }
-		;
-
-execstring: char_variable
-			{ $$ = $1; }
-		|	CSTRING
-			{ $$ = make3_str(make_str("\""), $1, make_str("\"")); }
-		;
-
-/*
- * the exec sql free command to deallocate a previously
- * prepared statement
- */
-ECPGFree:	SQL_FREE name	{ $$ = $2; }
-		| SQL_FREE ALL	{ $$ = make_str("all"); }
-		;
-
-/*
- * open is an open cursor, at the moment this has to be removed
- */
-ECPGOpen: SQL_OPEN name opt_ecpg_using { $$ = $2; };
-
-opt_ecpg_using: /*EMPTY*/	{ $$ = EMPTY; }
-		| ecpg_using		{ $$ = $1; }
-		;
-
-ecpg_using:	USING using_list 	{ $$ = EMPTY; }
-		| using_descriptor      { $$ = $1; }
-		;
-
-using_descriptor: USING opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
-		{
-			add_variable_to_head(&argsinsert, descriptor_variable($4,0), &no_indicator);
-			$$ = EMPTY;
-		}
-		;
-
-into_descriptor: INTO opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
-		{
-			add_variable_to_head(&argsresult, descriptor_variable($4,1), &no_indicator);
-			$$ = EMPTY;
-		}
-		;
-
-opt_sql: /*EMPTY*/ | SQL_SQL;
-
-using_list: UsingValue | UsingValue ',' using_list;
-
-UsingValue: UsingConst
-		{
-			char *length = mm_alloc(32);
-
-			sprintf(length, "%d", (int) strlen($1));
-			add_variable_to_head(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0), &no_indicator);
-		}
-		| civar { $$ = EMPTY; }
-		| civarind { $$ = EMPTY; }
-		; 
-
-UsingConst: Iconst			{ $$ = $1; }
-		| ecpg_fconst		{ $$ = $1; }
-		| ecpg_sconst		{ $$ = $1; }
-		| ecpg_bconst		{ $$ = $1; }
-		| ecpg_xconst		{ $$ = $1; }
-		;
-
-/*
- * We accept descibe but do nothing with it so far.
- */
-ECPGDescribe: SQL_DESCRIBE INPUT_P name using_descriptor
-	{
-		const char *con = connection ? connection : "NULL";
-		mmerror(PARSE_ERROR, ET_WARNING, "using unsupported describe statement\n");
-		$$ = (char *) mm_alloc(sizeof("1, ECPGprepared_statement(, \"\", __LINE__)") + strlen(con) + strlen($3));
-		sprintf($$, "1, ECPGprepared_statement(%s, \"%s\", __LINE__)", con, $3);
-	}
-	| SQL_DESCRIBE opt_output name using_descriptor
-	{
-		const char *con = connection ? connection : "NULL";
-		mmerror(PARSE_ERROR, ET_WARNING, "using unsupported describe statement\n");
-		$$ = (char *) mm_alloc(sizeof("0, ECPGprepared_statement(, \"\", __LINE__)") + strlen(con) + strlen($3));
-		sprintf($$, "0, ECPGprepared_statement(%s, \"%s\", __LINE__)", con, $3);
-	}
-	| SQL_DESCRIBE opt_output name into_descriptor
-	{
-		const char *con = connection ? connection : "NULL";
-		mmerror(PARSE_ERROR, ET_WARNING, "using unsupported describe statement\n");
-		$$ = (char *) mm_alloc(sizeof("0, ECPGprepared_statement(, \"\", __LINE__)") + strlen(con) + strlen($3));
-		sprintf($$, "0, ECPGprepared_statement(%s, \"%s\", __LINE__)", con, $3);
-	}
-	;
-
-opt_output:	SQL_OUTPUT	{ $$ = make_str("output"); }
-	| 	/* EMPTY */	{ $$ = EMPTY; }
-	;
-
-/*
- * dynamic SQL: descriptor based access
- *	originall written by Christof Petig <christof.petig@wtal.de>
- *			and Peter Eisentraut <peter.eisentraut@credativ.de>
- */
-
-/*
- * allocate a descriptor
- */
-ECPGAllocateDescr:     SQL_ALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar
-		{
-			add_descriptor($3,connection);
-			$$ = $3;
-		}
-		;
-
-
-/*
- * deallocate a descriptor
- */
-ECPGDeallocateDescr:	DEALLOCATE SQL_DESCRIPTOR quoted_ident_stringvar
-		{
-			drop_descriptor($3,connection);
-			$$ = $3;
-		}
-		;
-
-/*
- * manipulate a descriptor header
- */
-
-ECPGGetDescriptorHeader: SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar ECPGGetDescHeaderItems
-			{  $$ = $3; }
-		;
-
-ECPGGetDescHeaderItems: ECPGGetDescHeaderItem
-		| ECPGGetDescHeaderItems ',' ECPGGetDescHeaderItem
-		;
-
-ECPGGetDescHeaderItem: cvariable '=' desc_header_item
-			{ push_assignment($1, $3); }
-		;
-
-
-ECPGSetDescriptorHeader: SET SQL_DESCRIPTOR quoted_ident_stringvar ECPGSetDescHeaderItems
-			{ $$ = $3; }
-		;
-
-ECPGSetDescHeaderItems: ECPGSetDescHeaderItem
-		| ECPGSetDescHeaderItems ',' ECPGSetDescHeaderItem
-		;
-
-ECPGSetDescHeaderItem: desc_header_item '=' IntConstVar
-		{
-			push_assignment($3, $1);
-		}
-		;
-
-IntConstVar:    Iconst
-                {
-                        char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3);
-
-                        sprintf(length, "%d", (int) strlen($1));
-                        new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0);
-                        $$ = $1;
-                }
-                | cvariable     { $$ = $1; }
-                ;
-
-desc_header_item:	SQL_COUNT			{ $$ = ECPGd_count; }
-		;
-
-/*
- * manipulate a descriptor
- */
-
-ECPGGetDescriptor:	SQL_GET SQL_DESCRIPTOR quoted_ident_stringvar VALUE_P IntConstVar ECPGGetDescItems
-			{  $$.str = $5; $$.name = $3; }
-		;
-
-ECPGGetDescItems: ECPGGetDescItem
-		| ECPGGetDescItems ',' ECPGGetDescItem
-		;
-
-ECPGGetDescItem: cvariable '=' descriptor_item	{ push_assignment($1, $3); };
-
-
-ECPGSetDescriptor:	SET SQL_DESCRIPTOR quoted_ident_stringvar VALUE_P IntConstVar ECPGSetDescItems
-			{  $$.str = $5; $$.name = $3; }
-		;
-
-ECPGSetDescItems: ECPGSetDescItem
-		| ECPGSetDescItems ',' ECPGSetDescItem
-		;
-
-ECPGSetDescItem: descriptor_item '=' AllConstVar
-		{
-			push_assignment($3, $1);
-		}
-		;
-
-AllConstVar:    ecpg_fconst
-                {
-                        char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3);
-
-                        sprintf(length, "%d", (int) strlen($1));
-                        new_variable($1, ECPGmake_simple_type(ECPGt_const, length, 0), 0);
-                        $$ = $1;
-                }
-                | IntConstVar           { $$ = $1; }
-                | '-' ecpg_fconst
-                {
-                        char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3);
-                        char *var = cat2_str(make_str("-"), $2);
-
-                        sprintf(length, "%d", (int) strlen(var));
-                        new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0);
-                        $$ = var;
-                }
-                | '-' Iconst
-                {
-                        char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3);
-                        char *var = cat2_str(make_str("-"), $2);
-
-                        sprintf(length, "%d", (int) strlen(var));
-                        new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0);
-                        $$ = var;
-                }
-                | ecpg_sconst
-                {
-                        char *length = mm_alloc(sizeof(int) * CHAR_BIT * 10 / 3);
-                        char *var = $1 + 1;
-
-                        var[strlen(var) - 1] = '\0';
-                        sprintf(length, "%d", (int) strlen(var));
-                        new_variable(var, ECPGmake_simple_type(ECPGt_const, length, 0), 0);
-                        $$ = var;
-                }
-		;
-
-descriptor_item:	SQL_CARDINALITY			{ $$ = ECPGd_cardinality; }
-		| DATA_P				{ $$ = ECPGd_data; }
-		| SQL_DATETIME_INTERVAL_CODE		{ $$ = ECPGd_di_code; }
-		| SQL_DATETIME_INTERVAL_PRECISION 	{ $$ = ECPGd_di_precision; }
-		| SQL_INDICATOR				{ $$ = ECPGd_indicator; }
-		| SQL_KEY_MEMBER			{ $$ = ECPGd_key_member; }
-		| SQL_LENGTH				{ $$ = ECPGd_length; }
-		| NAME_P				{ $$ = ECPGd_name; }
-		| SQL_NULLABLE				{ $$ = ECPGd_nullable; }
-		| SQL_OCTET_LENGTH			{ $$ = ECPGd_octet; }
-		| PRECISION				{ $$ = ECPGd_precision; }
-		| SQL_RETURNED_LENGTH			{ $$ = ECPGd_length; }
-		| SQL_RETURNED_OCTET_LENGTH		{ $$ = ECPGd_ret_octet; }
-		| SQL_SCALE				{ $$ = ECPGd_scale; }
-		| TYPE_P				{ $$ = ECPGd_type; }
-		;
-
-/*
- * set/reset the automatic transaction mode, this needs a differnet handling
- * as the other set commands
- */
-ECPGSetAutocommit:	SET SQL_AUTOCOMMIT '=' on_off	{ $$ = $4; }
-		|  SET SQL_AUTOCOMMIT TO on_off   { $$ = $4; }
-		;
-
-on_off: ON				{ $$ = make_str("on"); }
-		| OFF			{ $$ = make_str("off"); }
-		;
-
-/*
- * set the actual connection, this needs a differnet handling as the other
- * set commands
- */
-ECPGSetConnection:	SET CONNECTION TO connection_object { $$ = $4; }
-		| SET CONNECTION '=' connection_object { $$ = $4; }
-		| SET CONNECTION  connection_object { $$ = $3; }
-		;
-
-/*
- * define a new type for embedded SQL
- */
-ECPGTypedef: TYPE_P
-		{
-			/* reset this variable so we see if there was */
-			/* an initializer specified */
-			initializer = 0;
-		}
-		ECPGColLabelCommon IS var_type opt_array_bounds opt_reference
-		{
-			add_typedef($3, $6.index1, $6.index2, $5.type_enum, $5.type_dimension, $5.type_index, initializer, *$7 ? 1 : 0);
-
-			if (auto_create_c == false)
-				$$ = cat_str(7, make_str("/* exec sql type"), mm_strdup($3), make_str("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, make_str("*/"));
-			else
-				$$ = cat_str(6, make_str("typedef "), mm_strdup($5.type_str), *$7?make_str("*"):make_str(""), mm_strdup($6.str), mm_strdup($3), make_str(";"));
-		}
-		;
-
-opt_reference: SQL_REFERENCE 		{ $$ = make_str("reference"); }
-		| /*EMPTY*/		 			{ $$ = EMPTY; }
-		;
-
-/*
- * define the type of one variable for embedded SQL
- */
-ECPGVar: SQL_VAR
-		{
-			/* reset this variable so we see if there was */
-			/* an initializer specified */
-			initializer = 0;
-		}
-		ColLabel IS var_type opt_array_bounds opt_reference
-		{
-			struct variable *p = find_variable($3);
-			char *dimension = $6.index1;
-			char *length = $6.index2;
-			struct ECPGtype * type;
-
-			if (($5.type_enum == ECPGt_struct ||
-				 $5.type_enum == ECPGt_union) &&
-				initializer == 1)
-				mmerror(PARSE_ERROR, ET_ERROR, "initializer not allowed in EXEC SQL VAR command");
-			else
-			{
-				adjust_array($5.type_enum, &dimension, &length, $5.type_dimension, $5.type_index, *$7?1:0, false);
-
-				switch ($5.type_enum)
-				{
-					case ECPGt_struct:
-					case ECPGt_union:
-						if (atoi(dimension) < 0)
-							type = ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum, $5.type_sizeof);
-						else
-							type = ECPGmake_array_type(ECPGmake_struct_type(struct_member_list[struct_level], $5.type_enum,$5.type_sizeof), dimension);
-						break;
-
-					case ECPGt_varchar:
-						if (atoi(dimension) == -1)
-							type = ECPGmake_simple_type($5.type_enum, length, 0);
-						else
-							type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length, 0), dimension);
-						break;
-
-					case ECPGt_char:
-					case ECPGt_unsigned_char:
-						if (atoi(dimension) == -1)
-							type = ECPGmake_simple_type($5.type_enum, length, 0);
-						else
-							type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, length, 0), dimension);
-						break;
-
-					default:
-						if (atoi(length) >= 0)
-							mmerror(PARSE_ERROR, ET_ERROR, "no multidimensional array support for simple data types");
-
-						if (atoi(dimension) < 0)
-							type = ECPGmake_simple_type($5.type_enum, make_str("1"), 0);
-						else
-							type = ECPGmake_array_type(ECPGmake_simple_type($5.type_enum, make_str("1"), 0), dimension);
-						break;
-				}
-
-				ECPGfree_type(p->type);
-				p->type = type;
-			}
-
-			$$ = cat_str(7, make_str("/* exec sql var"), mm_strdup($3), make_str("is"), mm_strdup($5.type_str), mm_strdup($6.str), $7, make_str("*/"));
-		}
-		;
-
-/*
- * whenever statement: decide what to do in case of error/no data found
- * according to SQL standards we lack: SQLSTATE, CONSTRAINT and SQLEXCEPTION
- */
-ECPGWhenever: SQL_WHENEVER SQL_SQLERROR action
-		{
-			when_error.code = $<action>3.code;
-			when_error.command = $<action>3.command;
-			$$ = cat_str(3, make_str("/* exec sql whenever sqlerror "), $3.str, make_str("; */"));
-		}
-		| SQL_WHENEVER NOT SQL_FOUND action
-		{
-			when_nf.code = $<action>4.code;
-			when_nf.command = $<action>4.command;
-			$$ = cat_str(3, make_str("/* exec sql whenever not found "), $4.str, make_str("; */"));
-		}
-		| SQL_WHENEVER SQL_SQLWARNING action
-		{
-			when_warn.code = $<action>3.code;
-			when_warn.command = $<action>3.command;
-			$$ = cat_str(3, make_str("/* exec sql whenever sql_warning "), $3.str, make_str("; */"));
-		}
-		;
-
-action : CONTINUE_P
-		{
-			$<action>$.code = W_NOTHING;
-			$<action>$.command = NULL;
-			$<action>$.str = make_str("continue");
-		}
-		| SQL_SQLPRINT
-		{
-			$<action>$.code = W_SQLPRINT;
-			$<action>$.command = NULL;
-			$<action>$.str = make_str("sqlprint");
-		}
-		| SQL_STOP
-		{
-			$<action>$.code = W_STOP;
-			$<action>$.command = NULL;
-			$<action>$.str = make_str("stop");
-		}
-		| SQL_GOTO name
-		{
-			$<action>$.code = W_GOTO;
-			$<action>$.command = strdup($2);
-			$<action>$.str = cat2_str(make_str("goto "), $2);
-		}
-		| SQL_GO TO name
-		{
-			$<action>$.code = W_GOTO;
-			$<action>$.command = strdup($3);
-			$<action>$.str = cat2_str(make_str("goto "), $3);
-		}
-		| DO name '(' c_args ')'
-		{
-			$<action>$.code = W_DO;
-			$<action>$.command = cat_str(4, $2, make_str("("), $4, make_str(")"));
-			$<action>$.str = cat2_str(make_str("do"), mm_strdup($<action>$.command));
-		}
-		| DO SQL_BREAK
-		{
-			$<action>$.code = W_BREAK;
-			$<action>$.command = NULL;
-			$<action>$.str = make_str("break");
-		}
-		| SQL_CALL name '(' c_args ')'
-		{
-			$<action>$.code = W_DO;
-			$<action>$.command = cat_str(4, $2, make_str("("), $4, make_str(")"));
-			$<action>$.str = cat2_str(make_str("call"), mm_strdup($<action>$.command));
-		}
-		| SQL_CALL name
-		{
-			$<action>$.code = W_DO;
-			$<action>$.command = cat2_str($2, make_str("()"));
-			$<action>$.str = cat2_str(make_str("call"), mm_strdup($<action>$.command));
-		}
-		;
-
-/* some other stuff for ecpg */
-
-/* additional unreserved keywords */
-ECPGKeywords: ECPGKeywords_vanames	{ $$ = $1; }
-		| ECPGKeywords_rest 	{ $$ = $1; }
-		;
-
-ECPGKeywords_vanames:  SQL_BREAK		{ $$ = make_str("break"); }
-		| SQL_CALL						{ $$ = make_str("call"); }
-		| SQL_CARDINALITY				{ $$ = make_str("cardinality"); }
-		| SQL_COUNT						{ $$ = make_str("count"); }
-		| SQL_DATETIME_INTERVAL_CODE	{ $$ = make_str("datetime_interval_code"); }
-		| SQL_DATETIME_INTERVAL_PRECISION	{ $$ = make_str("datetime_interval_precision"); }
-		| 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_KEY_MEMBER			{ $$ = make_str("key_member"); }
-		| SQL_LENGTH				{ $$ = make_str("length"); }
-		| SQL_NULLABLE				{ $$ = make_str("nullable"); }
-		| SQL_OCTET_LENGTH			{ $$ = make_str("octet_length"); }
-		| 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_SQL				{ $$ = make_str("sql"); }
-		| SQL_SQLERROR				{ $$ = make_str("sqlerror"); }
-		| SQL_SQLPRINT				{ $$ = make_str("sqlprint"); }
-		| SQL_SQLWARNING			{ $$ = make_str("sqlwarning"); }
-		| SQL_STOP					{ $$ = make_str("stop"); }
-		;
-
-ECPGKeywords_rest:  SQL_CONNECT		{ $$ = make_str("connect"); }
-		| SQL_DESCRIBE				{ $$ = make_str("describe"); }
-		| SQL_DISCONNECT			{ $$ = make_str("disconnect"); }
-		| SQL_OPEN					{ $$ = make_str("open"); }
-		| SQL_VAR					{ $$ = make_str("var"); }
-		| SQL_WHENEVER				{ $$ = make_str("whenever"); }
-		;
-
-/* additional keywords that can be SQL type names (but not ECPGColLabels) */
-ECPGTypeName:  SQL_BOOL				{ $$ = make_str("bool"); }
-		| SQL_LONG					{ $$ = make_str("long"); }
-		| SQL_OUTPUT				{ $$ = make_str("output"); }
-		| SQL_SHORT					{ $$ = make_str("short"); }
-		| SQL_STRUCT				{ $$ = make_str("struct"); }
-		| SQL_SIGNED				{ $$ = make_str("signed"); }
-		| SQL_UNSIGNED				{ $$ = make_str("unsigned"); }
-		;
-
-symbol: ColLabel					{ $$ = $1; }
-		;
-
-ECPGColId: ecpg_ident				{ $$ = $1; }
-		| ECPGunreserved_interval	{ $$ = $1; }
-		| ECPGunreserved_con		{ $$ = $1; }
-		| col_name_keyword		{ $$ = $1; }
-		| ECPGKeywords			{ $$ = $1; }
-		| ECPGCKeywords			{ $$ = $1; }
-		| CHAR_P			{ $$ = make_str("char"); }
-		| VALUES			{ $$ = make_str("values"); }
-		;
-/* Column label --- allowed labels in "AS" clauses.
- * This presently includes *all* Postgres keywords.
- */
-ColLabel:  ECPGColLabel				{ $$ = $1; }
-		| ECPGTypeName			{ $$ = $1; }
-		| CHAR_P			{ $$ = make_str("char"); }
-		| INPUT_P			{ $$ = make_str("input"); }
-		| INT_P				{ $$ = make_str("int"); }
-		| UNION				{ $$ = make_str("union"); }
-		| TO				{ $$ = make_str("to"); }
-		| ECPGCKeywords			{ $$ = $1; }
-		| ECPGunreserved_interval	{ $$ = $1; }
-		;
-
-ECPGColLabelCommon:  ecpg_ident			{ $$ = $1; }
-		| col_name_keyword		{ $$ = $1; }
-		| type_func_name_keyword	{ $$ = $1; }
-		| ECPGKeywords_vanames		{ $$ = $1; }
-		;
-
-ECPGColLabel:  ECPGColLabelCommon	{ $$ = $1; }
-		| reserved_keyword		{ $$ = $1; }
-		| ECPGunreserved		{ $$ = $1; }
-		| ECPGKeywords_rest		{ $$ = $1; }
-		;
-
-ECPGCKeywords: S_AUTO			{ $$ = make_str("auto"); }
-		| S_CONST				{ $$ = make_str("const"); }
-		| S_EXTERN				{ $$ = make_str("extern"); }
-		| S_REGISTER			{ $$ = make_str("register"); }
-		| S_STATIC				{ $$ = make_str("static"); }
-		| S_TYPEDEF				{ $$ = make_str("typedef"); }
-		| S_VOLATILE			{ $$ = make_str("volatile"); }
-		;
-
-/*
- * Keyword classification lists.  Generally, every keyword present in
- * the Postgres grammar should appear in exactly one of these lists.
- *
- * Put a new keyword into the first list that it can go into without causing
- * shift or reduce conflicts.  The earlier lists define "less reserved"
- * categories of keywords.
- */
-
-/* "Unreserved" keywords --- available for use as any kind of name.
- */
-/* The following symbols must be excluded from ECPGColLabel and directly included into ColLabel
-   to enable C variables to get names from ECPGColLabel:
-   DAY_P, HOUR_P, MINUTE_P, MONTH_P, SECOND_P, YEAR_P
- */
-unreserved_keyword: ECPGunreserved_interval | ECPGunreserved;
-
-ECPGunreserved_interval: DAY_P			{ $$ = make_str("day"); }
-		| HOUR_P			{ $$ = make_str("hour"); }
-		| MINUTE_P			{ $$ = make_str("minute"); }
-		| MONTH_P			{ $$ = make_str("month"); }
-		| SECOND_P			{ $$ = make_str("second"); }
-		| YEAR_P			{ $$ = make_str("year"); }
-		;
-
-/* The following symbol must be excluded from var_name but still included in ColId
-   to enable ecpg special postgresql variables with this name:  CONNECTION
- */
-ECPGunreserved:	ECPGunreserved_con		{ $$ = $1; }
-		| CONNECTION			{ $$ = make_str("connection"); }
-		;
-
-ECPGunreserved_con:	  ABORT_P			{ $$ = make_str("abort"); }
-		| ABSOLUTE_P		{ $$ = make_str("absolute"); }
-		| ACCESS			{ $$ = make_str("access"); }
-		| ACTION			{ $$ = make_str("action"); }
-		| ADD_P				{ $$ = make_str("add"); }
-		| ADMIN				{ $$ = make_str("admin"); }
-		| AFTER				{ $$ = make_str("after"); }
-		| AGGREGATE			{ $$ = make_str("aggregate"); }
-		| ALSO				{ $$ = make_str("also"); }
-		| ALTER				{ $$ = make_str("alter"); }
-		| ALWAYS			{ $$ = make_str("always"); }
-		| ASSERTION			{ $$ = make_str("assertion"); }
-		| ASSIGNMENT		{ $$ = make_str("assignment"); }
-		| AT				{ $$ = make_str("at"); }
-		| BACKWARD			{ $$ = make_str("backward"); }
-		| BEFORE			{ $$ = make_str("before"); }
-		| BEGIN_P			{ $$ = make_str("begin"); }
-		| BY				{ $$ = make_str("by"); }
-		| CACHE				{ $$ = make_str("cache"); }
-		| CASCADE			{ $$ = make_str("cascade"); }
-		| CASCADED			{ $$ = make_str("cascaded"); }
-		| CHAIN				{ $$ = make_str("chain"); }
-		| CHARACTERISTICS	{ $$ = make_str("characteristics"); }
-		| CHECKPOINT		{ $$ = make_str("checkpoint"); }
-		| CLASS				{ $$ = make_str("class"); }
-		| CLOSE				{ $$ = make_str("close"); }
-		| CLUSTER			{ $$ = make_str("cluster"); }
-		| COMMENT			{ $$ = make_str("comment"); }
-		| COMMIT			{ $$ = make_str("commit"); }
-		| COMMITTED			{ $$ = make_str("committed"); }
-		| CONCURRENTLY		{ $$ = make_str("concurrently"); }
-		| CONFIGURATION		{ $$ = make_str("configuration"); }
-/*		| CONNECTION		{ $$ = make_str("connection"); }*/
-		| CONSTRAINTS		{ $$ = make_str("constraints"); }
-		| CONTENT_P		{ $$ = make_str("content"); }
-		| CONTINUE_P		{ $$ = make_str("continue"); }
-		| CONVERSION_P		{ $$ = make_str("conversion"); }
-		| COPY				{ $$ = make_str("copy"); }
-		| COST				{ $$ = make_str("cost"); }
-		| CREATEDB			{ $$ = make_str("createdb"); }
-		| CREATEROLE		{ $$ = make_str("createrole"); }
-		| CREATEUSER		{ $$ = make_str("createuser"); }
-		| CSV				{ $$ = make_str("csv"); }
-		| CTYPE			{ $$ = make_str("ctype"); }
-		| CURSOR			{ $$ = make_str("cursor"); }
-		| CYCLE				{ $$ = make_str("cycle"); }
-		| DATA_P			{ $$ = make_str("data"); }
-		| DATABASE			{ $$ = make_str("database"); }
-/*		| DAY_P				{ $$ = make_str("day"); }*/
-		| DEALLOCATE		{ $$ = make_str("deallocate"); }
-		| DECLARE			{ $$ = make_str("declare"); }
-		| DEFAULTS			{ $$ = make_str("defaults"); }
-		| DEFERRED			{ $$ = make_str("deferred"); }
-		| DELETE_P			{ $$ = make_str("delete"); }
-		| DELIMITER			{ $$ = make_str("delimiter"); }
-		| DELIMITERS		{ $$ = make_str("delimiters"); }
-		| DICTIONARY		{ $$ = make_str("dictionary"); }
-		| DISABLE_P			{ $$ = make_str("disable"); }
-		| DISCARD			{ $$ = make_str("discard"); }
-		| DOCUMENT_P			{ $$ = make_str("document"); }
-		| DOMAIN_P			{ $$ = make_str("domain"); }
-		| DOUBLE_P			{ $$ = make_str("double"); }
-		| DROP				{ $$ = make_str("drop"); }
-		| EACH				{ $$ = make_str("each"); }
-		| ENABLE_P			{ $$ = make_str("enable"); }
-		| ENCODING			{ $$ = make_str("encoding"); }
-		| ENCRYPTED			{ $$ = make_str("encrypted"); }
-/*		| ENUM_P			{ $$ = make_str("enum"); }*/
-		| ESCAPE			{ $$ = make_str("escape"); }
-		| EXCLUDING			{ $$ = make_str("excluding"); }
-		| EXCLUSIVE			{ $$ = make_str("exclusive"); }
-		| EXECUTE			{ $$ = make_str("execute"); }
-		| EXPLAIN			{ $$ = make_str("explain"); }
-		| EXTERNAL			{ $$ = make_str("external"); }
-		| FAMILY			{ $$ = make_str("family"); }
-/*		| FETCH				{ $$ = make_str("fetch"); }*/
-		| FIRST_P			{ $$ = make_str("first"); }
-		| FORCE				{ $$ = make_str("force"); }
-		| FORWARD			{ $$ = make_str("forward"); }
-		| FUNCTION			{ $$ = make_str("function"); }
-		| GLOBAL			{ $$ = make_str("global"); }
-		| GRANTED			{ $$ = make_str("granted"); }
-		| HANDLER			{ $$ = make_str("handler"); }
-		| HEADER_P			{ $$ = make_str("header"); }
-		| HOLD				{ $$ = make_str("hold"); }
-/*		| HOUR_P			{ $$ = make_str("hour"); }*/
-		| IDENTITY_P			{ $$ = make_str("identity"); }
-		| IF_P				{ $$ = make_str("if"); }
-		| IMMEDIATE			{ $$ = make_str("immediate"); }
-		| IMMUTABLE			{ $$ = make_str("immutable"); }
-		| IMPLICIT_P		{ $$ = make_str("implicit"); }
-		| INCLUDING			{ $$ = make_str("including"); }
-		| INCREMENT			{ $$ = make_str("increment"); }
-		| INDEX				{ $$ = make_str("index"); }
-		| INDEXES			{ $$ = make_str("indexes"); }
-		| INHERIT			{ $$ = make_str("inherit"); }
-		| INHERITS			{ $$ = make_str("inherits"); }
-		| INSENSITIVE		{ $$ = make_str("insensitive"); }
-		| INSERT			{ $$ = make_str("insert"); }
-		| INSTEAD			{ $$ = make_str("instead"); }
-		| ISOLATION			{ $$ = make_str("isolation"); }
-		| KEY				{ $$ = make_str("key"); }
-		| LANCOMPILER		{ $$ = make_str("lancompiler"); }
-		| LANGUAGE			{ $$ = make_str("language"); }
-		| LARGE_P			{ $$ = make_str("large"); }
-		| LAST_P			{ $$ = make_str("last"); }
-		| LEVEL				{ $$ = make_str("level"); }
-		| LISTEN			{ $$ = make_str("listen"); }
-		| LOAD				{ $$ = make_str("load"); }
-		| LOCAL				{ $$ = make_str("local"); }
-		| LOCATION			{ $$ = make_str("location"); }
-		| LOCK_P			{ $$ = make_str("lock"); }
-		| LOGIN_P			{ $$ = make_str("login"); }
-		| MAPPING			{ $$ = make_str("mapping"); }
-		| MATCH				{ $$ = make_str("match"); }
-		| MAXVALUE			{ $$ = make_str("maxvalue"); }
-/*		| MINUTE_P			{ $$ = make_str("minute"); }*/
-		| MINVALUE			{ $$ = make_str("minvalue"); }
-		| MODE				{ $$ = make_str("mode"); }
-/*		| MONTH_P			{ $$ = make_str("month"); }*/
-		| MOVE				{ $$ = make_str("move"); }
-		| NAME_P			{ $$ = make_str("name"); }
-		| NAMES				{ $$ = make_str("names"); }
-		| NEXT				{ $$ = make_str("next"); }
-		| NO				{ $$ = make_str("no"); }
-		| NOCREATEDB		{ $$ = make_str("nocreatedb"); }
-		| NOCREATEROLE		{ $$ = make_str("nocreaterole"); }
-		| NOCREATEUSER		{ $$ = make_str("nocreateuser"); }
-		| NOINHERIT			{ $$ = make_str("noinherit"); }
-		| NOLOGIN_P 		{ $$ = make_str("nologin"); }
-		| NOSUPERUSER		{ $$ = make_str("nosuperuser"); }
-		| NOTHING			{ $$ = make_str("nothing"); }
-		| NOTIFY			{ $$ = make_str("notify"); }
-		| NOWAIT			{ $$ = make_str("nowait"); }
-		| NULLS_P			{ $$ = make_str("nulls"); }
-		| OBJECT_P			{ $$ = make_str("object"); }
-		| OF				{ $$ = make_str("of"); }
-		| OIDS				{ $$ = make_str("oids"); }
-		| OPERATOR			{ $$ = make_str("operator"); }
-		| OPTION			{ $$ = make_str("option"); }
-		| OWNED				{ $$ = make_str("owned"); }
-		| OWNER				{ $$ = make_str("owner"); }
-		| PARSER			{ $$ = make_str("parser"); }
-		| PARTIAL			{ $$ = make_str("partial"); }
-		| PASSWORD			{ $$ = make_str("password"); }
-		| PLANS				{ $$ = make_str("plans"); }
-		| PREPARE			{ $$ = make_str("prepare"); }
-		| PREPARED			{ $$ = make_str("prepared"); }
-		| PRESERVE			{ $$ = make_str("preserver"); }
-		| PRIOR				{ $$ = make_str("prior"); }
-		| PRIVILEGES		{ $$ = make_str("privileges"); }
-		| PROCEDURAL		{ $$ = make_str("procedural"); }
-		| PROCEDURE			{ $$ = make_str("procedure"); }
-		| QUOTE				{ $$ = make_str("quote"); }
-		| READ				{ $$ = make_str("read"); }
-		| REASSIGN			{ $$ = make_str("reassign"); }
-		| RECHECK			{ $$ = make_str("recheck"); }
-		| RECURSIVE			{ $$ = make_str("recursive"); }
-		| REINDEX			{ $$ = make_str("reindex"); }
-		| RELATIVE_P		{ $$ = make_str("relative"); }
-		| RELEASE			{ $$ = make_str("release"); }
-		| RENAME			{ $$ = make_str("rename"); }
-		| REPEATABLE		{ $$ = make_str("repeatable"); }
-		| REPLACE			{ $$ = make_str("replace"); }
-		| REPLICA			{ $$ = make_str("replica"); }
-		| RESET				{ $$ = make_str("reset"); }
-		| RESTART			{ $$ = make_str("restart"); }
-		| RESTRICT			{ $$ = make_str("restrict"); }
-		| RETURNS			{ $$ = make_str("returns"); }
-		| REVOKE			{ $$ = make_str("revoke"); }
-		| ROLE				{ $$ = make_str("role"); }
-		| ROLLBACK			{ $$ = make_str("rollback"); }
-		| ROWS				{ $$ = make_str("rows"); }
-		| RULE				{ $$ = make_str("rule"); }
-		| SAVEPOINT			{ $$ = make_str("savepoint"); }
-		| SCHEMA			{ $$ = make_str("schema"); }
-		| SCROLL			{ $$ = make_str("scroll"); }
-		| SEARCH			{ $$ = make_str("search"); }
-/*		| SECOND_P			{ $$ = make_str("second"); }*/
-		| SEQUENCE			{ $$ = make_str("sequence"); }
-		| SERIALIZABLE		{ $$ = make_str("serializable"); }
-		| SESSION			{ $$ = make_str("session"); }
-		| SET				{ $$ = make_str("set"); }
-		| SHARE				{ $$ = make_str("share"); }
-		| SHOW				{ $$ = make_str("show"); }
-		| SIMPLE			{ $$ = make_str("simple"); }
-		| STABLE			{ $$ = make_str("stable"); }
-		| STANDALONE_P			{ $$ = make_str("standalone"); }
-		| START				{ $$ = make_str("start"); }
-		| STATEMENT			{ $$ = make_str("statement"); }
-		| STATISTICS		{ $$ = make_str("statistics"); }
-		| STDIN				{ $$ = make_str("stdin"); }
-		| STDOUT			{ $$ = make_str("stdout"); }
-		| STORAGE			{ $$ = make_str("storage"); }
-		| STRICT_P			{ $$ = make_str("strict"); }
-		| STRIP_P			{ $$ = make_str("strip"); }
-		| SUPERUSER_P		{ $$ = make_str("superuser"); }
-		| SYSTEM_P			{ $$ = make_str("system"); }
-		| SYSID				{ $$ = make_str("sysid"); }
-		| TABLESPACE		{ $$ = make_str("tablespace"); }
-		| TEMP				{ $$ = make_str("temp"); }
-		| TEMPLATE			{ $$ = make_str("template"); }
-		| TEMPORARY			{ $$ = make_str("temporary"); }
-		| TEXT_P			{ $$ = make_str("text"); }
-		| TRANSACTION		{ $$ = make_str("transaction"); }
-		| TRIGGER			{ $$ = make_str("trigger"); }
-		| TRUNCATE			{ $$ = make_str("truncate"); }
-		| TRUSTED			{ $$ = make_str("trusted"); }
-		| TYPE_P			{ $$ = make_str("type"); }
-		| UNCOMMITTED		{ $$ = make_str("uncommitted"); }
-		| UNENCRYPTED		{ $$ = make_str("unencrypted"); }
-		| UNKNOWN			{ $$ = make_str("unknown"); }
-		| UNLISTEN			{ $$ = make_str("unlisten"); }
-		| UNTIL				{ $$ = make_str("until"); }
-		| UPDATE			{ $$ = make_str("update"); }
-		| VACUUM			{ $$ = make_str("vacuum"); }
-		| VALID				{ $$ = make_str("valid"); }
-		| VALIDATOR			{ $$ = make_str("validator"); }
-		| VALUE_P			{ $$ = make_str("value"); }
-		| VARYING			{ $$ = make_str("varying"); }
-		| VERSION_P			{ $$ = make_str("version"); }
-		| VIEW				{ $$ = make_str("view"); }
-		| VOLATILE			{ $$ = make_str("volatile"); }
-		| WHITESPACE_P			{ $$ = make_str("whitespace"); }
-		| WITHOUT			{ $$ = make_str("without"); }
-		| WORK				{ $$ = make_str("work"); }
-		| WRITE  			{ $$ = make_str("write"); }
-		| XML_P  			{ $$ = make_str("xml"); }
-		| YES_P  			{ $$ = make_str("yes"); }
-/*		| YEAR_P			{ $$ = make_str("year"); }*/
-		| ZONE				{ $$ = make_str("zone"); }
-		;
-
-into_list : coutputvariable | into_list ',' coutputvariable
-		;
-
-ecpgstart: SQL_START	{
-				reset_variables();
-				pacounter = 1;
-			}
-		;
-
-c_args: /*EMPTY*/		{ $$ = EMPTY; }
-		| c_list		{ $$ = $1; }
-		;
-
-coutputvariable: cvariable indicator
-			{ add_variable_to_head(&argsresult, find_variable($1), find_variable($2)); }
-		| cvariable
-			{ add_variable_to_head(&argsresult, find_variable($1), &no_indicator); }
-		;
-
-
-civarind: cvariable indicator
-		{
-			if (find_variable($2)->type->type == ECPGt_array)
-				mmerror(PARSE_ERROR, ET_ERROR, "arrays of indicators are not allowed on input");
-
-			add_variable_to_head(&argsinsert, find_variable($1), find_variable($2));
-			$$ = create_questionmarks($1, false);
-		}
-		;
-
-civar: cvariable
-		{
-			add_variable_to_head(&argsinsert, find_variable($1), &no_indicator);
-			$$ = create_questionmarks($1, false);
-		}
-		;
-
-indicator: cvariable				{ check_indicator((find_variable($1))->type); $$ = $1; }
-		| SQL_INDICATOR cvariable	{ check_indicator((find_variable($2))->type); $$ = $2; }
-		| SQL_INDICATOR name		{ check_indicator((find_variable($2))->type); $$ = $2; }
-		;
-
-cvariable:	CVARIABLE
-		{
-			/* As long as multidimensional arrays are not implemented we have to check for those here */
-			char *ptr = $1;
-			int brace_open=0, brace = false;
-
-			for (; *ptr; ptr++)
-			{
-				switch (*ptr)
-				{
-					case '[':
-							if (brace)
-								mmerror(PARSE_ERROR, ET_FATAL, "no multidimensional array support for simple data types");
-							brace_open++;
-							break;
-					case ']':
-							brace_open--;
-							if (brace_open == 0)
-								brace = true;
-							break;
-					case '\t':
-					case ' ':
-							break;
-					default:
-							if (brace_open == 0)
-								brace = false;
-							break;
-				}
-			}
-			$$ = $1;
-		}
-		;
-
-ecpg_param:	PARAM		{ $$ = make_name(); } ;
-
-ecpg_bconst:	BCONST		{ $$ = make_name(); } ;
-
-ecpg_fconst:	FCONST		{ $$ = make_name(); } ;
-
-ecpg_sconst:
-		SCONST
-		{
-			/* could have been input as '' or $$ */
-			$$ = (char *)mm_alloc(strlen($1) + 3);
-			$$[0]='\'';
-			strcpy($$+1, $1);
-			$$[strlen($1)+1]='\'';
-			$$[strlen($1)+2]='\0';
-			free($1);
-		}
-		| ECONST
-		{
-			$$ = (char *)mm_alloc(strlen($1) + 4);
-			$$[0]='E';
-			$$[1]='\'';
-			strcpy($$+2, $1);
-			$$[strlen($1)+2]='\'';
-			$$[strlen($1)+3]='\0';
-			free($1);
-		}
-		| NCONST
-		{
-			$$ = (char *)mm_alloc(strlen($1) + 4);
-			$$[0]='N';
-			$$[1]='\'';
-			strcpy($$+2, $1);
-			$$[strlen($1)+2]='\'';
-			$$[strlen($1)+3]='\0';
-			free($1);
-		}
-		| UCONST 	{ $$ = $1; }
-		| DOLCONST 	{ $$ = $1; }
-		;
-
-ecpg_xconst:	XCONST		{ $$ = make_name(); } ;
-
-ecpg_ident:	IDENT		{ $$ = make_name(); }
-		| CSTRING	{ $$ = make3_str(make_str("\""), $1, make_str("\"")) }
-		| UIDENT	{ $$ = $1; }
-		;
-
-quoted_ident_stringvar: name
-			{ $$ = make3_str(make_str("\""), $1, make_str("\"")); }
-		| char_variable
-			{ $$ = make3_str(make_str("("), $1, make_str(")")); }
-		;
-
-/*
- * C stuff
- */
-
-c_stuff_item: c_anything			{ $$ = $1; }
-		| '(' ')'			{ $$ = make_str("()"); }
-		| '(' c_stuff ')'
-			{ $$ = cat_str(3, make_str("("), $2, make_str(")")); }
-		;
-
-c_stuff: c_stuff_item			{ $$ = $1; }
-		| c_stuff c_stuff_item
-			{ $$ = cat2_str($1, $2); }
-		;
-
-c_list: c_term				{ $$ = $1; }
-		| c_list ',' c_term	{ $$ = cat_str(3, $1, make_str(","), $3); }
-		;
-
-c_term:  c_stuff			{ $$ = $1; }
-		| '{' c_list '}'	{ $$ = cat_str(3, make_str("{"), $2, make_str("}")); }
-		;
-
-c_thing:	c_anything		{ $$ = $1; }
-		|	'('		{ $$ = make_str("("); }
-		|	')'		{ $$ = make_str(")"); }
-		|	','		{ $$ = make_str(","); }
-		|	';'		{ $$ = make_str(";"); }
-		;
-
-c_anything:  ecpg_ident				{ $$ = $1; }
-		| Iconst			{ $$ = $1; }
-		| ecpg_fconst			{ $$ = $1; }
-		| ecpg_sconst			{ $$ = $1; }
-		| '*'				{ $$ = make_str("*"); }
-		| '+'				{ $$ = make_str("+"); }
-		| '-'				{ $$ = make_str("-"); }
-		| '/'				{ $$ = make_str("/"); }
-		| '%'				{ $$ = make_str("%"); }
-		| NULL_P			{ $$ = make_str("NULL"); }
-		| S_ADD				{ $$ = make_str("+="); }
-		| S_AND				{ $$ = make_str("&&"); }
-		| S_ANYTHING			{ $$ = make_name(); }
-		| S_AUTO			{ $$ = make_str("auto"); }
-		| S_CONST			{ $$ = make_str("const"); }
-		| S_DEC				{ $$ = make_str("--"); }
-		| S_DIV				{ $$ = make_str("/="); }
-		| S_DOTPOINT			{ $$ = make_str(".*"); }
-		| S_EQUAL			{ $$ = make_str("=="); }
-		| S_EXTERN			{ $$ = make_str("extern"); }
-		| S_INC				{ $$ = make_str("++"); }
-		| S_LSHIFT			{ $$ = make_str("<<"); }
-		| S_MEMBER			{ $$ = make_str("->"); }
-		| S_MEMPOINT			{ $$ = make_str("->*"); }
-		| S_MOD				{ $$ = make_str("%="); }
-		| S_MUL				{ $$ = make_str("*="); }
-		| S_NEQUAL			{ $$ = make_str("!="); }
-		| S_OR				{ $$ = make_str("||"); }
-		| S_REGISTER			{ $$ = make_str("register"); }
-		| S_RSHIFT			{ $$ = make_str(">>"); }
-		| S_STATIC			{ $$ = make_str("static"); }
-		| S_SUB				{ $$ = make_str("-="); }
-		| S_TYPEDEF			{ $$ = make_str("typedef"); }
-		| S_VOLATILE			{ $$ = make_str("volatile"); }
-		| SQL_BOOL			{ $$ = make_str("bool"); }
-		| ENUM_P			{ $$ = make_str("enum"); }
-		| HOUR_P			{ $$ = make_str("hour"); }
-		| INT_P				{ $$ = make_str("int"); }
-		| SQL_LONG			{ $$ = make_str("long"); }
-		| MINUTE_P			{ $$ = make_str("minute"); }
-		| MONTH_P			{ $$ = make_str("month"); }
-		| SECOND_P			{ $$ = make_str("second"); }
-		| SQL_SHORT			{ $$ = make_str("short"); }
-		| SQL_SIGNED			{ $$ = make_str("signed"); }
-		| SQL_STRUCT			{ $$ = make_str("struct"); }
-		| SQL_UNSIGNED			{ $$ = make_str("unsigned"); }
-		| YEAR_P			{ $$ = make_str("year"); }
-		| CHAR_P			{ $$ = make_str("char"); }
-		| FLOAT_P			{ $$ = make_str("float"); }
-		| TO				{ $$ = make_str("to"); }
-		| UNION				{ $$ = make_str("union"); }
-		| VARCHAR			{ $$ = make_str("varchar"); }
-		| '['				{ $$ = make_str("["); }
-		| ']'				{ $$ = make_str("]"); }
-		| '='				{ $$ = make_str("="); }
-		| ':' 				{ $$ = make_str(":"); }
-		;
-
-DeallocateStmt: DEALLOCATE prepared_name                { $$ = $2; }
-                | DEALLOCATE PREPARE prepared_name      { $$ = $3; }
-                | DEALLOCATE ALL                        { $$ = make_str("all"); }
-                | DEALLOCATE PREPARE ALL                { $$ = make_str("all"); }
-                ;
-
-Iresult:        Iconst			{ $$ = $1; }
-                | '(' Iresult ')'       { $$ = cat_str(3, make_str("("), $2, make_str(")")); }
-                | Iresult '+' Iresult   { $$ = cat_str(3, $1, make_str("+"), $3); }
-                | Iresult '-' Iresult   { $$ = cat_str(3, $1, make_str("-"), $3); }
-                | Iresult '*' Iresult   { $$ = cat_str(3, $1, make_str("*"), $3); }
-                | Iresult '/' Iresult   { $$ = cat_str(3, $1, make_str("/"), $3); }
-                | Iresult '%' Iresult   { $$ = cat_str(3, $1, make_str("%"), $3); }
-                | ecpg_sconst		{ $$ = $1; }
-                | ColId                 { $$ = $1; }
-                ;
-
-execute_rest: /* EMPTY */	{ $$ = EMPTY; }
-	| ecpg_using ecpg_into  { $$ = EMPTY; }
-	| ecpg_into ecpg_using  { $$ = EMPTY; }
-	| ecpg_using            { $$ = EMPTY; }
-	| ecpg_into             { $$ = EMPTY; }
-	; 
-
-ecpg_into: INTO into_list	{ $$ = EMPTY; }
-        | into_descriptor	{ $$ = $1; }
-	;
-
-%%
-
-void base_yyerror(const char * error)
-{
-	char buf[1024];
-
-	snprintf(buf,sizeof buf, _("%s at or near \"%s\""), error, token_start ? token_start : yytext);
-	buf[sizeof(buf)-1]=0;
-	mmerror(PARSE_ERROR, ET_ERROR, buf);
-}
-
-void parser_init(void)
-{
- /* This function is empty. It only exists for compatibility with the backend parser right now. */
-}
-
-/*
- * Must undefine base_yylex before including pgc.c, since we want it
- * to create the function base_yylex not filtered_base_yylex.
- */
-#undef base_yylex
-
-#include "pgc.c"
-- 
GitLab