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');
