From 84e5ce7eb9c193586cca94a3de771c3188fd708e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 16 Jul 2005 19:48:16 +0000 Subject: [PATCH] Back-patch into 7.2 branch the 7.3 changes that made contrib/seg error messages reasonably independent of the bison version used to build segparse.c. Needed to get this branch passing on buildfarm. --- contrib/seg/Makefile | 10 ++++++++-- contrib/seg/expected/seg.out | 14 +++++++------- contrib/seg/segparse.y | 20 ++++++++++---------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/contrib/seg/Makefile b/contrib/seg/Makefile index ac9b543d83a..34fff5fb8ae 100644 --- a/contrib/seg/Makefile +++ b/contrib/seg/Makefile @@ -1,4 +1,4 @@ -# $Header: /cvsroot/pgsql/contrib/seg/Makefile,v 1.6 2001/11/16 16:32:33 petere Exp $ +# $Header: /cvsroot/pgsql/contrib/seg/Makefile,v 1.6.2.1 2005/07/16 19:48:15 tgl Exp $ subdir = contrib/seg top_builddir = ../.. @@ -13,11 +13,17 @@ REGRESS = seg segparse.c: segparse.h ; +# The sed hack is so that we can get the same error messages with +# bison 1.875 and later as we did with earlier bisons. Eventually, +# I suppose, we should re-standardize on "syntax error" --- in which +# case flip the sed translation, but don't remove it. + segparse.h: segparse.y ifdef YACC $(YACC) -d $(YFLAGS) -p seg_yy $< - mv -f y.tab.c segparse.c + sed -e 's/"syntax error/"parse error/' < y.tab.c > segparse.c mv -f y.tab.h segparse.h + rm -f y.tab.c else @$(missing) bison $< $@ endif diff --git a/contrib/seg/expected/seg.out b/contrib/seg/expected/seg.out index 9abfdc2ecb8..ca3fe331039 100644 --- a/contrib/seg/expected/seg.out +++ b/contrib/seg/expected/seg.out @@ -393,25 +393,25 @@ SELECT '100(+-)1'::seg AS seg; SELECT ''::seg AS seg; ERROR: seg_in: can't parse an empty string SELECT 'ABC'::seg AS seg; -ERROR: parse error, expecting `FLOAT' or `RANGE' or `EXTENSION' at or near position 1, character ('A', \101), input: 'ABC' +ERROR: parse error at or near position 1, character ('A', \101), input: 'ABC' SELECT '1ABC'::seg AS seg; -ERROR: expecting end of input at or near position 2, character ('A', \101), input: '1ABC' +ERROR: parse error at or near position 2, character ('A', \101), input: '1ABC' SELECT '1.'::seg AS seg; -ERROR: expecting end of input at or near position 2, character ('.', \056), input: '1.' +ERROR: parse error at or near position 2, character ('.', \056), input: '1.' SELECT '1.....'::seg AS seg; -ERROR: expecting end of input at or near position 6, character ('.', \056), input: '1.....' +ERROR: parse error at or near position 6, character ('.', \056), input: '1.....' SELECT '.1'::seg AS seg; -ERROR: parse error, expecting `FLOAT' or `RANGE' or `EXTENSION' at or near position 2, character ('1', \061), input: '.1' +ERROR: parse error at or near position 2, character ('1', \061), input: '.1' SELECT '1..2.'::seg AS seg; -ERROR: expecting end of input at or near position 5, character ('.', \056), input: '1..2.' +ERROR: parse error at or near position 5, character ('.', \056), input: '1..2.' SELECT '1 e7'::seg AS seg; -ERROR: expecting end of input at or near position 3, character ('e', \145), input: '1 e7' +ERROR: parse error at or near position 3, character ('e', \145), input: '1 e7' SELECT '1e700'::seg AS seg; ERROR: numeric value 1e700 unrepresentable diff --git a/contrib/seg/segparse.y b/contrib/seg/segparse.y index 9bd972f2c4d..7d785ab2ac2 100644 --- a/contrib/seg/segparse.y +++ b/contrib/seg/segparse.y @@ -1,17 +1,16 @@ %{ -#define YYERROR_VERBOSE #define YYPARSE_PARAM result /* need this to pass a pointer (void *) to yyparse */ -#include -#include +#include "postgres.h" + #include #include + +#include "utils/elog.h" + #include "segdata.h" #include "buffer.h" -#include "postgres.h" -#include "utils/elog.h" - #ifdef __CYGWIN__ #define HUGE HUGE_VAL #endif /* __CYGWIN__ */ @@ -147,9 +146,9 @@ float seg_atof ( char *value ) { sscanf(value, "%f", &result); if ( errno ) { - sprintf(buf, "numeric value %s unrepresentable", value); + snprintf(buf, 256, "numeric value %s unrepresentable", value); reset_parse_buffer(); - elog(ERROR, buf); + elog(ERROR, "%s", buf); } return result; @@ -168,8 +167,9 @@ int seg_yyerror ( char *msg ) { position = parse_buffer_pos() > parse_buffer_size() ? parse_buffer_pos() - 1 : parse_buffer_pos(); - sprintf( + snprintf( buf, + 256, "%s at or near position %d, character ('%c', \\%03o), input: '%s'\n", msg, position, @@ -179,7 +179,7 @@ int seg_yyerror ( char *msg ) { ); reset_parse_buffer(); - elog(ERROR, buf); + elog(ERROR, "%s", buf); return 0; } -- 2.39.5