Index: openacs-4/packages/views/sql/postgresql/views-procs.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/views/sql/postgresql/views-procs.sql,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/views/sql/postgresql/views-procs.sql 20 May 2004 13:01:30 -0000 1.1 +++ openacs-4/packages/views/sql/postgresql/views-procs.sql 23 Jul 2007 05:25:09 -0000 1.2 @@ -38,3 +38,30 @@ select define_function_args('views__record_view','object_id,viewer_id'); +create or replace function views_by_type__record_view (integer, integer, varchar) returns integer as ' +declare + p_object_id alias for $1; + p_viewer_id alias for $2; + p_type alias for $3; + v_views views.views%TYPE; +begin + select views into v_views from views_by_type where object_id = p_object_id and viewer_id = p_viewer_id and type = p_type; + + if v_views is null then + INSERT into views_by_type(object_id,viewer_id,type) + VALUES (p_object_id, p_viewer_id,p_type); + v_views := 0; + else + UPDATE views_by_type + SET views = views + 1, last_viewed = now(), type = p_type + WHERE object_id = p_object_id + and viewer_id = p_viewer_id + and type = p_type; + end if; + + return v_views + 1; +end;' language 'plpgsql'; + +comment on function views_by_type__record_view(integer, integer, varchar) is 'update the view by type count of object_id for viewer viewer_id, returns view count'; + +select define_function_args('views_by_type__record_view','object_id,viewer_id,type');