--
-- packages/notes/sql/notes-create.sql
--
-- @author rhs@mit.edu
-- @creation-date 2000-10-22
-- @cvs-id $Id: notes-create.sql,v 1.1 2001/05/03 18:23:35 vinodk Exp $
--

create function inline_0 ()
returns integer as '
begin
    PERFORM acs_object_type__create_type (
	''note'',
	''Note'',
	''Notes'',
	''acs_object'',
	''notes'',
	''note_id'',
	null,
	''f'',
	null,
	null
	);

    return 0;
end;' language 'plpgsql';

select inline_0 ();

drop function inline_0 ();

--begin
--  acs_object_type.create_type (
--    supertype => 'acs_object',
--    object_type => 'note',
--    pretty_name => 'Note',
--    pretty_plural => 'Notes',
--    table_name => 'NOTES',
--    id_column => 'NOTE_ID'
--  );
--end;
--/
--show errors;

create function inline_1 ()
returns integer as '
begin
    PERFORM acs_attribute__create_attribute (
	  ''note'',
	  ''TITLE'',
	  ''string'',
	  ''Title'',
	  ''Titles'',
	  null,
	  null,
	  null,
	  1,
	  1,
	  null,
	  ''type_specific'',
	  ''f''
	);

    PERFORM acs_attribute__create_attribute (
	  ''note'',
	  ''BODY'',
	  ''string'',
	  ''Body'',
	  ''Bodies'',
	  null,
	  null,
	  null,
	  1,
	  1,
	  null,
	  ''type_specific'',
	  ''f''
	);

    return 0;
end;' language 'plpgsql';

select inline_1 ();

drop function inline_1 ();

--declare
--  attr_id acs_attributes.attribute_id%TYPE;
--
--begin
--  attr_id := acs_attribute.create_attribute (
--    object_type => 'note',
--    attribute_name => 'TITLE',
--    pretty_name => 'Title',
--    pretty_plural => 'Titles',
--    datatype => 'string'
--  );
--
--  attr_id := acs_attribute.create_attribute (
--    object_type => 'note',
--    attribute_name => 'BODY',
--    pretty_name => 'Body',
--    pretty_plural => 'Bodies',
--    datatype => 'string'
--  );
--end;
--/
--show errors;

create table notes (
    note_id    integer references acs_objects(object_id) primary key,
    owner_id   integer references users(user_id),
    title      varchar(255) not null,
    body       varchar(1024)
);

create function note__new (integer,integer,varchar,varchar,varchar,timestamp,integer,varchar,integer)
returns integer as '
declare
  new__note_id					alias for $1;       -- default null
  new__owner_id					alias for $2;       -- default null
  new__title					alias for $3;
  new__body						alias for $4;
  new__object_type				alias for $5;       -- default ''note''
  new__creation_date			alias for $6;		-- default now()
  new__creation_user			alias for $7;		-- default null
  new__creation_ip				alias for $8;		-- default null
  new__context_id				alias for $9;		-- default null
  v_note_id						notes.note_id%TYPE;
begin
	v_note_id := acs_object__new (
		new__note_id,
		new__object_type,
		new__creation_date,
		new__creation_user,
		new__creation_ip,
		new__context_id
	);

	insert into notes
	  (note_id, owner_id, title, body)
	values
	  (v_note_id, new__owner_id, new__title, new__body);

	PERFORM acs_permission__grant_permission(
          v_note_id,
          new__owner_id,
          ''admin''
    );

	return v_note_id;

end;' language 'plpgsql';

create function note__delete (integer)
returns integer as '
declare
  delete__note_id				alias for $1;
begin
    delete from acs_permissions
		   where object_id = delete__note_id;

	delete from notes
		   where note_id = delete__note_id;

	raise NOTICE ''Deleting note...'';
	PERFORM acs_object__delete(delete__note_id);

	return 0;

end;' language 'plpgsql';

--create or replace package note
--as
--    function new (
--		note_id             in notes.note_id%TYPE default null,
--		owner_id            in notes.owner_id%TYPE default null,
--		title               in notes.title%TYPE,
--		body                in notes.body%TYPE,
--		object_type         in acs_object_types.object_type%TYPE default 'note',
--		creation_date       in acs_objects.creation_date%TYPE default sysdate,
--		creation_user       in acs_objects.creation_user%TYPE default null,
--		creation_ip         in acs_objects.creation_ip%TYPE default null,
--		context_id          in acs_objects.context_id%TYPE default null
--    ) return notes.note_id%TYPE;
--
--    procedure delete (
--		note_id				in notes.note_id%TYPE
--    );
--end note;
--/
--show errors
--
--create or replace package body note
--as
--    function new (
--        note_id             in notes.note_id%TYPE default null,
--        owner_id            in notes.owner_id%TYPE default null,
--        title               in notes.title%TYPE,
--        body                in notes.body%TYPE,
--        object_type         in acs_object_types.object_type%TYPE default 'note',
--        creation_date       in acs_objects.creation_date%TYPE default sysdate,
--        creation_user       in acs_objects.creation_user%TYPE default null,
--        creation_ip         in acs_objects.creation_ip%TYPE default null,
--        context_id          in acs_objects.context_id%TYPE default null
--    ) return notes.note_id%TYPE
--    is
--        v_note_id integer;
--     begin
--        v_note_id := acs_object.new (
--            object_id => note_id,
--            object_type => object_type,
--            creation_date => creation_date,
--            creation_user => creation_user,
--            creation_ip => creation_ip,
--            context_id => context_id
--         );
--
--         insert into notes
--          (note_id, owner_id, title, body)
--         values
--          (v_note_id, owner_id, title, body);
--
--         return v_note_id;
--     end new;
--
--     procedure delete (
--         note_id      in notes.note_id%TYPE
--     )
--     is
--     begin
--         delete from notes
--         where note_id = note.delete.note_id;
--
--         acs_object.delete(note_id);
--     end delete;
--
--end note;
--/
--show errors;

