- Fixed some minor things in test cases.
- Use defines for Informix error codes.
- Applied some bug fixing patches by Dave Cramer <dave@fastcrypt.com>.
- Added protecting defines to include files.
- Renamed my own strndup() function because of a name clash.
+
+Mon Sep 22 15:13:02 CEST 2003
+
+ - Fixed order mismatch in processing "using" arguments.
+ - Fixed some minor things in test cases.
+ - Use defines for Informix error codes.
- Set ecpg version to 3.0.0
- Set ecpg library to 4.0.0
- Set pgtypes library to 1.0.0
int i;
if ((a1 = PGTYPESnumeric_new()) == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
if ((a2 = PGTYPESnumeric_new()) == NULL)
{
PGTYPESnumeric_free(a1);
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
}
if (PGTYPESnumeric_from_decimal(arg1, a1) != 0)
{
PGTYPESnumeric_free(a1);
PGTYPESnumeric_free(a2);
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
}
if (PGTYPESnumeric_from_decimal(arg2, a2) != 0)
{
PGTYPESnumeric_free(a1);
PGTYPESnumeric_free(a2);
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
}
i = (*ptr) (a1, a2);
}
if ((a1 = PGTYPESnumeric_new()) == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
if ((a2 = PGTYPESnumeric_new()) == NULL)
{
PGTYPESnumeric_free(a1);
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
}
if ((nres = PGTYPESnumeric_new()) == NULL)
{
PGTYPESnumeric_free(a1);
PGTYPESnumeric_free(a2);
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
}
if (PGTYPESnumeric_from_decimal(arg1, a1) != 0)
PGTYPESnumeric_free(a1);
PGTYPESnumeric_free(a2);
PGTYPESnumeric_free(nres);
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
}
if (PGTYPESnumeric_from_decimal(arg2, a2) != 0)
PGTYPESnumeric_free(a1);
PGTYPESnumeric_free(a2);
PGTYPESnumeric_free(nres);
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
}
i = (*ptr) (a1, a2, nres);
deccall3(arg1, arg2, sum, PGTYPESnumeric_add);
if (errno == PGTYPES_NUM_OVERFLOW)
- return -1200;
+ return ECPG_INFORMIX_NUM_OVERFLOW;
else if (errno != 0)
- return -1201;
+ return ECPG_INFORMIX_NUM_UNDERFLOW;
else
return 0;
}
return 0;
if (!str)
- ret = -1201;
+ ret = ECPG_INFORMIX_NUM_UNDERFLOW;
else
{
result = PGTYPESnumeric_from_asc(str, NULL);
switch (errno)
{
case PGTYPES_NUM_OVERFLOW:
- ret = -1200;
+ ret = ECPG_INFORMIX_NUM_OVERFLOW;
break;
case PGTYPES_NUM_BAD_NUMERIC:
- ret = -1213;
+ ret = ECPG_INFORMIX_BAD_NUMERIC;
break;
default:
- ret = -1216;
+ ret = ECPG_INFORMIX_BAD_EXPONENT;
break;
}
}
else
{
if (PGTYPESnumeric_to_decimal(result, np) != 0)
- ret = -1200;
+ ret = ECPG_INFORMIX_NUM_OVERFLOW;
free(result);
}
return 0;
if (nres == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
result = PGTYPESnumeric_from_double(dbl, nres);
if (result == 0)
return 0;
if (nres == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
result = PGTYPESnumeric_from_int(in, nres);
if (result == 0)
return 0;
if (nres == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
result = PGTYPESnumeric_from_long(lng, nres);
if (result == 0)
switch (errno)
{
case PGTYPES_NUM_DIVIDE_ZERO:
- return -1202;
+ return ECPG_INFORMIX_DIVIDE_ZERO;
break;
case PGTYPES_NUM_OVERFLOW:
- return -1200;
+ return ECPG_INFORMIX_NUM_OVERFLOW;
break;
default:
- return -1201;
+ return ECPG_INFORMIX_NUM_UNDERFLOW;
break;
}
switch (errno)
{
case PGTYPES_NUM_OVERFLOW:
- return -1200;
+ return ECPG_INFORMIX_NUM_OVERFLOW;
break;
default:
- return -1201;
+ return ECPG_INFORMIX_NUM_UNDERFLOW;
break;
}
switch (errno)
{
case PGTYPES_NUM_OVERFLOW:
- return -1200;
+ return ECPG_INFORMIX_NUM_OVERFLOW;
break;
default:
- return -1201;
+ return ECPG_INFORMIX_NUM_UNDERFLOW;
break;
}
numeric *nres = PGTYPESnumeric_new();
if (nres == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
rsetnull(CSTRINGTYPE, (char *) cp);
if (risnull(CDECIMALTYPE, (char *) np))
return 0;
if (PGTYPESnumeric_from_decimal(np, nres) != 0)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
if (right >= 0)
str = PGTYPESnumeric_to_asc(nres, right);
int i;
if (nres == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
if (PGTYPESnumeric_from_decimal(np, nres) != 0)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
i = PGTYPESnumeric_to_double(nres, dblp);
PGTYPESnumeric_free(nres);
numeric *nres = PGTYPESnumeric_new();
if (nres == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
if (PGTYPESnumeric_from_decimal(np, nres) != 0)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
ret = PGTYPESnumeric_to_int(nres, ip);
if (ret == PGTYPES_NUM_OVERFLOW)
- ret = -1200;
+ ret = ECPG_INFORMIX_NUM_OVERFLOW;
return ret;
}
numeric *nres = PGTYPESnumeric_new();;
if (nres == NULL)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
if (PGTYPESnumeric_from_decimal(np, nres) != 0)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
ret = PGTYPESnumeric_to_long(nres, lngp);
if (ret == PGTYPES_NUM_OVERFLOW)
- ret = -1200;
+ ret = ECPG_INFORMIX_NUM_OVERFLOW;
return ret;
}
char *tmp = PGTYPESdate_to_asc(d);
if (!tmp)
- return -1210;
+ return ECPG_INFORMIX_DATE_CONVERT;
/* move to user allocated buffer */
strcpy(str, tmp);
date dat = PGTYPESdate_from_asc(str, NULL);
if (errno != PGTYPES_DATE_BAD_DATE && dat == 0)
- return -1218;
+ return ECPG_INFORMIX_BAD_DATE;
*d = dat;
return 0;
switch (errno)
{
case PGTYPES_DATE_ERR_ENOSHORTDATE:
- return -1209;
+ return ECPG_INFORMIX_ENOSHORTDATE;
case PGTYPES_DATE_ERR_EARGS:
case PGTYPES_DATE_ERR_ENOTDMY:
- return -1212;
+ return ECPG_INFORMIX_ENOTDMY;
case PGTYPES_DATE_BAD_DAY:
- return -1204;
+ return ECPG_INFORMIX_BAD_DAY;
case PGTYPES_DATE_BAD_MONTH:
- return -1205;
+ return ECPG_INFORMIX_BAD_MONTH;
default:
- return -1206;
+ return ECPG_INFORMIX_BAD_YEAR;
}
}
return 0;
if (errno == ENOMEM)
- return -1211;
+ return ECPG_INFORMIX_OUT_OF_MEMORY;
- return -1210;
+ return ECPG_INFORMIX_DATE_CONVERT;
}
int
if (**endptr)
{
/* extra characters exist at the end */
- return -1264;
+ return ECPG_INFORMIX_EXTRA_CHARS;
}
/* everything went fine */
#define SQLNOTFOUND 100
+#define ECPG_INFORMIX_NUM_OVERFLOW -1200
+#define ECPG_INFORMIX_NUM_UNDERFLOW -1201
+#define ECPG_INFORMIX_DIVIDE_ZERO -1202
+#define ECPG_INFORMIX_BAD_YEAR -1204
+#define ECPG_INFORMIX_BAD_MONTH -1205
+#define ECPG_INFORMIX_BAD_DAY -1206
+#define ECPG_INFORMIX_ENOSHORTDATE -1209
+#define ECPG_INFORMIX_DATE_CONVERT -1210
+#define ECPG_INFORMIX_OUT_OF_MEMORY -1211
+#define ECPG_INFORMIX_ENOTDMY -1212
+#define ECPG_INFORMIX_BAD_NUMERIC -1213
+#define ECPG_INFORMIX_BAD_EXPONENT -1216
+#define ECPG_INFORMIX_BAD_DATE -1218
+#define ECPG_INFORMIX_EXTRA_CHARS -1264
+
extern int rdatestr(date, char *);
extern void rtoday(date *);
extern int rjulmdy(date, short *);
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.257 2003/09/19 14:13:16 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.258 2003/09/22 13:19:39 meskes Exp $ */
/* Copyright comment */
%{
}
if (insert)
{
- /* add all those input variables that were given earlier */
+ /* 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(&argsinsert, p->variable, p->indicator);
- }
- else
- {
- /* add all those output variables that were given earlier */
- for (p = ptr->argsresult; p; p = p->next)
- add_variable(&argsresult, p->variable, p->indicator);
+ append_variable(&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);
+
return ptr;
}
%}
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);
+ append_variable(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0), &no_indicator);
}
}
;
coutputvariable: CVARIABLE indicator
{ add_variable(&argsresult, find_variable($1), find_variable($2)); }
| CVARIABLE
- { add_variable(&argsresult, find_variable($1), &no_indicator); }
+ { add_variable(&argsresult, find_variable($1), &no_indicator); }
;
argsresult = NULL;
}
-/* Insert a new variable into our request list. */
+/* Insert a new variable into our request list.
+ * 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)
{
value1 = PGTYPESnumeric_new();
PGTYPESnumeric_from_int(1407, value1);
- text = PGTYPESnumeric_to_asc(value1, 0);
+ text = PGTYPESnumeric_to_asc(value1, -1);
printf("long = %s\n", text);
value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
value2 = PGTYPESnumeric_from_asc("10.0", NULL);
res = PGTYPESnumeric_new();
PGTYPESnumeric_add(value1, value2, res);
- text = PGTYPESnumeric_to_asc(res, 0);
+ text = PGTYPESnumeric_to_asc(res, -1);
printf("add = %s\n", text);
PGTYPESnumeric_sub(res, value2, res);
- text = PGTYPESnumeric_to_asc(res, 0);
+ text = PGTYPESnumeric_to_asc(res, -1);
printf("sub = %s\n", text);
PGTYPESnumeric_copy(res, &des);
exec sql select num into :des from test where text = 'test';
PGTYPESnumeric_mul(res, &des, res);
- text = PGTYPESnumeric_to_asc(res, 0);
+ text = PGTYPESnumeric_to_asc(res, -1);
printf("mul = %s\n", text);
value2 = PGTYPESnumeric_from_asc("10000", NULL);
PGTYPESnumeric_div(res, value2, res);
- text = PGTYPESnumeric_to_asc(res, 0);
+ text = PGTYPESnumeric_to_asc(res, -1);
PGTYPESnumeric_to_double(res, &d);
printf("div = %s %e\n", text, d);
$commit;
$insert into test (i, j) values (7, 2);
- printf("%ld: %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
+ printf("INSERT: %ld=%s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
if (sqlca.sqlcode != 0) $rollback;
$insert into test (i, j) values (:i, 1);
$select i from test where j=(select j from test);
- printf("%ld: %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
+ printf("SELECT: %ld=%s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
if (sqlca.sqlcode != 0) $rollback;
$declare c cursor for select * from test where i <= :i;
deccvint(14, &m);
decadd(&j, &m, &n);
$delete from test where i=:n;
- printf("delete: %ld\n", sqlca.sqlcode);
+ printf("DELETE: %ld\n", sqlca.sqlcode);
$select 1 from test where i=14;
printf("Exists: %ld\n", sqlca.sqlcode);