diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2009-01-28 18:31:32 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2009-01-28 18:31:32 +0000 |
commit | 3ca7eddbb7c4803729d385a0c9535d8a972ee03f (patch) | |
tree | cd7e1783baf24c6fcf1f16e8e6ba71939cad7a6c | |
parent | 61fd2c51d86c10499c6c1a910c821e9c28bcff48 (diff) | |
download | postgresql-3ca7eddbb7c4803729d385a0c9535d8a972ee03f.tar.gz postgresql-3ca7eddbb7c4803729d385a0c9535d8a972ee03f.zip |
Fix bug with multiple evaluation of tsearch2 compatibility trigger, trigger
data should be restored.
Backpatch only for 8.3 because previous versions haven't such layer.
-rw-r--r-- | contrib/tsearch2/tsearch2.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/contrib/tsearch2/tsearch2.c b/contrib/tsearch2/tsearch2.c index ec68d3fdae7..2544bc24c10 100644 --- a/contrib/tsearch2/tsearch2.c +++ b/contrib/tsearch2/tsearch2.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.c,v 1.8 2009/01/01 17:23:32 momjian Exp $ + * $PostgreSQL: pgsql/contrib/tsearch2/tsearch2.c,v 1.9 2009/01/28 18:31:32 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -367,8 +367,10 @@ tsa_tsearch2(PG_FUNCTION_ARGS) { TriggerData *trigdata; Trigger *trigger; - char **tgargs; + char **tgargs, + **tgargs_old; int i; + Datum res; /* Check call context */ if (!CALLED_AS_TRIGGER(fcinfo)) /* internal error */ @@ -388,10 +390,20 @@ tsa_tsearch2(PG_FUNCTION_ARGS) tgargs[1] = pstrdup(GetConfigOptionByName("default_text_search_config", NULL)); + tgargs_old = trigger->tgargs; trigger->tgargs = tgargs; trigger->tgnargs++; - return tsvector_update_trigger_byid(fcinfo); + res = tsvector_update_trigger_byid(fcinfo); + + /* restore old trigger data */ + trigger->tgargs = tgargs_old; + trigger->tgnargs--; + + pfree(tgargs[1]); + pfree(tgargs); + + return res; } |