aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2003-03-18 10:46:39 +0000
committerMichael Meskes <meskes@postgresql.org>2003-03-18 10:46:39 +0000
commit6fad73ed455c926e92358c2d9a2288fb8422f975 (patch)
treeac5823666092e5f5c7449e6d7806528d3176ab00 /src
parenta6f00f3939d96fb30efa41d674e32d5f7d57b02d (diff)
downloadpostgresql-6fad73ed455c926e92358c2d9a2288fb8422f975.tar.gz
postgresql-6fad73ed455c926e92358c2d9a2288fb8422f975.zip
Some bugfixes for numerical library.
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/ecpg/ecpglib/execute.c4
-rw-r--r--src/interfaces/ecpg/include/decimal.h5
-rw-r--r--src/interfaces/ecpg/include/pgtypes_error.h3
-rw-r--r--src/interfaces/ecpg/pgtypeslib/numeric.c7
-rw-r--r--src/interfaces/ecpg/preproc/Makefile4
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.c31
-rw-r--r--src/interfaces/ecpg/test/num_test.pgc11
-rw-r--r--src/interfaces/ecpg/test/test1.pgc2
8 files changed, 51 insertions, 16 deletions
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index 4ed4b8fde46..3ff5bf886e7 100644
--- a/src/interfaces/ecpg/ecpglib/execute.c
+++ b/src/interfaces/ecpg/ecpglib/execute.c
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.1 2003/03/16 10:42:53 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.2 2003/03/18 10:46:39 meskes Exp $ */
/*
* The aim is to get a simpler inteface to the database routines.
@@ -861,7 +861,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
}
else
{
- *str = PGTYPESnumeric_ntoa((NumericVar *)(var->value));
+ str = PGTYPESnumeric_ntoa((NumericVar *)(var->value));
slen = strlen (str);
if (!(mallocedval = ECPGalloc(slen + 1, stmt->lineno)))
diff --git a/src/interfaces/ecpg/include/decimal.h b/src/interfaces/ecpg/include/decimal.h
new file mode 100644
index 00000000000..f307207adce
--- /dev/null
+++ b/src/interfaces/ecpg/include/decimal.h
@@ -0,0 +1,5 @@
+#include <pgtypes_numeric.h>
+
+#ifndef dec_t
+#define dec_t NumericVar
+#endif /* dec_t */
diff --git a/src/interfaces/ecpg/include/pgtypes_error.h b/src/interfaces/ecpg/include/pgtypes_error.h
index c04e72e438d..e997b03ae01 100644
--- a/src/interfaces/ecpg/include/pgtypes_error.h
+++ b/src/interfaces/ecpg/include/pgtypes_error.h
@@ -1,3 +1,6 @@
#define PGTYPES_OVERFLOW 201
#define PGTYPES_BAD_NUMERIC 202
#define PGTYPES_DIVIDE_ZERO 203
+
+#define PGTYPES_BAD_DATE 300
+
diff --git a/src/interfaces/ecpg/pgtypeslib/numeric.c b/src/interfaces/ecpg/pgtypeslib/numeric.c
index bd6c950d3fd..03fa42089ae 100644
--- a/src/interfaces/ecpg/pgtypeslib/numeric.c
+++ b/src/interfaces/ecpg/pgtypeslib/numeric.c
@@ -40,6 +40,7 @@ pgtypes_alloc(long size)
return (new);
}
+#if 0
/* ----------
* apply_typmod() -
*
@@ -119,6 +120,7 @@ apply_typmod(NumericVar *var, long typmod)
var->dscale = scale;
return (0);
}
+#endif
/* ----------
* alloc_var() -
@@ -387,7 +389,9 @@ PGTYPESnumeric_aton(char *str, char **endptr)
{
NumericVar *value = (NumericVar *)pgtypes_alloc(sizeof(NumericVar));
int ret;
+#if 0
long typmod = -1;
+#endif
char *realptr;
char **ptr = (endptr != NULL) ? endptr : &realptr;
@@ -398,10 +402,11 @@ PGTYPESnumeric_aton(char *str, char **endptr)
if (ret)
return (NULL);
+#if 0
ret = apply_typmod(value, typmod);
if (ret)
return (NULL);
-
+#endif
return(value);
}
diff --git a/src/interfaces/ecpg/preproc/Makefile b/src/interfaces/ecpg/preproc/Makefile
index 6936d21f339..5941c154fc6 100644
--- a/src/interfaces/ecpg/preproc/Makefile
+++ b/src/interfaces/ecpg/preproc/Makefile
@@ -1,4 +1,4 @@
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.90 2003/02/14 13:17:13 meskes Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.91 2003/03/18 10:46:39 meskes Exp $
subdir = src/interfaces/ecpg/preproc
top_builddir = ../../../..
@@ -18,7 +18,7 @@ override CFLAGS += -Wno-error
endif
OBJS=preproc.o type.o ecpg.o ecpg_keywords.o output.o\
- keywords.o c_keywords.o ../lib/typename.o descriptor.o variable.o
+ keywords.o c_keywords.o ../ecpglib/typename.o descriptor.o variable.o
all: submake-libpgport ecpg
diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c
index 7d267b26577..d1545358213 100644
--- a/src/interfaces/ecpg/preproc/ecpg.c
+++ b/src/interfaces/ecpg/preproc/ecpg.c
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.62 2003/03/16 10:42:54 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.63 2003/03/18 10:46:39 meskes Exp $ */
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
@@ -7,6 +7,7 @@
#include "postgres_fe.h"
#include <unistd.h>
+#include <string.h>
#ifdef HAVE_GETOPT_H
#include <getopt.h>
#endif
@@ -69,10 +70,27 @@ static void
add_preprocessor_define(char *define)
{
struct _defines *pd = defines;
-
+ char *ptr, *define_copy = mm_strdup(define);
+
defines = mm_alloc(sizeof(struct _defines));
- defines->old = strdup(define);
- defines->new = strdup("");
+
+ /* look for = sign */
+ ptr = strchr(define_copy, '=');
+ if (ptr != NULL)
+ {
+ char *tmp;
+
+ /* symbol gets a value */
+ for (tmp=ptr-1; *tmp == ' '; tmp--);
+ tmp[1] = '\0';
+ defines->old = define_copy;
+ defines->new = ptr+1;
+ }
+ else
+ {
+ defines->old = define_copy;
+ defines->new = mm_strdup("");
+ }
defines->pertinent = true;
defines->next = pd;
}
@@ -137,7 +155,10 @@ main(int argc, char *const argv[])
break;
case 'C':
if (strcmp(optarg, "INFORMIX") == 0)
+ {
compat = ECPG_COMPAT_INFORMIX;
+ add_preprocessor_define("dec_t=NumericVar");
+ }
else
{
fprintf(stderr, "Try '%s --help' for more information.\n", argv[0]);
@@ -313,7 +334,7 @@ main(int argc, char *const argv[])
lex_init();
/* we need several includes */
- fprintf(yyout, "/* Processed by ecpg (%d.%d.%d) */\n/* These four include files are added by the preprocessor */\n#include <ecpgtype.h>\n#include <ecpglib.h>\n#include <ecpgerrno.h>\n#include <sqlca.h>\n#include <pgtypes_numeric.h>\n#line 1 \"%s\"\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL, input_filename);
+ fprintf(yyout, "/* Processed by ecpg (%d.%d.%d) */\n/* These four include files are added by the preprocessor */\n#include <ecpgtype.h>\n#include <ecpglib.h>\n#include <ecpgerrno.h>\n#include <sqlca.h>\n#line 1 \"%s\"\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL, input_filename);
/* add some compatibility headers */
if (compat == ECPG_COMPAT_INFORMIX)
diff --git a/src/interfaces/ecpg/test/num_test.pgc b/src/interfaces/ecpg/test/num_test.pgc
index 741ae16751e..f81b81b915c 100644
--- a/src/interfaces/ecpg/test/num_test.pgc
+++ b/src/interfaces/ecpg/test/num_test.pgc
@@ -1,10 +1,11 @@
#include <stdio.h>
+#include <pgtypes_numeric.h>
int
main()
{
char *text="error\n";
- NumericVar *value1, *value2, *res;
+ NumericVar *value1, *value2, *res;
exec sql begin declare section;
decimal(14,7) des = {0, 0, 0, 0, 0, NULL, NULL} ;
exec sql end declare section;
@@ -23,8 +24,8 @@ main()
text = PGTYPESnumeric_ntoa(value1);
printf("long = %s\n", text);
- value1 = PGTYPESnumeric_aton("2369.7", -1);
- value2 = PGTYPESnumeric_aton("10.0", -1);
+ value1 = PGTYPESnumeric_aton("2369.7", NULL);
+ value2 = PGTYPESnumeric_aton("10.0", NULL);
res = PGTYPESnew();
decadd(value1, value2, res);
text = PGTYPESnumeric_ntoa(res);
@@ -37,7 +38,7 @@ main()
PGTYPESnumeric_copy(res, &des);
exec sql insert into test (text, num) values ('test', :des);
- value2 = PGTYPESnumeric_aton("2369.7", -1);
+ value2 = PGTYPESnumeric_aton("2369.7", NULL);
PGTYPESnumeric_mul(value1, value2, res);
exec sql select num into :des from test where text = 'test';
@@ -46,7 +47,7 @@ main()
text = PGTYPESnumeric_ntoa(res);
printf("mul = %s\n", text);
- value2 = PGTYPESnumeric_aton("10000", -1);
+ value2 = PGTYPESnumeric_aton("10000", NULL);
PGTYPESnumeric_div(res, value2, res);
text = PGTYPESnumeric_ntoa(res);
PGTYPESnumeric_ntod(res, &d);
diff --git a/src/interfaces/ecpg/test/test1.pgc b/src/interfaces/ecpg/test/test1.pgc
index 78771d944d5..28c33b49545 100644
--- a/src/interfaces/ecpg/test/test1.pgc
+++ b/src/interfaces/ecpg/test/test1.pgc
@@ -53,7 +53,7 @@ exec sql endif;
char *connection="pm";
int how_many;
exec sql end declare section;
- exec sql var name is string(AMOUNT);
+ exec sql var name is string[AMOUNT];
char msg[128];
FILE *dbgs;
int i,j;