mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Error message editing in contrib (mostly by Joe Conway --- thanks Joe!)
This commit is contained in:
@ -2,8 +2,6 @@
|
||||
|
||||
#include "postgres.h"
|
||||
|
||||
#include "utils/elog.h"
|
||||
|
||||
static char *PARSE_BUFFER;
|
||||
static char *PARSE_BUFFER_PTR;
|
||||
static unsigned int PARSE_BUFFER_SIZE;
|
||||
@ -26,7 +24,10 @@ set_parse_buffer(char *s)
|
||||
PARSE_BUFFER = s;
|
||||
PARSE_BUFFER_SIZE = strlen(s);
|
||||
if (PARSE_BUFFER_SIZE == 0)
|
||||
elog(ERROR, "cube_in: can't parse an empty string");
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_ZERO_LENGTH_CHARACTER_STRING),
|
||||
errmsg("can't parse an empty string")));
|
||||
|
||||
PARSE_BUFFER_PTR = PARSE_BUFFER;
|
||||
SCANNER_POS = 0;
|
||||
}
|
||||
|
@ -11,9 +11,6 @@
|
||||
#include "cubedata.h"
|
||||
#include "buffer.h"
|
||||
|
||||
#include "utils/palloc.h"
|
||||
#include "utils/elog.h"
|
||||
|
||||
#undef yylex /* falure to redefine yylex will result in a call to the */
|
||||
#define yylex cube_yylex /* wrong scanner when running inside the postgres backend */
|
||||
|
||||
@ -48,19 +45,31 @@ box:
|
||||
if ( c != '\0' ) {
|
||||
/* Not at EOF */
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(0) bad cube representation; garbage at or before char %d, ('%c', \\%03o)\n", pos, c, c );
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("garbage at or before char %d, ('%c', \\%03o)",
|
||||
pos, c, c)));
|
||||
YYERROR;
|
||||
}
|
||||
|
||||
dim = delim_count($2, ',') + 1;
|
||||
if ( (delim_count($4, ',') + 1) != dim ) {
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(1) bad cube representation; different point dimensions in (%s) and (%s)\n", $2, $4);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("different point dimensions in (%s) and (%s)",
|
||||
$2, $4)));
|
||||
YYABORT;
|
||||
}
|
||||
if (dim > CUBE_MAX_DIM) {
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(8) bad cube representation; more than %d dimensions\n", CUBE_MAX_DIM);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("more than %d dimensions",
|
||||
CUBE_MAX_DIM)));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
@ -75,7 +84,11 @@ box:
|
||||
|
||||
if ( c != '\0' ) { /* Not at EOF */
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(2) bad cube representation; garbage at or before char %d, ('%c', \\%03o)\n", pos, c, c );
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("garbage at or before char %d, ('%c', \\%03o)",
|
||||
pos, c, c)));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
@ -83,12 +96,20 @@ box:
|
||||
|
||||
if ( (delim_count($3, ',') + 1) != dim ) {
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(3) bad cube representation; different point dimensions in (%s) and (%s)\n", $1, $3);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("different point dimensions in (%s) and (%s)",
|
||||
$1, $3)));
|
||||
YYABORT;
|
||||
}
|
||||
if (dim > CUBE_MAX_DIM) {
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(8) bad cube representation; more than %d dimensions\n", CUBE_MAX_DIM);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("more than %d dimensions",
|
||||
CUBE_MAX_DIM)));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
@ -103,21 +124,33 @@ box:
|
||||
|
||||
if ( c != '\0') { /* Not at EOF */
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(4) bad cube representation; garbage at or before char %d, ('%c', \\%03o)\n", pos, c, c );
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("garbage at or before char %d, ('%c', \\%03o)",
|
||||
pos, c, c)));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
if ( yychar != YYEOF) {
|
||||
/* There's still a lookahead token to be parsed */
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(5) bad cube representation; garbage at or before char %d, ('end of input', \\%03o)\n", pos, c);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("garbage at or before char %d, ('end of input', \\%03o)",
|
||||
pos, c)));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
dim = delim_count($1, ',') + 1;
|
||||
if (dim > CUBE_MAX_DIM) {
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(8) bad cube representation; more than %d dimensions\n", CUBE_MAX_DIM);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("more than %d dimensions",
|
||||
CUBE_MAX_DIM)));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
@ -133,21 +166,33 @@ box:
|
||||
|
||||
if ( c != '\0') { /* Not at EOF */
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(6) bad cube representation; garbage at or before char %d, ('%c', \\%03o)\n", pos, c, c);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("garbage at or before char %d, ('%c', \\%03o)",
|
||||
pos, c, c)));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
if ( yychar != YYEOF) {
|
||||
/* There's still a lookahead token to be parsed */
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(7) bad cube representation; garbage at or before char %d, ('end of input', \\%03o)\n", pos, c);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("garbage at or before char %d, ('end of input', \\%03o)",
|
||||
pos, c)));
|
||||
YYABORT;
|
||||
}
|
||||
|
||||
dim = delim_count($1, ',') + 1;
|
||||
if (dim > CUBE_MAX_DIM) {
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "(8) bad cube representation; more than %d dimensions\n", CUBE_MAX_DIM);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("more than %d dimensions",
|
||||
CUBE_MAX_DIM)));
|
||||
YYABORT;
|
||||
}
|
||||
*((void **)result) = write_point_as_box($1, dim);
|
||||
@ -191,7 +236,7 @@ int cube_yyerror ( char *msg ) {
|
||||
snprintf(
|
||||
buf,
|
||||
256,
|
||||
"%s at or before position %d, character ('%c', \\%03o), input: '%s'\n",
|
||||
"%s at or before position %d, character ('%c', \\%03o), input: '%s'",
|
||||
msg,
|
||||
position,
|
||||
parse_buffer()[position - 1],
|
||||
@ -200,7 +245,11 @@ int cube_yyerror ( char *msg ) {
|
||||
);
|
||||
|
||||
reset_parse_buffer();
|
||||
elog(ERROR, "%s", buf);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("bad cube representation"),
|
||||
errdetail("%s", buf)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -6,8 +6,9 @@
|
||||
-- does not depend on contents of cube.sql.
|
||||
--
|
||||
\set ECHO none
|
||||
psql:cube.sql:10: NOTICE: ProcedureCreate: type cube is not yet defined
|
||||
psql:cube.sql:15: NOTICE: Argument type "cube" is only a shell
|
||||
psql:cube.sql:10: NOTICE: type cube is not yet defined
|
||||
DETAIL: Creating a shell type definition.
|
||||
psql:cube.sql:15: NOTICE: argument type cube is only a shell
|
||||
--
|
||||
-- testing the input and output functions
|
||||
--
|
||||
@ -256,89 +257,89 @@ SELECT '[(0,0,0,0),(1,0,0,0)]'::cube AS cube;
|
||||
|
||||
-- invalid input: parse errors
|
||||
SELECT ''::cube AS cube;
|
||||
ERROR: cube_in: can't parse an empty string
|
||||
ERROR: can't parse an empty string
|
||||
SELECT 'ABC'::cube AS cube;
|
||||
ERROR: syntax error at or before position 1, character ('A', \101), input: 'ABC'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 1, character ('A', \101), input: 'ABC'
|
||||
SELECT '()'::cube AS cube;
|
||||
ERROR: syntax error at or before position 2, character (')', \051), input: '()'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 2, character (')', \051), input: '()'
|
||||
SELECT '[]'::cube AS cube;
|
||||
ERROR: syntax error at or before position 2, character (']', \135), input: '[]'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 2, character (']', \135), input: '[]'
|
||||
SELECT '[()]'::cube AS cube;
|
||||
ERROR: syntax error at or before position 3, character (')', \051), input: '[()]'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 3, character (')', \051), input: '[()]'
|
||||
SELECT '[(1)]'::cube AS cube;
|
||||
ERROR: syntax error at or before position 5, character (']', \135), input: '[(1)]'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 5, character (']', \135), input: '[(1)]'
|
||||
SELECT '[(1),]'::cube AS cube;
|
||||
ERROR: syntax error at or before position 6, character (']', \135), input: '[(1),]'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 6, character (']', \135), input: '[(1),]'
|
||||
SELECT '[(1),2]'::cube AS cube;
|
||||
ERROR: syntax error at or before position 7, character (']', \135), input: '[(1),2]'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 7, character (']', \135), input: '[(1),2]'
|
||||
SELECT '[(1),(2),(3)]'::cube AS cube;
|
||||
ERROR: syntax error at or before position 9, character (',', \054), input: '[(1),(2),(3)]'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 9, character (',', \054), input: '[(1),(2),(3)]'
|
||||
SELECT '1,'::cube AS cube;
|
||||
ERROR: syntax error at or before position 2, character (',', \054), input: '1,'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 2, character (',', \054), input: '1,'
|
||||
SELECT '1,2,'::cube AS cube;
|
||||
ERROR: syntax error at or before position 4, character (',', \054), input: '1,2,'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 4, character (',', \054), input: '1,2,'
|
||||
SELECT '1,,2'::cube AS cube;
|
||||
ERROR: syntax error at or before position 3, character (',', \054), input: '1,,2'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 3, character (',', \054), input: '1,,2'
|
||||
SELECT '(1,)'::cube AS cube;
|
||||
ERROR: syntax error at or before position 4, character (')', \051), input: '(1,)'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 4, character (')', \051), input: '(1,)'
|
||||
SELECT '(1,2,)'::cube AS cube;
|
||||
ERROR: syntax error at or before position 6, character (')', \051), input: '(1,2,)'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 6, character (')', \051), input: '(1,2,)'
|
||||
SELECT '(1,,2)'::cube AS cube;
|
||||
ERROR: syntax error at or before position 4, character (',', \054), input: '(1,,2)'
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: syntax error at or before position 4, character (',', \054), input: '(1,,2)'
|
||||
-- invalid input: semantic errors and trailing garbage
|
||||
SELECT '[(1),(2)],'::cube AS cube; -- 0
|
||||
ERROR: (0) bad cube representation; garbage at or before char 9, (',', \054)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 9, (',', \054)
|
||||
SELECT '[(1,2,3),(2,3)]'::cube AS cube; -- 1
|
||||
ERROR: (1) bad cube representation; different point dimensions in (1,2,3) and (2,3)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: different point dimensions in (1,2,3) and (2,3)
|
||||
SELECT '[(1,2),(1,2,3)]'::cube AS cube; -- 1
|
||||
ERROR: (1) bad cube representation; different point dimensions in (1,2) and (1,2,3)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: different point dimensions in (1,2) and (1,2,3)
|
||||
SELECT '(1),(2),'::cube AS cube; -- 2
|
||||
ERROR: (2) bad cube representation; garbage at or before char 7, (',', \054)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 7, (',', \054)
|
||||
SELECT '(1,2,3),(2,3)'::cube AS cube; -- 3
|
||||
ERROR: (3) bad cube representation; different point dimensions in (1,2,3) and (2,3)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: different point dimensions in (1,2,3) and (2,3)
|
||||
SELECT '(1,2),(1,2,3)'::cube AS cube; -- 3
|
||||
ERROR: (3) bad cube representation; different point dimensions in (1,2) and (1,2,3)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: different point dimensions in (1,2) and (1,2,3)
|
||||
SELECT '(1,2,3)ab'::cube AS cube; -- 4
|
||||
ERROR: (4) bad cube representation; garbage at or before char 8, ('b', \142)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 8, ('b', \142)
|
||||
SELECT '(1,2,3)a'::cube AS cube; -- 5
|
||||
ERROR: (5) bad cube representation; garbage at or before char 8, ('end of input', \000)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 8, ('end of input', \000)
|
||||
SELECT '(1,2)('::cube AS cube; -- 5
|
||||
ERROR: (5) bad cube representation; garbage at or before char 6, ('end of input', \000)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 6, ('end of input', \000)
|
||||
SELECT '1,2ab'::cube AS cube; -- 6
|
||||
ERROR: (6) bad cube representation; garbage at or before char 4, ('b', \142)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 4, ('b', \142)
|
||||
SELECT '1 e7'::cube AS cube; -- 6
|
||||
ERROR: (6) bad cube representation; garbage at or before char 3, ('7', \067)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 3, ('7', \067)
|
||||
SELECT '1,2a'::cube AS cube; -- 7
|
||||
ERROR: (7) bad cube representation; garbage at or before char 4, ('end of input', \000)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 4, ('end of input', \000)
|
||||
SELECT '1..2'::cube AS cube; -- 7
|
||||
ERROR: (7) bad cube representation; garbage at or before char 4, ('end of input', \000)
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: garbage at or before char 4, ('end of input', \000)
|
||||
--
|
||||
-- Testing building cubes from float8 values
|
||||
--
|
||||
@ -397,11 +398,11 @@ SELECT '(0)'::text::cube;
|
||||
-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
|
||||
--
|
||||
select '(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'::cube;
|
||||
ERROR: (8) bad cube representation; more than 100 dimensions
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: more than 100 dimensions
|
||||
select '(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'::cube;
|
||||
ERROR: (8) bad cube representation; more than 100 dimensions
|
||||
|
||||
ERROR: bad cube representation
|
||||
DETAIL: more than 100 dimensions
|
||||
--
|
||||
-- testing the operators
|
||||
--
|
||||
|
Reference in New Issue
Block a user