Allow constants in using clauses.
This commit is contained in:
parent
5fc9f3d574
commit
abd310a3b1
@ -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;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user