@@ -82,7 +82,8 @@ typedef struct NODE
8282
8383typedef struct
8484{
85- char * buf ;
85+ char * buffer ;/* entire string we are scanning */
86+ char * buf ;/* current scan point */
8687int4 state ;
8788int4 count ;
8889/* reverse polish notation in list (for temprorary usage) */
@@ -170,7 +171,8 @@ gettoken_query(QPRS_STATE * state, int4 *val, int4 *lenval, char **strval, int2
170171{
171172ereport (ERROR ,
172173(errcode (ERRCODE_SYNTAX_ERROR ),
173- errmsg ("error at start of operand" )));
174+ errmsg ("error at start of operand in tsearch query: \"%s\"" ,
175+ state -> buffer )));
174176}
175177else if (!t_isspace (state -> buf ))
176178{
@@ -188,7 +190,8 @@ gettoken_query(QPRS_STATE * state, int4 *val, int4 *lenval, char **strval, int2
188190else
189191ereport (ERROR ,
190192(errcode (ERRCODE_SYNTAX_ERROR ),
191- errmsg ("no operand" )));
193+ errmsg ("no operand in tsearch query: \"%s\"" ,
194+ state -> buffer )));
192195}
193196break ;
194197case WAITOPERATOR :
@@ -241,11 +244,13 @@ pushquery(QPRS_STATE * state, int4 type, int4 val, int4 distance, int4 lenval, i
241244if (distance >=MAXSTRPOS )
242245ereport (ERROR ,
243246(errcode (ERRCODE_SYNTAX_ERROR ),
244- errmsg ("value is too big" )));
247+ errmsg ("value is too big in tsearch query: \"%s\"" ,
248+ state -> buffer )));
245249if (lenval >=MAXSTRLEN )
246250ereport (ERROR ,
247251(errcode (ERRCODE_SYNTAX_ERROR ),
248- errmsg ("operand is too long" )));
252+ errmsg ("operand is too long in tsearch query: \"%s\"" ,
253+ state -> buffer )));
249254tmp -> distance = distance ;
250255tmp -> length = lenval ;
251256tmp -> next = state -> str ;
@@ -262,7 +267,8 @@ pushval_asis(QPRS_STATE * state, int type, char *strval, int lenval, int2 weight
262267if (lenval >=MAXSTRLEN )
263268ereport (ERROR ,
264269(errcode (ERRCODE_SYNTAX_ERROR ),
265- errmsg ("word is too long" )));
270+ errmsg ("word is too long in tsearch query: \"%s\"" ,
271+ state -> buffer )));
266272
267273pushquery (state ,type ,crc32_sz (strval ,lenval ),
268274state -> curop - state -> op ,lenval ,weight );
@@ -407,7 +413,8 @@ makepol(QPRS_STATE * state, void (*pushval) (QPRS_STATE *, int, char *, int, int
407413default :
408414ereport (ERROR ,
409415(errcode (ERRCODE_SYNTAX_ERROR ),
410- errmsg ("syntax error" )));
416+ errmsg ("syntax error in tsearch query: \"%s\"" ,
417+ state -> buffer )));
411418return ERR ;
412419
413420}
@@ -621,6 +628,7 @@ static QUERYTYPE *
621628#endif
622629
623630/* init state */
631+ state .buffer = buf ;
624632state .buf = buf ;
625633state .state = (isplain ) ?WAITSINGLEOPERAND :WAITFIRSTOPERAND ;
626634state .count = 0 ;
@@ -644,7 +652,9 @@ static QUERYTYPE *
644652pfree (state .valstate .word );
645653if (!state .num )
646654{
647- elog (NOTICE ,"query doesn't contain lexeme(s)" );
655+ ereport (NOTICE ,
656+ (errmsg ("tsearch query doesn't contain lexeme(s): \"%s\"" ,
657+ state .buffer )));
648658query = (QUERYTYPE * )palloc (HDRSIZEQT );
649659query -> len = HDRSIZEQT ;
650660query -> size = 0 ;