select define_function_args('content_type__create_type','content_type,supertype;content_revision,pretty_name,pretty_plural,table_name,id_column,name_method');
create or replace function content_type__create_type (varchar,varchar,varchar,varchar,varchar,varchar,varchar)
returns integer as '
declare
create_type__content_type alias for $1;
create_type__supertype alias for $2; -- default ''content_revision''
create_type__pretty_name alias for $3;
create_type__pretty_plural alias for $4;
create_type__table_name alias for $5;
create_type__id_column alias for $6; -- default ''XXX''
create_type__name_method alias for $7; -- default null
v_temp_p boolean;
v_supertype_table acs_object_types.table_name%TYPE;
begin
if (create_type__supertype <> ''content_revision'')
and (create_type__content_type <> ''content_revision'') then
select count(*) > 0 into v_temp_p
from acs_object_type_supertype_map
where object_type = create_type__supertype
and ancestor_type = ''content_revision'';
if not v_temp_p then
raise EXCEPTION ''-20000: supertype % must be a subtype of content_revision'', create_type__supertype;
end if;
end if;
select count(*) = 0 into v_temp_p
from pg_class
where relname = lower(create_type__table_name);
PERFORM acs_object_type__create_type (
create_type__content_type,
create_type__pretty_name,
create_type__pretty_plural,
create_type__supertype,
create_type__table_name,
create_type__id_column,
null,
''f'',
null,
create_type__name_method,
v_temp_p,
''f''
);
PERFORM content_type__refresh_view(create_type__content_type);
return 0;
end;' language 'plpgsql';
select define_function_args('content_type__create_attribute','content_type,attribute_name,datatype,pretty_name,pretty_plural,sort_order,default_value,column_spec;text');
create or replace function content_type__create_attribute (varchar,varchar,varchar,varchar,varchar,integer,varchar,varchar)
returns integer as '
declare
create_attribute__content_type alias for $1;
create_attribute__attribute_name alias for $2;
create_attribute__datatype alias for $3;
create_attribute__pretty_name alias for $4;
create_attribute__pretty_plural alias for $5; -- default null
create_attribute__sort_order alias for $6; -- default null
create_attribute__default_value alias for $7; -- default null
create_attribute__column_spec alias for $8; -- default ''text''
v_attr_id acs_attributes.attribute_id%TYPE;
v_table_name acs_object_types.table_name%TYPE;
v_column_exists boolean;
begin
-- add the appropriate column to the table
select table_name into v_table_name from acs_object_types
where object_type = create_attribute__content_type;
if NOT FOUND then
raise EXCEPTION ''-20000: Content type % does not exist in content_type.create_attribute'', create_attribute__content_type;
end if;
select count(*) > 0 into v_column_exists
from pg_class c, pg_attribute a
where c.relname::varchar = v_table_name
and c.oid = a.attrelid
and a.attname = lower(create_attribute__attribute_name);
v_attr_id := acs_attribute__create_attribute (
create_attribute__content_type,
create_attribute__attribute_name,
create_attribute__datatype,
create_attribute__pretty_name,
create_attribute__pretty_plural,
null,
null,
create_attribute__default_value,
1,
1,
create_attribute__sort_order,
''type_specific'',
''f'',
not v_column_exists,
null,
null,
null,
null,
null,
create_attribute__column_spec
);
PERFORM content_type__refresh_view(create_attribute__content_type);
return v_attr_id;
end;' language 'plpgsql';