Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8a5592d

Browse files
committed
Remove option to change parser of an existing text search configuration.
This prevents needing to do complex and poorly-defined updates of themapping table if the new parser has different token types than the old.Per discussion.
1 parent40c1d7c commit8a5592d

File tree

5 files changed

+33
-139
lines changed

5 files changed

+33
-139
lines changed

‎doc/src/sgml/ref/alter_tsconfig.sgml

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/ref/alter_tsconfig.sgml,v 1.1 2007/08/21 21:08:47 tgl Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/ref/alter_tsconfig.sgml,v 1.2 2007/08/22 05:13:50 tgl Exp $
33
PostgreSQL documentation
44
-->
55

@@ -20,9 +20,6 @@ PostgreSQL documentation
2020

2121
<refsynopsisdiv>
2222
<synopsis>
23-
ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> (
24-
PARSER = <replaceable class="parameter">parser_name</replaceable>
25-
)
2623
ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable>
2724
ADD MAPPING FOR <replaceable class="parameter">token_type</replaceable> [, ... ] WITH <replaceable class="parameter">dictionary_name</replaceable> [, ... ]
2825
ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable>
@@ -43,8 +40,8 @@ ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> OWNER TO <replac
4340

4441
<para>
4542
<command>ALTER TEXT SEARCH CONFIGURATION</command> changes the definition of
46-
a text search configuration. You canchange which parser it uses,modify
47-
itsmapping from token types to dictionaries,
43+
a text search configuration. You can modify
44+
itsmappings from token types to dictionaries,
4845
or change the configuration's name or owner.
4946
</para>
5047

@@ -68,15 +65,6 @@ ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> OWNER TO <replac
6865
</listitem>
6966
</varlistentry>
7067

71-
<varlistentry>
72-
<term><replaceable class="parameter">parser_name</replaceable></term>
73-
<listitem>
74-
<para>
75-
The name of a new text search parser to use for this configuration.
76-
</para>
77-
</listitem>
78-
</varlistentry>
79-
8068
<varlistentry>
8169
<term><replaceable class="parameter">token_type</replaceable></term>
8270
<listitem>
@@ -154,19 +142,7 @@ ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> OWNER TO <replac
154142
</para>
155143

156144
</refsect1>
157-
158-
<refsect1>
159-
<title>Notes</title>
160145

161-
<para>
162-
While changing the text search parser used by a configuration is allowed,
163-
this will only work nicely if old and new parsers use the same set of
164-
token types. It is advisable to drop the mappings for any incompatible
165-
token types before changing parsers.
166-
</para>
167-
168-
</refsect1>
169-
170146
<refsect1>
171147
<title>Examples</title>
172148

‎doc/src/sgml/ref/create_tsconfig.sgml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!--
2-
$PostgreSQL: pgsql/doc/src/sgml/ref/create_tsconfig.sgml,v 1.1 2007/08/21 21:08:47 tgl Exp $
2+
$PostgreSQL: pgsql/doc/src/sgml/ref/create_tsconfig.sgml,v 1.2 2007/08/22 05:13:50 tgl Exp $
33
PostgreSQL documentation
44
-->
55

@@ -98,10 +98,9 @@ CREATE TEXT SEARCH CONFIGURATION <replaceable class="parameter">name</replaceabl
9898
<title>Notes</title>
9999

100100
<para>
101-
It is allowed to specify both <literal>PARSER</> and <literal>COPY</>,
102-
resulting in the specified parser being used with whatever mappings
103-
are in the source configuration. This is generally inadvisable,
104-
unless you know that both parsers involved use the same token type set.
101+
The <literal>PARSER</> and <literal>COPY</> options are mutually
102+
exclusive, because when an existing configuration is copied, its
103+
parser selection is copied too.
105104
</para>
106105

107106
</refsect1>

‎src/backend/commands/tsearchcmds.c

Lines changed: 23 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*
1111
* IDENTIFICATION
12-
* $PostgreSQL: pgsql/src/backend/commands/tsearchcmds.c,v 1.3 2007/08/2201:39:44 tgl Exp $
12+
* $PostgreSQL: pgsql/src/backend/commands/tsearchcmds.c,v 1.4 2007/08/2205:13:50 tgl Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -46,12 +46,10 @@
4646
#include"utils/syscache.h"
4747

4848

49-
staticHeapTupleUpdateTSConfiguration(AlterTSConfigurationStmt*stmt,
50-
HeapTupletup);
5149
staticvoidMakeConfigurationMapping(AlterTSConfigurationStmt*stmt,
52-
HeapTupletup);
50+
HeapTupletup,RelationrelMap);
5351
staticvoidDropConfigurationMapping(AlterTSConfigurationStmt*stmt,
54-
HeapTupletup);
52+
HeapTupletup,RelationrelMap);
5553

5654

5755
/* --------------------- TS Parser commands ------------------------ */
@@ -1265,7 +1263,6 @@ DefineTSConfiguration(List *names, List *parameters)
12651263
Oidnamespaceoid;
12661264
char*cfgname;
12671265
NameDatacname;
1268-
List*sourceName=NIL;
12691266
OidsourceOid=InvalidOid;
12701267
OidprsOid=InvalidOid;
12711268
OidcfgOid;
@@ -1290,23 +1287,26 @@ DefineTSConfiguration(List *names, List *parameters)
12901287
if (pg_strcasecmp(defel->defname,"parser")==0)
12911288
prsOid=TSParserGetPrsid(defGetQualifiedName(defel), false);
12921289
elseif (pg_strcasecmp(defel->defname,"copy")==0)
1293-
sourceName=defGetQualifiedName(defel);
1290+
sourceOid=TSConfigGetCfgid(defGetQualifiedName(defel), false);
12941291
else
12951292
ereport(ERROR,
12961293
(errcode(ERRCODE_SYNTAX_ERROR),
12971294
errmsg("text search configuration parameter \"%s\" not recognized",
12981295
defel->defname)));
12991296
}
13001297

1298+
if (OidIsValid(sourceOid)&&OidIsValid(prsOid))
1299+
ereport(ERROR,
1300+
(errcode(ERRCODE_SYNTAX_ERROR),
1301+
errmsg("cannot specify both PARSER and COPY options")));
1302+
13011303
/*
13021304
* Look up source config if given.
13031305
*/
1304-
if (sourceName)
1306+
if (OidIsValid(sourceOid))
13051307
{
13061308
Form_pg_ts_configcfg;
13071309

1308-
sourceOid=TSConfigGetCfgid(sourceName, false);
1309-
13101310
tup=SearchSysCache(TSCONFIGOID,
13111311
ObjectIdGetDatum(sourceOid),
13121312
0,0,0);
@@ -1316,9 +1316,8 @@ DefineTSConfiguration(List *names, List *parameters)
13161316

13171317
cfg= (Form_pg_ts_config)GETSTRUCT(tup);
13181318

1319-
/* Use source's parser if no other was specified */
1320-
if (!OidIsValid(prsOid))
1321-
prsOid=cfg->cfgparser;
1319+
/* use source's parser */
1320+
prsOid=cfg->cfgparser;
13221321

13231322
ReleaseSysCache(tup);
13241323
}
@@ -1626,8 +1625,7 @@ void
16261625
AlterTSConfiguration(AlterTSConfigurationStmt*stmt)
16271626
{
16281627
HeapTupletup;
1629-
HeapTuplenewtup;
1630-
RelationmapRel;
1628+
RelationrelMap;
16311629

16321630
/* Find the configuration */
16331631
tup=GetTSConfigTuple(stmt->cfgname);
@@ -1642,84 +1640,22 @@ AlterTSConfiguration(AlterTSConfigurationStmt *stmt)
16421640
aclcheck_error(ACLCHECK_NOT_OWNER,ACL_KIND_TSCONFIGURATION,
16431641
NameListToString(stmt->cfgname));
16441642

1645-
/* Update fields of config tuple? */
1646-
if (stmt->options)
1647-
newtup=UpdateTSConfiguration(stmt,tup);
1648-
else
1649-
newtup=tup;
1643+
relMap=heap_open(TSConfigMapRelationId,RowExclusiveLock);
16501644

1651-
/* Add or drop mappings? */
1645+
/* Add or drop mappings */
16521646
if (stmt->dicts)
1653-
MakeConfigurationMapping(stmt,newtup);
1647+
MakeConfigurationMapping(stmt,tup,relMap);
16541648
elseif (stmt->tokentype)
1655-
DropConfigurationMapping(stmt,newtup);
1656-
1657-
/*
1658-
* Even if we aren't changing mappings, there could already be some,
1659-
* so makeConfigurationDependencies always has to look.
1660-
*/
1661-
mapRel=heap_open(TSConfigMapRelationId,AccessShareLock);
1649+
DropConfigurationMapping(stmt,tup,relMap);
16621650

16631651
/* Update dependencies */
1664-
makeConfigurationDependencies(newtup, true,mapRel);
1652+
makeConfigurationDependencies(tup, true,relMap);
16651653

1666-
heap_close(mapRel,AccessShareLock);
1654+
heap_close(relMap,RowExclusiveLock);
16671655

16681656
ReleaseSysCache(tup);
16691657
}
16701658

1671-
/*
1672-
* ALTER TEXT SEARCH CONFIGURATION - update fields of pg_ts_config tuple
1673-
*/
1674-
staticHeapTuple
1675-
UpdateTSConfiguration(AlterTSConfigurationStmt*stmt,HeapTupletup)
1676-
{
1677-
RelationcfgRel;
1678-
ListCell*pl;
1679-
Datumrepl_val[Natts_pg_ts_config];
1680-
charrepl_null[Natts_pg_ts_config];
1681-
charrepl_repl[Natts_pg_ts_config];
1682-
HeapTuplenewtup;
1683-
1684-
memset(repl_val,0,sizeof(repl_val));
1685-
memset(repl_null,' ',sizeof(repl_null));
1686-
memset(repl_repl,' ',sizeof(repl_repl));
1687-
1688-
cfgRel=heap_open(TSConfigRelationId,RowExclusiveLock);
1689-
1690-
foreach(pl,stmt->options)
1691-
{
1692-
DefElem*defel= (DefElem*)lfirst(pl);
1693-
1694-
if (pg_strcasecmp(defel->defname,"parser")==0)
1695-
{
1696-
OidnewPrs;
1697-
1698-
newPrs=TSParserGetPrsid(defGetQualifiedName(defel), false);
1699-
repl_val[Anum_pg_ts_config_cfgparser-1]=ObjectIdGetDatum(newPrs);
1700-
repl_repl[Anum_pg_ts_config_cfgparser-1]='r';
1701-
}
1702-
else
1703-
ereport(ERROR,
1704-
(errcode(ERRCODE_SYNTAX_ERROR),
1705-
errmsg("text search configuration parameter \"%s\" not recognized",
1706-
defel->defname)));
1707-
}
1708-
1709-
newtup=heap_modifytuple(tup,RelationGetDescr(cfgRel),
1710-
repl_val,repl_null,repl_repl);
1711-
1712-
simple_heap_update(cfgRel,&newtup->t_self,newtup);
1713-
1714-
CatalogUpdateIndexes(cfgRel,newtup);
1715-
1716-
heap_close(cfgRel,RowExclusiveLock);
1717-
1718-
returnnewtup;
1719-
}
1720-
1721-
/*------------------- TS Configuration mapping stuff ----------------*/
1722-
17231659
/*
17241660
* Translate a list of token type names to an array of token type numbers
17251661
*/
@@ -1780,10 +1716,10 @@ getTokenTypes(Oid prsId, List *tokennames)
17801716
* ALTER TEXT SEARCH CONFIGURATION ADD/ALTER MAPPING
17811717
*/
17821718
staticvoid
1783-
MakeConfigurationMapping(AlterTSConfigurationStmt*stmt,HeapTupletup)
1719+
MakeConfigurationMapping(AlterTSConfigurationStmt*stmt,
1720+
HeapTupletup,RelationrelMap)
17841721
{
17851722
OidcfgId=HeapTupleGetOid(tup);
1786-
RelationrelMap;
17871723
ScanKeyDataskey[2];
17881724
SysScanDescscan;
17891725
HeapTuplemaptup;
@@ -1801,8 +1737,6 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt, HeapTuple tup)
18011737
tokens=getTokenTypes(prsId,stmt->tokentype);
18021738
ntoken=list_length(stmt->tokentype);
18031739

1804-
relMap=heap_open(TSConfigMapRelationId,RowExclusiveLock);
1805-
18061740
if (stmt->override)
18071741
{
18081742
/*
@@ -1938,18 +1872,16 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt, HeapTuple tup)
19381872
}
19391873
}
19401874
}
1941-
1942-
heap_close(relMap,RowExclusiveLock);
19431875
}
19441876

19451877
/*
19461878
* ALTER TEXT SEARCH CONFIGURATION DROP MAPPING
19471879
*/
19481880
staticvoid
1949-
DropConfigurationMapping(AlterTSConfigurationStmt*stmt,HeapTupletup)
1881+
DropConfigurationMapping(AlterTSConfigurationStmt*stmt,
1882+
HeapTupletup,RelationrelMap)
19501883
{
19511884
OidcfgId=HeapTupleGetOid(tup);
1952-
RelationrelMap;
19531885
ScanKeyDataskey[2];
19541886
SysScanDescscan;
19551887
HeapTuplemaptup;
@@ -1964,8 +1896,6 @@ DropConfigurationMapping(AlterTSConfigurationStmt *stmt, HeapTuple tup)
19641896
tokens=getTokenTypes(prsId,stmt->tokentype);
19651897
ntoken=list_length(stmt->tokentype);
19661898

1967-
relMap=heap_open(TSConfigMapRelationId,RowExclusiveLock);
1968-
19691899
i=0;
19701900
foreach(c,stmt->tokentype)
19711901
{
@@ -2011,8 +1941,6 @@ DropConfigurationMapping(AlterTSConfigurationStmt *stmt, HeapTuple tup)
20111941

20121942
i++;
20131943
}
2014-
2015-
heap_close(relMap,RowExclusiveLock);
20161944
}
20171945

20181946

‎src/backend/parser/gram.y

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.599 2007/08/21 15:13:42 tgl Exp $
14+
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.600 2007/08/22 05:13:50 tgl Exp $
1515
*
1616
* HISTORY
1717
* AUTHORDATEMAJOR EVENT
@@ -5523,14 +5523,7 @@ AlterTSDictionaryStmt:
55235523
;
55245524

55255525
AlterTSConfigurationStmt:
5526-
ALTER TEXT_P SEARCH CONFIGURATION any_name definition
5527-
{
5528-
AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
5529-
n->cfgname =$5;
5530-
n->options =$6;
5531-
$$ = (Node *)n;
5532-
}
5533-
| ALTER TEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list WITH any_name_list
5526+
ALTER TEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list WITH any_name_list
55345527
{
55355528
AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
55365529
n->cfgname =$5;

‎src/include/nodes/parsenodes.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.351 2007/08/21 01:11:28 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.352 2007/08/22 05:13:50 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -2054,10 +2054,8 @@ typedef struct AlterTSConfigurationStmt
20542054
{
20552055
NodeTagtype;
20562056
List*cfgname;/* qualified name (list of Value strings) */
2057-
List*options;/* List of DefElem nodes */
20582057

20592058
/*
2060-
* These fields are used for ADD/ALTER/DROP MAPPING variants.
20612059
* dicts will be non-NIL if ADD/ALTER MAPPING was specified.
20622060
* If dicts is NIL, but tokentype isn't, DROP MAPPING was specified.
20632061
*/

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp