Use '' rather than \' for literal single quotes in strings in
/contrib/tsearch2. Teodor Sigaev
This commit is contained in:
parent
4b636e35a5
commit
0c4f2894f9
contrib/tsearch2
@ -59,25 +59,25 @@ SELECT '''1 2'''::tsvector;
|
|||||||
SELECT E'''1 \\''2'''::tsvector;
|
SELECT E'''1 \\''2'''::tsvector;
|
||||||
tsvector
|
tsvector
|
||||||
----------
|
----------
|
||||||
'1 \'2'
|
'1 ''2'
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT E'''1 \\''2''3'::tsvector;
|
SELECT E'''1 \\''2''3'::tsvector;
|
||||||
tsvector
|
tsvector
|
||||||
-------------
|
-------------
|
||||||
'3' '1 \'2'
|
'3' '1 ''2'
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT E'''1 \\''2'' 3'::tsvector;
|
SELECT E'''1 \\''2'' 3'::tsvector;
|
||||||
tsvector
|
tsvector
|
||||||
-------------
|
-------------
|
||||||
'3' '1 \'2'
|
'3' '1 ''2'
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT E'''1 \\''2'' '' 3'' 4 '::tsvector;
|
SELECT E'''1 \\''2'' '' 3'' 4 '::tsvector;
|
||||||
tsvector
|
tsvector
|
||||||
------------------
|
------------------
|
||||||
'4' ' 3' '1 \'2'
|
'4' ' 3' '1 ''2'
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
select '''w'':4A,3B,2C,1D,5 a:8';
|
select '''w'':4A,3B,2C,1D,5 a:8';
|
||||||
@ -138,7 +138,7 @@ SELECT '''1 2'''::tsquery;
|
|||||||
SELECT E'''1 \\''2'''::tsquery;
|
SELECT E'''1 \\''2'''::tsquery;
|
||||||
tsquery
|
tsquery
|
||||||
---------
|
---------
|
||||||
'1 \'2'
|
'1 ''2'
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT '!1'::tsquery;
|
SELECT '!1'::tsquery;
|
||||||
@ -336,7 +336,7 @@ SELECT '1&(2&(4&(5|!6)))'::tsquery;
|
|||||||
SELECT E'1&(''2''&('' 4''&(\\|5 | ''6 \\'' !|&'')))'::tsquery;
|
SELECT E'1&(''2''&('' 4''&(\\|5 | ''6 \\'' !|&'')))'::tsquery;
|
||||||
tsquery
|
tsquery
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
'1' & '2' & ' 4' & ( '|5' | '6 \' !|&' )
|
'1' & '2' & ' 4' & ( '|5' | '6 '' !|&' )
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT '''the wether'':dc & '' sKies '':BC & a:d b:a';
|
SELECT '''the wether'':dc & '' sKies '':BC & a:d b:a';
|
||||||
|
@ -748,7 +748,7 @@ infix(INFIX * in, bool first)
|
|||||||
{
|
{
|
||||||
if ( t_iseq(op, '\'') )
|
if ( t_iseq(op, '\'') )
|
||||||
{
|
{
|
||||||
*(in->cur) = '\\';
|
*(in->cur) = '\'';
|
||||||
in->cur++;
|
in->cur++;
|
||||||
}
|
}
|
||||||
COPYCHAR(in->cur,op);
|
COPYCHAR(in->cur,op);
|
||||||
|
@ -171,6 +171,7 @@ uniqueentry(WordEntryIN * a, int4 l, char *buf, int4 *outbuflen)
|
|||||||
#define WAITPOSINFO 5
|
#define WAITPOSINFO 5
|
||||||
#define INPOSINFO 6
|
#define INPOSINFO 6
|
||||||
#define WAITPOSDELIM 7
|
#define WAITPOSDELIM 7
|
||||||
|
#define WAITCHARCMPLX 8
|
||||||
|
|
||||||
#define RESIZEPRSBUF \
|
#define RESIZEPRSBUF \
|
||||||
do { \
|
do { \
|
||||||
@ -270,21 +271,8 @@ gettoken_tsvector(TI_IN_STATE * state)
|
|||||||
}
|
}
|
||||||
else if (state->state == WAITENDCMPLX)
|
else if (state->state == WAITENDCMPLX)
|
||||||
{
|
{
|
||||||
if ( t_iseq(state->prsbuf, '\'') )
|
if ( t_iseq(state->prsbuf, '\'') ) {
|
||||||
{
|
state->state = WAITCHARCMPLX;
|
||||||
RESIZEPRSBUF;
|
|
||||||
*(state->curpos) = '\0';
|
|
||||||
if (state->curpos == state->word)
|
|
||||||
ereport(ERROR,
|
|
||||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
|
||||||
errmsg("syntax error")));
|
|
||||||
if (state->oprisdelim)
|
|
||||||
{
|
|
||||||
state->prsbuf+=pg_mblen(state->prsbuf);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
state->state = WAITPOSINFO;
|
|
||||||
}
|
}
|
||||||
else if ( t_iseq(state->prsbuf, '\\') )
|
else if ( t_iseq(state->prsbuf, '\\') )
|
||||||
{
|
{
|
||||||
@ -302,6 +290,31 @@ gettoken_tsvector(TI_IN_STATE * state)
|
|||||||
state->curpos+=pg_mblen(state->prsbuf);
|
state->curpos+=pg_mblen(state->prsbuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (state->state == WAITCHARCMPLX)
|
||||||
|
{
|
||||||
|
if ( t_iseq(state->prsbuf, '\'') )
|
||||||
|
{
|
||||||
|
RESIZEPRSBUF;
|
||||||
|
COPYCHAR(state->curpos, state->prsbuf);
|
||||||
|
state->curpos+=pg_mblen(state->prsbuf);
|
||||||
|
state->state = WAITENDCMPLX;
|
||||||
|
} else {
|
||||||
|
RESIZEPRSBUF;
|
||||||
|
*(state->curpos) = '\0';
|
||||||
|
if (state->curpos == state->word)
|
||||||
|
ereport(ERROR,
|
||||||
|
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||||
|
errmsg("syntax error")));
|
||||||
|
if (state->oprisdelim)
|
||||||
|
{
|
||||||
|
/* state->prsbuf+=pg_mblen(state->prsbuf); */
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
state->state = WAITPOSINFO;
|
||||||
|
continue; /* recheck current character */
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (state->state == WAITPOSINFO)
|
else if (state->state == WAITPOSINFO)
|
||||||
{
|
{
|
||||||
if ( t_iseq(state->prsbuf, ':') )
|
if ( t_iseq(state->prsbuf, ':') )
|
||||||
@ -385,6 +398,8 @@ gettoken_tsvector(TI_IN_STATE * state)
|
|||||||
else
|
else
|
||||||
/* internal error */
|
/* internal error */
|
||||||
elog(ERROR, "internal error");
|
elog(ERROR, "internal error");
|
||||||
|
|
||||||
|
/* get next char */
|
||||||
state->prsbuf+=pg_mblen(state->prsbuf);
|
state->prsbuf+=pg_mblen(state->prsbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -529,7 +544,7 @@ tsvector_out(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
outbuf = (char *) repalloc((void *) outbuf, ++lenbuf);
|
outbuf = (char *) repalloc((void *) outbuf, ++lenbuf);
|
||||||
curout = outbuf + pos;
|
curout = outbuf + pos;
|
||||||
*curout++ = '\\';
|
*curout++ = '\'';
|
||||||
}
|
}
|
||||||
while(len--)
|
while(len--)
|
||||||
*curout++ = *curin++;
|
*curout++ = *curin++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user