diff options
author | Michael Meskes <meskes@postgresql.org> | 2003-03-18 10:46:39 +0000 |
---|---|---|
committer | Michael Meskes <meskes@postgresql.org> | 2003-03-18 10:46:39 +0000 |
commit | 6fad73ed455c926e92358c2d9a2288fb8422f975 (patch) | |
tree | ac5823666092e5f5c7449e6d7806528d3176ab00 /src | |
parent | a6f00f3939d96fb30efa41d674e32d5f7d57b02d (diff) | |
download | postgresql-6fad73ed455c926e92358c2d9a2288fb8422f975.tar.gz postgresql-6fad73ed455c926e92358c2d9a2288fb8422f975.zip |
Some bugfixes for numerical library.
Diffstat (limited to 'src')
-rw-r--r-- | src/interfaces/ecpg/ecpglib/execute.c | 4 | ||||
-rw-r--r-- | src/interfaces/ecpg/include/decimal.h | 5 | ||||
-rw-r--r-- | src/interfaces/ecpg/include/pgtypes_error.h | 3 | ||||
-rw-r--r-- | src/interfaces/ecpg/pgtypeslib/numeric.c | 7 | ||||
-rw-r--r-- | src/interfaces/ecpg/preproc/Makefile | 4 | ||||
-rw-r--r-- | src/interfaces/ecpg/preproc/ecpg.c | 31 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/num_test.pgc | 11 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/test1.pgc | 2 |
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; |