- Added just another patch by Dave that fixes a reversed order in
variable listing for output variables in cursor definitions - Fixed incorrect if call in long=>numeric conversion.
This commit is contained in:
parent
845109e606
commit
95eea2d89c
@ -1717,6 +1717,12 @@ Mon Nov 3 15:43:19 CET 2003
|
||||
Wed Dec 3 09:45:21 CET 2003
|
||||
|
||||
- Added patch for array handling by Dave Cramer
|
||||
|
||||
Wed Dec 17 16:11:16 CET 2003
|
||||
|
||||
- Added just another patch by Dave that fixes a reversed order in
|
||||
variable listing for output variables in cursor definitions
|
||||
- Fixed incorrect if call in long=>numeric conversion.
|
||||
- Set ecpg version to 3.1.0
|
||||
- Set ecpg library to 4.1.0
|
||||
- Set pgtypes library to 1.1.0
|
||||
|
@ -1353,7 +1353,7 @@ PGTYPESnumeric_from_long(signed long int long_val, numeric *var)
|
||||
reach_limit *= 10;
|
||||
} while ((reach_limit - 1) < abs_long_val && reach_limit <= LONG_MAX/10);
|
||||
|
||||
if (reach_limit <= LONG_MAX/10)
|
||||
if (reach_limit > LONG_MAX/10)
|
||||
{
|
||||
/* add the first digit and a .0 */
|
||||
size += 2;
|
||||
|
@ -75,8 +75,8 @@ extern void add_descriptor(char *, char *);
|
||||
extern void drop_descriptor(char *, char *);
|
||||
extern struct descriptor *lookup_descriptor(char *, char *);
|
||||
extern struct variable *descriptor_variable(const char *name, int input);
|
||||
extern void add_variable(struct arguments **, struct variable *, struct variable *);
|
||||
extern void append_variable(struct arguments **, struct variable *, struct variable *);
|
||||
extern void add_variable_to_head(struct arguments **, struct variable *, struct variable *);
|
||||
extern void add_variable_to_tail(struct arguments **, struct variable *, struct variable *);
|
||||
extern void dump_variables(struct arguments *, int);
|
||||
extern struct typedefs *get_typedef(char *);
|
||||
extern void adjust_array(enum ECPGttype, char **, char **, char *, char *, int);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.266 2003/11/29 19:52:08 pgsql Exp $ */
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.267 2003/12/17 15:23:45 meskes Exp $ */
|
||||
|
||||
/* Copyright comment */
|
||||
%{
|
||||
@ -271,12 +271,12 @@ add_additional_variables(char *name, bool 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)
|
||||
append_variable(&argsinsert, p->variable, p->indicator);
|
||||
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(&argsresult, p->variable, p->indicator);
|
||||
add_variable_to_tail(&argsresult, p->variable, p->indicator);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
@ -4385,7 +4385,7 @@ ECPGCursorStmt: DECLARE name cursor_options CURSOR opt_hold FOR prepared_name
|
||||
sprintf(thisquery->name, "ECPGprepared_statement(%s)", $7);
|
||||
|
||||
this->argsinsert = NULL;
|
||||
add_variable(&(this->argsinsert), thisquery, &no_indicator);
|
||||
add_variable_to_head(&(this->argsinsert), thisquery, &no_indicator);
|
||||
|
||||
cur = this;
|
||||
|
||||
@ -5211,7 +5211,7 @@ ECPGExecute : EXECUTE IMMEDIATE execstring
|
||||
thisquery->next = NULL;
|
||||
thisquery->name = $3;
|
||||
|
||||
add_variable(&argsinsert, thisquery, &no_indicator);
|
||||
add_variable_to_head(&argsinsert, thisquery, &no_indicator);
|
||||
|
||||
$$ = make_str("?");
|
||||
}
|
||||
@ -5225,7 +5225,7 @@ ECPGExecute : EXECUTE IMMEDIATE execstring
|
||||
thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement()") + strlen($2));
|
||||
sprintf(thisquery->name, "ECPGprepared_statement(%s)", $2);
|
||||
|
||||
add_variable(&argsinsert, thisquery, &no_indicator);
|
||||
add_variable_to_head(&argsinsert, thisquery, &no_indicator);
|
||||
}
|
||||
execute_rest
|
||||
{
|
||||
@ -5270,14 +5270,14 @@ ecpg_using: USING using_list { $$ = EMPTY; }
|
||||
|
||||
using_descriptor: USING opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
|
||||
{
|
||||
add_variable(&argsresult, descriptor_variable($4,0), &no_indicator);
|
||||
add_variable_to_head(&argsresult, descriptor_variable($4,0), &no_indicator);
|
||||
$$ = EMPTY;
|
||||
}
|
||||
;
|
||||
|
||||
into_descriptor: INTO opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
|
||||
{
|
||||
add_variable(&argsresult, descriptor_variable($4,0), &no_indicator);
|
||||
add_variable_to_head(&argsresult, descriptor_variable($4,0), &no_indicator);
|
||||
$$ = EMPTY;
|
||||
}
|
||||
;
|
||||
@ -5301,7 +5301,7 @@ UsingConst: AllConst
|
||||
char *length = mm_alloc(32);
|
||||
|
||||
sprintf(length, "%d", (int) strlen($1));
|
||||
add_variable(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0), &no_indicator);
|
||||
add_variable_to_head(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0), &no_indicator);
|
||||
}
|
||||
}
|
||||
;
|
||||
@ -6147,9 +6147,9 @@ c_args: /*EMPTY*/ { $$ = EMPTY; }
|
||||
;
|
||||
|
||||
coutputvariable: CVARIABLE indicator
|
||||
{ add_variable(&argsresult, find_variable($1), find_variable($2)); }
|
||||
{ add_variable_to_head(&argsresult, find_variable($1), find_variable($2)); }
|
||||
| CVARIABLE
|
||||
{ add_variable(&argsresult, find_variable($1), &no_indicator); }
|
||||
{ add_variable_to_head(&argsresult, find_variable($1), &no_indicator); }
|
||||
;
|
||||
|
||||
|
||||
@ -6158,14 +6158,14 @@ 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(&argsinsert, find_variable($1), find_variable($2));
|
||||
add_variable_to_head(&argsinsert, find_variable($1), find_variable($2));
|
||||
$$ = create_questionmarks($1, false);
|
||||
}
|
||||
;
|
||||
|
||||
civar: CVARIABLE
|
||||
{
|
||||
add_variable(&argsinsert, find_variable($1), &no_indicator);
|
||||
add_variable_to_head(&argsinsert, find_variable($1), &no_indicator);
|
||||
$$ = create_questionmarks($1, false);
|
||||
}
|
||||
;
|
||||
|
@ -299,7 +299,7 @@ remove_variables(int brace_level)
|
||||
prevvar->next = varptr->next;
|
||||
}
|
||||
}
|
||||
for (varptr = ptr->argsresult; varptr != NULL; varptr = varptr->next)
|
||||
for (varptr = prevvar = ptr->argsresult; varptr != NULL; varptr = varptr->next)
|
||||
{
|
||||
if (p == varptr->variable)
|
||||
{
|
||||
@ -349,7 +349,7 @@ reset_variables(void)
|
||||
* Note: The list is dumped from the end,
|
||||
* so we have to add new entries at the beginning */
|
||||
void
|
||||
add_variable(struct arguments ** list, struct variable * var, struct variable * ind)
|
||||
add_variable_to_head(struct arguments ** list, struct variable * var, struct variable * ind)
|
||||
{
|
||||
struct arguments *p = (struct arguments *) mm_alloc(sizeof(struct arguments));
|
||||
|
||||
@ -361,7 +361,7 @@ add_variable(struct arguments ** list, struct variable * var, struct variable *
|
||||
|
||||
/* Append a new variable to our request list. */
|
||||
void
|
||||
append_variable(struct arguments ** list, struct variable * var, struct variable * ind)
|
||||
add_variable_to_tail(struct arguments ** list, struct variable * var, struct variable * ind)
|
||||
{
|
||||
struct arguments *p,
|
||||
*new = (struct arguments *) mm_alloc(sizeof(struct arguments));
|
||||
|
Loading…
x
Reference in New Issue
Block a user