mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Allow constants in using clauses.
This commit is contained in:
		@@ -1501,6 +1501,10 @@ Thu Jun 19 10:08:26 CEST 2003
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	- Added missing rdayofweek function for Informix compatibility.
 | 
						- Added missing rdayofweek function for Informix compatibility.
 | 
				
			||||||
	- Fixed fetch into char pointer.
 | 
						- Fixed fetch into char pointer.
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					Fri Jun 20 13:23:07 CEST 2003
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						- Enabled constants in using clause.
 | 
				
			||||||
	- Set ecpg version to 3.0.0
 | 
						- Set ecpg version to 3.0.0
 | 
				
			||||||
	- Set ecpg library to 4.0.0
 | 
						- Set ecpg library to 4.0.0
 | 
				
			||||||
	- Set pgtypes library to 1.0.0
 | 
						- Set pgtypes library to 1.0.0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.10 2003/06/15 04:07:58 momjian Exp $ */
 | 
					/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.11 2003/06/20 12:00:59 meskes Exp $ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * The aim is to get a simpler inteface to the database routines.
 | 
					 * The aim is to get a simpler inteface to the database routines.
 | 
				
			||||||
@@ -775,6 +775,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
 | 
				
			|||||||
					*malloced_p = true;
 | 
										*malloced_p = true;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
 | 
								case ECPGt_const:
 | 
				
			||||||
			case ECPGt_char_variable:
 | 
								case ECPGt_char_variable:
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					int			slen = strlen((char *) var->value);
 | 
										int			slen = strlen((char *) var->value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/typename.c,v 1.5 2003/06/17 07:28:22 meskes Exp $ */
 | 
					/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/typename.c,v 1.6 2003/06/20 12:00:59 meskes Exp $ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define POSTGRES_ECPG_INTERNAL
 | 
					#define POSTGRES_ECPG_INTERNAL
 | 
				
			||||||
#include "postgres_fe.h"
 | 
					#include "postgres_fe.h"
 | 
				
			||||||
@@ -56,6 +56,8 @@ ECPGtype_name(enum ECPGttype typ)
 | 
				
			|||||||
			return "Timestamp";
 | 
								return "Timestamp";
 | 
				
			||||||
		case ECPGt_interval:
 | 
							case ECPGt_interval:
 | 
				
			||||||
			return "Interval";
 | 
								return "Interval";
 | 
				
			||||||
 | 
							case ECPGt_char_const:
 | 
				
			||||||
 | 
								return "Const";
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			abort();
 | 
								abort();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,7 @@ enum ECPGttype
 | 
				
			|||||||
	ECPGt_union,
 | 
						ECPGt_union,
 | 
				
			||||||
	ECPGt_descriptor,		/* sql descriptor, no C variable */
 | 
						ECPGt_descriptor,		/* sql descriptor, no C variable */
 | 
				
			||||||
	ECPGt_char_variable,
 | 
						ECPGt_char_variable,
 | 
				
			||||||
 | 
						ECPGt_const,			/* a constant is needed sometimes */
 | 
				
			||||||
	ECPGt_EOIT,			/* End of insert types. */
 | 
						ECPGt_EOIT,			/* End of insert types. */
 | 
				
			||||||
	ECPGt_EORT,			/* End of result types. */
 | 
						ECPGt_EORT,			/* End of result types. */
 | 
				
			||||||
	ECPGt_NO_INDICATOR		/* no indicator */
 | 
						ECPGt_NO_INDICATOR		/* no indicator */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.234 2003/06/19 09:52:11 meskes Exp $ */
 | 
					/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.235 2003/06/20 12:00:59 meskes Exp $ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Copyright comment */
 | 
					/* Copyright comment */
 | 
				
			||||||
%{
 | 
					%{
 | 
				
			||||||
@@ -475,7 +475,7 @@ adjust_informix(struct arguments *list)
 | 
				
			|||||||
%type  <str>	ECPGGetDescriptorHeader ECPGColLabel single_var_declaration
 | 
					%type  <str>	ECPGGetDescriptorHeader ECPGColLabel single_var_declaration
 | 
				
			||||||
%type  <str>	reserved_keyword unreserved_keyword ecpg_interval opt_ecpg_using
 | 
					%type  <str>	reserved_keyword unreserved_keyword ecpg_interval opt_ecpg_using
 | 
				
			||||||
%type  <str>	col_name_keyword func_name_keyword precision opt_scale
 | 
					%type  <str>	col_name_keyword func_name_keyword precision opt_scale
 | 
				
			||||||
%type  <str>	ECPGTypeName using_list ECPGColLabelCommon 
 | 
					%type  <str>	ECPGTypeName using_list ECPGColLabelCommon UsingConst
 | 
				
			||||||
%type  <str>	inf_val_list inf_col_list using_descriptor into_descriptor 
 | 
					%type  <str>	inf_val_list inf_col_list using_descriptor into_descriptor 
 | 
				
			||||||
%type  <str>	ecpg_into_using
 | 
					%type  <str>	ecpg_into_using
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -5196,7 +5196,19 @@ ecpg_into: INTO into_list		{ $$ = EMPTY; }
 | 
				
			|||||||
		| into_descriptor	{ $$ = $1; }
 | 
							| into_descriptor	{ $$ = $1; }
 | 
				
			||||||
		;
 | 
							;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
using_list: civar | civar ',' using_list;
 | 
					using_list: UsingConst | UsingConst ',' using_list;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UsingConst: AllConst
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if ($1[1] != '?') /* found a constant */
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									char *length = mm_alloc(sizeof("INT_MAX")+1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									sprintf(length, "%d", strlen($1));
 | 
				
			||||||
 | 
									add_variable(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0), &no_indicator);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * As long as the prepare statement is not supported by the backend, we will
 | 
					 * As long as the prepare statement is not supported by the backend, we will
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -169,6 +169,9 @@ get_type(enum ECPGttype type)
 | 
				
			|||||||
										 * quoted */
 | 
															 * quoted */
 | 
				
			||||||
			return ("ECPGt_char_variable");
 | 
								return ("ECPGt_char_variable");
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
							case ECPGt_const:		/* constant string quoted */
 | 
				
			||||||
 | 
								return ("ECPGt_const");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		case ECPGt_numeric:
 | 
							case ECPGt_numeric:
 | 
				
			||||||
			return ("ECPGt_numeric");
 | 
								return ("ECPGt_numeric");
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
@@ -381,6 +384,14 @@ ECPGdump_a_simple(FILE *o, const char *name, enum ECPGttype type,
 | 
				
			|||||||
				sprintf(variable, "&(%s%s)", prefix ? prefix : "", name);
 | 
									sprintf(variable, "&(%s%s)", prefix ? prefix : "", name);
 | 
				
			||||||
				sprintf(offset, "sizeof(Date)");
 | 
									sprintf(offset, "sizeof(Date)");
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
 | 
								case ECPGt_const:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									/*
 | 
				
			||||||
 | 
									 * just dump the const as string 
 | 
				
			||||||
 | 
									 */
 | 
				
			||||||
 | 
									sprintf(variable, "\"%s\"", name);
 | 
				
			||||||
 | 
									sprintf(offset, "strlen(\"%s\")", name);
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				/*
 | 
									/*
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,6 @@ exec sql begin declare section;
 | 
				
			|||||||
					struct birthinfo ind_birth;
 | 
										struct birthinfo ind_birth;
 | 
				
			||||||
				  } ind_personal, *i;
 | 
									  } ind_personal, *i;
 | 
				
			||||||
	ind ind_children;
 | 
						ind ind_children;
 | 
				
			||||||
	c testname="Petra";
 | 
					 | 
				
			||||||
	char *query="select name, born, age, married, children from meskes where name = :var1";
 | 
						char *query="select name, born, age, married, children from meskes where name = :var1";
 | 
				
			||||||
exec sql end declare section;
 | 
					exec sql end declare section;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -92,7 +91,7 @@ exec sql end declare section;
 | 
				
			|||||||
	exec sql declare prep cursor for MM;
 | 
						exec sql declare prep cursor for MM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	strcpy(msg, "open");
 | 
						strcpy(msg, "open");
 | 
				
			||||||
	exec sql open prep using :testname;
 | 
						exec sql open prep using 'Petra';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	exec sql whenever not found do break;
 | 
						exec sql whenever not found do break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user