Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
4394c1b0
Commit
4394c1b0
authored
Nov 13, 2007
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Resurrect the code for the rewrite(ARRAY[...]) aggregate function,
and put it into contrib/tsearch2 compatibility module.
parent
abd183e4
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
253 additions
and
28 deletions
+253
-28
contrib/tsearch2/expected/tsearch2.out
contrib/tsearch2/expected/tsearch2.out
+90
-0
contrib/tsearch2/sql/tsearch2.sql
contrib/tsearch2/sql/tsearch2.sql
+17
-1
contrib/tsearch2/tsearch2.c
contrib/tsearch2/tsearch2.c
+137
-20
contrib/tsearch2/tsearch2.sql.in
contrib/tsearch2/tsearch2.sql.in
+4
-4
src/backend/utils/adt/tsquery_rewrite.c
src/backend/utils/adt/tsquery_rewrite.c
+2
-2
src/include/tsearch/ts_utils.h
src/include/tsearch/ts_utils.h
+3
-1
No files found.
contrib/tsearch2/expected/tsearch2.out
View file @
4394c1b0
...
@@ -472,6 +472,24 @@ select rewrite('bar & new & qq & foo & york', 'select keyword, sample from test
...
@@ -472,6 +472,24 @@ select rewrite('bar & new & qq & foo & york', 'select keyword, sample from test
'citi'
&
'foo'
&
( 'bar' | 'qq' )
&
( 'nyc' | ( 'big'
&
'appl' | 'new'
&
'york' ) )
'citi'
&
'foo'
&
( 'bar' | 'qq' )
&
( 'nyc' | ( 'big'
&
'appl' | 'new'
&
'york' ) )
(1 row)
(1 row)
select rewrite( ARRAY['moscow', keyword, sample] ) from test_tsquery;
rewrite
---------------------
'moskva' | 'moscow'
(1 row)
select rewrite( ARRAY['moscow
&
hotel', keyword, sample] ) from test_tsquery;
rewrite
-----------------------------------
( 'moskva' | 'moscow' )
&
'hotel'
(1 row)
select rewrite( ARRAY['bar
&
new
&
qq
&
foo
&
york', keyword, sample] ) from test_tsquery;
rewrite
-------------------------------------------------------------------------------------
'citi'
&
'foo'
&
( 'bar' | 'qq' )
&
( 'nyc' | ( 'big'
&
'appl' | 'new'
&
'york' ) )
(1 row)
select keyword from test_tsquery where keyword @> 'new';
select keyword from test_tsquery where keyword @> 'new';
keyword
keyword
----------------
----------------
...
@@ -495,6 +513,42 @@ select keyword from test_tsquery where keyword <@ 'moscow';
...
@@ -495,6 +513,42 @@ select keyword from test_tsquery where keyword <@ 'moscow';
'
moscow
'
'
moscow
'
(
1
row
)
(
1
row
)
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
('
english
',
'
moscow
')
as
query
where
keyword
<@
query
;
rewrite
---------------------
'
moskva
'
|
'
moscow
'
(
1
row
)
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
('
english
',
'
moscow
&
hotel
')
as
query
where
keyword
<@
query
;
rewrite
-----------------------------------
(
'
moskva
'
|
'
moscow
'
)
&
'
hotel
'
(
1
row
)
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
('
english
',
'
bar
&
new
&
qq
&
foo
&
york
')
as
query
where
keyword
<@
query
;
rewrite
-------------------------------------------------------------------------------------
'
citi
'
&
'
foo
'
&
(
'
bar
'
|
'
qq
'
)
&
(
'
nyc
'
|
(
'
big
'
&
'
appl
'
|
'
new
'
&
'
york
'
)
)
(
1
row
)
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
('
english
',
'
moscow
')
as
query
where
query
@
>
keyword;
rewrite
---------------------
'moskva' | 'moscow'
(1 row)
select rewrite( ARRAY[query, keyword, sample] ) from test_tsquery, to_tsquery('english', 'moscow
&
hotel') as query where query @> keyword;
rewrite
-----------------------------------
( 'moskva' | 'moscow' )
&
'hotel'
(1 row)
select rewrite( ARRAY[query, keyword, sample] ) from test_tsquery, to_tsquery('english', 'bar
&
new
&
qq
&
foo
&
york') as query where query @> keyword;
rewrite
-------------------------------------------------------------------------------------
'citi'
&
'foo'
&
( 'bar' | 'qq' )
&
( 'nyc' | ( 'big'
&
'appl' | 'new'
&
'york' ) )
(1 row)
create index qq on test_tsquery using gist (keyword gist_tp_tsquery_ops);
create index qq on test_tsquery using gist (keyword gist_tp_tsquery_ops);
set enable_seqscan='off';
set enable_seqscan='off';
select keyword from test_tsquery where keyword @> 'new';
select keyword from test_tsquery where keyword @> 'new';
...
@@ -520,6 +574,42 @@ select keyword from test_tsquery where keyword <@ 'moscow';
...
@@ -520,6 +574,42 @@ select keyword from test_tsquery where keyword <@ 'moscow';
'
moscow
'
'
moscow
'
(
1
row
)
(
1
row
)
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
('
english
',
'
moscow
')
as
query
where
keyword
<@
query
;
rewrite
---------------------
'
moskva
'
|
'
moscow
'
(
1
row
)
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
('
english
',
'
moscow
&
hotel
')
as
query
where
keyword
<@
query
;
rewrite
-----------------------------------
(
'
moskva
'
|
'
moscow
'
)
&
'
hotel
'
(
1
row
)
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
('
english
',
'
bar
&
new
&
qq
&
foo
&
york
')
as
query
where
keyword
<@
query
;
rewrite
-------------------------------------------------------------------------------------
'
citi
'
&
'
foo
'
&
(
'
bar
'
|
'
qq
'
)
&
(
'
nyc
'
|
(
'
big
'
&
'
appl
'
|
'
new
'
&
'
york
'
)
)
(
1
row
)
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
('
english
',
'
moscow
')
as
query
where
query
@
>
keyword;
rewrite
---------------------
'moskva' | 'moscow'
(1 row)
select rewrite( ARRAY[query, keyword, sample] ) from test_tsquery, to_tsquery('english', 'moscow
&
hotel') as query where query @> keyword;
rewrite
-----------------------------------
( 'moskva' | 'moscow' )
&
'hotel'
(1 row)
select rewrite( ARRAY[query, keyword, sample] ) from test_tsquery, to_tsquery('english', 'bar
&
new
&
qq
&
foo
&
york') as query where query @> keyword;
rewrite
-------------------------------------------------------------------------------------
'citi'
&
'foo'
&
( 'bar' | 'qq' )
&
( 'nyc' | ( 'big'
&
'appl' | 'new'
&
'york' ) )
(1 row)
set enable_seqscan='on';
set enable_seqscan='on';
select lexize('simple', 'ASD56 hsdkf');
select lexize('simple', 'ASD56 hsdkf');
lexize
lexize
...
...
contrib/tsearch2/sql/tsearch2.sql
View file @
4394c1b0
...
@@ -116,10 +116,21 @@ select rewrite('moscow', 'select keyword, sample from test_tsquery'::text );
...
@@ -116,10 +116,21 @@ select rewrite('moscow', 'select keyword, sample from test_tsquery'::text );
select
rewrite
(
'moscow & hotel'
,
'select keyword, sample from test_tsquery'
::
text
);
select
rewrite
(
'moscow & hotel'
,
'select keyword, sample from test_tsquery'
::
text
);
select
rewrite
(
'bar & new & qq & foo & york'
,
'select keyword, sample from test_tsquery'
::
text
);
select
rewrite
(
'bar & new & qq & foo & york'
,
'select keyword, sample from test_tsquery'
::
text
);
select
rewrite
(
ARRAY
[
'moscow'
,
keyword
,
sample
]
)
from
test_tsquery
;
select
rewrite
(
ARRAY
[
'moscow & hotel'
,
keyword
,
sample
]
)
from
test_tsquery
;
select
rewrite
(
ARRAY
[
'bar & new & qq & foo & york'
,
keyword
,
sample
]
)
from
test_tsquery
;
select
keyword
from
test_tsquery
where
keyword
@>
'new'
;
select
keyword
from
test_tsquery
where
keyword
@>
'new'
;
select
keyword
from
test_tsquery
where
keyword
@>
'moscow'
;
select
keyword
from
test_tsquery
where
keyword
@>
'moscow'
;
select
keyword
from
test_tsquery
where
keyword
<@
'new'
;
select
keyword
from
test_tsquery
where
keyword
<@
'new'
;
select
keyword
from
test_tsquery
where
keyword
<@
'moscow'
;
select
keyword
from
test_tsquery
where
keyword
<@
'moscow'
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'moscow'
)
as
query
where
keyword
<@
query
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'moscow & hotel'
)
as
query
where
keyword
<@
query
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'bar & new & qq & foo & york'
)
as
query
where
keyword
<@
query
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'moscow'
)
as
query
where
query
@>
keyword
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'moscow & hotel'
)
as
query
where
query
@>
keyword
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'bar & new & qq & foo & york'
)
as
query
where
query
@>
keyword
;
create
index
qq
on
test_tsquery
using
gist
(
keyword
gist_tp_tsquery_ops
);
create
index
qq
on
test_tsquery
using
gist
(
keyword
gist_tp_tsquery_ops
);
set
enable_seqscan
=
'off'
;
set
enable_seqscan
=
'off'
;
...
@@ -128,7 +139,12 @@ select keyword from test_tsquery where keyword @> 'new';
...
@@ -128,7 +139,12 @@ select keyword from test_tsquery where keyword @> 'new';
select
keyword
from
test_tsquery
where
keyword
@>
'moscow'
;
select
keyword
from
test_tsquery
where
keyword
@>
'moscow'
;
select
keyword
from
test_tsquery
where
keyword
<@
'new'
;
select
keyword
from
test_tsquery
where
keyword
<@
'new'
;
select
keyword
from
test_tsquery
where
keyword
<@
'moscow'
;
select
keyword
from
test_tsquery
where
keyword
<@
'moscow'
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'moscow'
)
as
query
where
keyword
<@
query
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'moscow & hotel'
)
as
query
where
keyword
<@
query
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'bar & new & qq & foo & york'
)
as
query
where
keyword
<@
query
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'moscow'
)
as
query
where
query
@>
keyword
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'moscow & hotel'
)
as
query
where
query
@>
keyword
;
select
rewrite
(
ARRAY
[
query
,
keyword
,
sample
]
)
from
test_tsquery
,
to_tsquery
(
'english'
,
'bar & new & qq & foo & york'
)
as
query
where
query
@>
keyword
;
set
enable_seqscan
=
'on'
;
set
enable_seqscan
=
'on'
;
...
...
contrib/tsearch2/tsearch2.c
View file @
4394c1b0
...
@@ -7,13 +7,14 @@
...
@@ -7,13 +7,14 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.c,v 1.
1 2007/11/13 21:02:29
tgl Exp $
* $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.c,v 1.
2 2007/11/13 22:14:50
tgl Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
#include "postgres.h"
#include "postgres.h"
#include "catalog/namespace.h"
#include "catalog/namespace.h"
#include "catalog/pg_type.h"
#include "commands/trigger.h"
#include "commands/trigger.h"
#include "fmgr.h"
#include "fmgr.h"
#include "tsearch/ts_utils.h"
#include "tsearch/ts_utils.h"
...
@@ -77,13 +78,14 @@ Datum tsa_set_curprs_byname(PG_FUNCTION_ARGS);
...
@@ -77,13 +78,14 @@ Datum tsa_set_curprs_byname(PG_FUNCTION_ARGS);
Datum
tsa_parse_current
(
PG_FUNCTION_ARGS
);
Datum
tsa_parse_current
(
PG_FUNCTION_ARGS
);
Datum
tsa_set_curcfg
(
PG_FUNCTION_ARGS
);
Datum
tsa_set_curcfg
(
PG_FUNCTION_ARGS
);
Datum
tsa_set_curcfg_byname
(
PG_FUNCTION_ARGS
);
Datum
tsa_set_curcfg_byname
(
PG_FUNCTION_ARGS
);
Datum
tsa_show_curcfg
(
PG_FUNCTION_ARGS
);
Datum
tsa_to_tsvector_name
(
PG_FUNCTION_ARGS
);
Datum
tsa_to_tsvector_name
(
PG_FUNCTION_ARGS
);
Datum
tsa_to_tsquery_name
(
PG_FUNCTION_ARGS
);
Datum
tsa_to_tsquery_name
(
PG_FUNCTION_ARGS
);
Datum
tsa_plainto_tsquery_name
(
PG_FUNCTION_ARGS
);
Datum
tsa_plainto_tsquery_name
(
PG_FUNCTION_ARGS
);
Datum
tsa_headline_byname
(
PG_FUNCTION_ARGS
);
Datum
tsa_headline_byname
(
PG_FUNCTION_ARGS
);
Datum
tsa_ts_stat
(
PG_FUNCTION_ARGS
);
Datum
tsa_ts_stat
(
PG_FUNCTION_ARGS
);
Datum
tsa_tsearch2
(
PG_FUNCTION_ARGS
);
Datum
tsa_tsearch2
(
PG_FUNCTION_ARGS
);
Datum
tsa_rewrite_accum
(
PG_FUNCTION_ARGS
);
Datum
tsa_rewrite_finish
(
PG_FUNCTION_ARGS
);
PG_FUNCTION_INFO_V1
(
tsa_lexize_byname
);
PG_FUNCTION_INFO_V1
(
tsa_lexize_byname
);
PG_FUNCTION_INFO_V1
(
tsa_lexize_bycurrent
);
PG_FUNCTION_INFO_V1
(
tsa_lexize_bycurrent
);
...
@@ -95,13 +97,14 @@ PG_FUNCTION_INFO_V1(tsa_set_curprs_byname);
...
@@ -95,13 +97,14 @@ PG_FUNCTION_INFO_V1(tsa_set_curprs_byname);
PG_FUNCTION_INFO_V1
(
tsa_parse_current
);
PG_FUNCTION_INFO_V1
(
tsa_parse_current
);
PG_FUNCTION_INFO_V1
(
tsa_set_curcfg
);
PG_FUNCTION_INFO_V1
(
tsa_set_curcfg
);
PG_FUNCTION_INFO_V1
(
tsa_set_curcfg_byname
);
PG_FUNCTION_INFO_V1
(
tsa_set_curcfg_byname
);
PG_FUNCTION_INFO_V1
(
tsa_show_curcfg
);
PG_FUNCTION_INFO_V1
(
tsa_to_tsvector_name
);
PG_FUNCTION_INFO_V1
(
tsa_to_tsvector_name
);
PG_FUNCTION_INFO_V1
(
tsa_to_tsquery_name
);
PG_FUNCTION_INFO_V1
(
tsa_to_tsquery_name
);
PG_FUNCTION_INFO_V1
(
tsa_plainto_tsquery_name
);
PG_FUNCTION_INFO_V1
(
tsa_plainto_tsquery_name
);
PG_FUNCTION_INFO_V1
(
tsa_headline_byname
);
PG_FUNCTION_INFO_V1
(
tsa_headline_byname
);
PG_FUNCTION_INFO_V1
(
tsa_ts_stat
);
PG_FUNCTION_INFO_V1
(
tsa_ts_stat
);
PG_FUNCTION_INFO_V1
(
tsa_tsearch2
);
PG_FUNCTION_INFO_V1
(
tsa_tsearch2
);
PG_FUNCTION_INFO_V1
(
tsa_rewrite_accum
);
PG_FUNCTION_INFO_V1
(
tsa_rewrite_finish
);
/*
/*
...
@@ -138,9 +141,6 @@ UNSUPPORTED_FUNCTION(tsa_prsd_headline);
...
@@ -138,9 +141,6 @@ UNSUPPORTED_FUNCTION(tsa_prsd_headline);
UNSUPPORTED_FUNCTION
(
tsa_reset_tsearch
);
UNSUPPORTED_FUNCTION
(
tsa_reset_tsearch
);
UNSUPPORTED_FUNCTION
(
tsa_get_covers
);
UNSUPPORTED_FUNCTION
(
tsa_get_covers
);
UNSUPPORTED_FUNCTION
(
tsa_rewrite_accum
);
UNSUPPORTED_FUNCTION
(
tsa_rewrite_finish
);
/*
/*
* list of redefined functions
* list of redefined functions
...
@@ -275,6 +275,7 @@ tsa_set_curcfg_byname(PG_FUNCTION_ARGS)
...
@@ -275,6 +275,7 @@ tsa_set_curcfg_byname(PG_FUNCTION_ARGS)
char
*
name
;
char
*
name
;
name
=
TextPGetCString
(
arg0
);
name
=
TextPGetCString
(
arg0
);
set_config_option
(
"default_text_search_config"
,
name
,
set_config_option
(
"default_text_search_config"
,
name
,
PGC_USERSET
,
PGC_USERSET
,
PGC_S_SESSION
,
PGC_S_SESSION
,
...
@@ -284,20 +285,6 @@ tsa_set_curcfg_byname(PG_FUNCTION_ARGS)
...
@@ -284,20 +285,6 @@ tsa_set_curcfg_byname(PG_FUNCTION_ARGS)
PG_RETURN_VOID
();
PG_RETURN_VOID
();
}
}
/* show_curcfg() */
Datum
tsa_show_curcfg
(
PG_FUNCTION_ARGS
)
{
char
*
cfgname
;
Oid
config_oid
;
cfgname
=
GetConfigOptionByName
(
"default_text_search_config"
,
NULL
);
config_oid
=
DatumGetObjectId
(
DirectFunctionCall1
(
regconfigin
,
CStringGetDatum
(
cfgname
)));
PG_RETURN_OID
(
config_oid
);
}
/* to_tsvector(text, text) */
/* to_tsvector(text, text) */
Datum
Datum
tsa_to_tsvector_name
(
PG_FUNCTION_ARGS
)
tsa_to_tsvector_name
(
PG_FUNCTION_ARGS
)
...
@@ -411,6 +398,136 @@ tsa_tsearch2(PG_FUNCTION_ARGS)
...
@@ -411,6 +398,136 @@ tsa_tsearch2(PG_FUNCTION_ARGS)
return
tsvector_update_trigger_byid
(
fcinfo
);
return
tsvector_update_trigger_byid
(
fcinfo
);
}
}
Datum
tsa_rewrite_accum
(
PG_FUNCTION_ARGS
)
{
TSQuery
acc
;
ArrayType
*
qa
;
TSQuery
q
;
QTNode
*
qex
=
NULL
,
*
subs
=
NULL
,
*
acctree
=
NULL
;
bool
isfind
=
false
;
Datum
*
elemsp
;
int
nelemsp
;
MemoryContext
aggcontext
;
MemoryContext
oldcontext
;
aggcontext
=
((
AggState
*
)
fcinfo
->
context
)
->
aggcontext
;
if
(
PG_ARGISNULL
(
0
)
||
PG_GETARG_POINTER
(
0
)
==
NULL
)
{
acc
=
(
TSQuery
)
MemoryContextAlloc
(
aggcontext
,
HDRSIZETQ
);
SET_VARSIZE
(
acc
,
HDRSIZETQ
);
acc
->
size
=
0
;
}
else
acc
=
PG_GETARG_TSQUERY
(
0
);
if
(
PG_ARGISNULL
(
1
)
||
PG_GETARG_POINTER
(
1
)
==
NULL
)
PG_RETURN_TSQUERY
(
acc
);
else
qa
=
PG_GETARG_ARRAYTYPE_P_COPY
(
1
);
if
(
ARR_NDIM
(
qa
)
!=
1
)
elog
(
ERROR
,
"array must be one-dimensional, not %d dimensions"
,
ARR_NDIM
(
qa
));
if
(
ArrayGetNItems
(
ARR_NDIM
(
qa
),
ARR_DIMS
(
qa
))
!=
3
)
elog
(
ERROR
,
"array must have three elements"
);
if
(
ARR_ELEMTYPE
(
qa
)
!=
TSQUERYOID
)
elog
(
ERROR
,
"array must contain tsquery elements"
);
deconstruct_array
(
qa
,
TSQUERYOID
,
-
1
,
false
,
'i'
,
&
elemsp
,
NULL
,
&
nelemsp
);
q
=
DatumGetTSQuery
(
elemsp
[
0
]);
if
(
q
->
size
==
0
)
{
pfree
(
elemsp
);
PG_RETURN_POINTER
(
acc
);
}
if
(
!
acc
->
size
)
{
if
(
VARSIZE
(
acc
)
>
HDRSIZETQ
)
{
pfree
(
elemsp
);
PG_RETURN_POINTER
(
acc
);
}
else
acctree
=
QT2QTN
(
GETQUERY
(
q
),
GETOPERAND
(
q
));
}
else
acctree
=
QT2QTN
(
GETQUERY
(
acc
),
GETOPERAND
(
acc
));
QTNTernary
(
acctree
);
QTNSort
(
acctree
);
q
=
DatumGetTSQuery
(
elemsp
[
1
]);
if
(
q
->
size
==
0
)
{
pfree
(
elemsp
);
PG_RETURN_POINTER
(
acc
);
}
qex
=
QT2QTN
(
GETQUERY
(
q
),
GETOPERAND
(
q
));
QTNTernary
(
qex
);
QTNSort
(
qex
);
q
=
DatumGetTSQuery
(
elemsp
[
2
]);
if
(
q
->
size
)
subs
=
QT2QTN
(
GETQUERY
(
q
),
GETOPERAND
(
q
));
acctree
=
findsubquery
(
acctree
,
qex
,
subs
,
&
isfind
);
if
(
isfind
||
!
acc
->
size
)
{
/* pfree( acc ); do not pfree(p), because nodeAgg.c will */
if
(
acctree
)
{
QTNBinary
(
acctree
);
oldcontext
=
MemoryContextSwitchTo
(
aggcontext
);
acc
=
QTN2QT
(
acctree
);
MemoryContextSwitchTo
(
oldcontext
);
}
else
{
acc
=
(
TSQuery
)
MemoryContextAlloc
(
aggcontext
,
HDRSIZETQ
);
SET_VARSIZE
(
acc
,
HDRSIZETQ
);
acc
->
size
=
0
;
}
}
pfree
(
elemsp
);
QTNFree
(
qex
);
QTNFree
(
subs
);
QTNFree
(
acctree
);
PG_RETURN_TSQUERY
(
acc
);
}
Datum
tsa_rewrite_finish
(
PG_FUNCTION_ARGS
)
{
TSQuery
acc
=
PG_GETARG_TSQUERY
(
0
);
TSQuery
rewrited
;
if
(
acc
==
NULL
||
PG_ARGISNULL
(
0
)
||
acc
->
size
==
0
)
{
rewrited
=
(
TSQuery
)
palloc
(
HDRSIZETQ
);
SET_VARSIZE
(
rewrited
,
HDRSIZETQ
);
rewrited
->
size
=
0
;
}
else
{
rewrited
=
(
TSQuery
)
palloc
(
VARSIZE
(
acc
));
memcpy
(
rewrited
,
acc
,
VARSIZE
(
acc
));
pfree
(
acc
);
}
PG_RETURN_POINTER
(
rewrited
);
}
/*
/*
* Get Oid of current dictionary
* Get Oid of current dictionary
*/
*/
...
...
contrib/tsearch2/tsearch2.sql.in
View file @
4394c1b0
/* $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.sql.in,v 1.
1 2007/11/13 21:02:29
tgl Exp $ */
/* $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.sql.in,v 1.
2 2007/11/13 22:14:50
tgl Exp $ */
-- Adjust this setting to control where the objects get created.
-- Adjust this setting to control where the objects get created.
SET search_path = public;
SET search_path = public;
...
@@ -206,9 +206,9 @@ CREATE FUNCTION set_curcfg(text)
...
@@ -206,9 +206,9 @@ CREATE FUNCTION set_curcfg(text)
CREATE FUNCTION show_curcfg()
CREATE FUNCTION show_curcfg()
RETURNS oid
RETURNS oid
as 'MODULE_PATHNAME', 'tsa_show_curcf
g'
AS 'get_current_ts_confi
g'
LANGUAGE
C
LANGUAGE
INTERNAL
RETURNS NULL ON NULL INPUT;
RETURNS NULL ON NULL INPUT
STABLE
;
CREATE FUNCTION length(tsvector)
CREATE FUNCTION length(tsvector)
RETURNS int4
RETURNS int4
...
...
src/backend/utils/adt/tsquery_rewrite.c
View file @
4394c1b0
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_rewrite.c,v 1.
7 2007/10/24 03:30:03
tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_rewrite.c,v 1.
8 2007/11/13 22:14:50
tgl Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -233,7 +233,7 @@ dropvoidsubtree(QTNode * root)
...
@@ -233,7 +233,7 @@ dropvoidsubtree(QTNode * root)
return
root
;
return
root
;
}
}
static
QTNode
*
QTNode
*
findsubquery
(
QTNode
*
root
,
QTNode
*
ex
,
QTNode
*
subs
,
bool
*
isfind
)
findsubquery
(
QTNode
*
root
,
QTNode
*
ex
,
QTNode
*
subs
,
bool
*
isfind
)
{
{
bool
DidFind
=
false
;
bool
DidFind
=
false
;
...
...
src/include/tsearch/ts_utils.h
View file @
4394c1b0
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
*
*
* Copyright (c) 1998-2007, PostgreSQL Global Development Group
* Copyright (c) 1998-2007, PostgreSQL Global Development Group
*
*
* $PostgreSQL: pgsql/src/include/tsearch/ts_utils.h,v 1.
7 2007/10/23 01:44:39
tgl Exp $
* $PostgreSQL: pgsql/src/include/tsearch/ts_utils.h,v 1.
8 2007/11/13 22:14:50
tgl Exp $
*
*
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*/
*/
...
@@ -193,6 +193,8 @@ extern QTNode *QTNCopy(QTNode *in);
...
@@ -193,6 +193,8 @@ extern QTNode *QTNCopy(QTNode *in);
extern
void
QTNClearFlags
(
QTNode
*
in
,
uint32
flags
);
extern
void
QTNClearFlags
(
QTNode
*
in
,
uint32
flags
);
extern
bool
QTNEq
(
QTNode
*
a
,
QTNode
*
b
);
extern
bool
QTNEq
(
QTNode
*
a
,
QTNode
*
b
);
extern
TSQuerySign
makeTSQuerySign
(
TSQuery
a
);
extern
TSQuerySign
makeTSQuerySign
(
TSQuery
a
);
extern
QTNode
*
findsubquery
(
QTNode
*
root
,
QTNode
*
ex
,
QTNode
*
subs
,
bool
*
isfind
);
/*
/*
* TSQuery GiST support
* TSQuery GiST support
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment