summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-07-16 19:48:16 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-07-16 19:48:16 +0000
commit84e5ce7eb9c193586cca94a3de771c3188fd708e (patch)
tree2992431e1e43cfd5ee03f8d1d691338df0f7f82d
parent44e7a2ae609d0cbae8ae01ebc03c02b96cacb002 (diff)
downloadpostgresql-84e5ce7eb9c193586cca94a3de771c3188fd708e.tar.gz
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.
-rw-r--r--contrib/seg/Makefile10
-rw-r--r--contrib/seg/expected/seg.out14
-rw-r--r--contrib/seg/segparse.y20
3 files changed, 25 insertions, 19 deletions
diff --git a/contrib/seg/Makefile b/contrib/seg/Makefile
index ac9b543d83..34fff5fb8a 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 9abfdc2ecb..ca3fe33103 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 9bd972f2c4..7d785ab2ac 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 <string.h>
-#include <stdlib.h>
+#include "postgres.h"
+
#include <errno.h>
#include <math.h>
+
+#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;
}