Index: openacs-4/packages/search/sql/postgresql/search-packages-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/sql/postgresql/search-packages-create.sql,v diff -u -N -r1.7 -r1.7.6.1 --- openacs-4/packages/search/sql/postgresql/search-packages-create.sql 30 Mar 2013 18:50:29 -0000 1.7 +++ openacs-4/packages/search/sql/postgresql/search-packages-create.sql 1 Mar 2021 18:20:47 -0000 1.7.6.1 @@ -1,35 +1,47 @@ -- Search Observer Package -- --- @cvs-id $Id$ +-- @cvs-id $Id$ -- -- procedure search_observer__enqueue/2 -- +select define_function_args('search_observer__enqueue','object_id,event'); + CREATE OR REPLACE FUNCTION search_observer__enqueue( p_object_id integer, p_event varchar ) RETURNS integer AS $$ DECLARE BEGIN + -- + -- We see cases, where the object to be removed from the observer + -- queue does not exist anymore. Probably, this is due to some + -- race condition. + -- + if p_event = 'DELETE' then + + IF NOT EXISTS (select 1 from acs_objects where object_id = p_object_id) then + return 0; + end if; + + end if; + insert into search_observer_queue ( - object_id, - event + object_id, + event ) values ( p_object_id, - p_event + p_event ); return 0; END; $$ LANGUAGE plpgsql; -select define_function_args('search_observer__enqueue','object_id,event'); - - -- -- procedure search_observer__dequeue/3 -- @@ -41,8 +53,8 @@ DECLARE BEGIN - delete from search_observer_queue - where object_id = p_object_id + delete from search_observer_queue + where object_id = p_object_id and event = p_event and to_char(event_date,'yyyy-mm-dd hh24:mi:ss.us-tz') = to_char(p_event_date,'yyyy-mm-dd hh24:mi:ss.us-tz'); @@ -52,4 +64,3 @@ $$ LANGUAGE plpgsql; select define_function_args('search_observer__dequeue','object_id,event_date,event'); -