--
-- Attribute discrepancy fix for object_types in OpenACS:
--
-- Some attributes are not created for new instances since 2006, but an upgrade
-- script deleting the already existing ones was never done.
--
-- This one tries to fix this.
--
-- Original datatype change:
-- https://fisheye.openacs.org/changelog/OpenACS?cs=MAIN%3Avictorg%3A20060727200933
-- https://github.com/openacs/openacs-core/commit/7e30fa270483dcbc866ffbf6f5cf4f30447987cb
--

begin;

CREATE OR REPLACE FUNCTION inline_0(
   p_object_type varchar,
   p_attribute_name varchar

) RETURNS integer AS $$
DECLARE
  v_table_name             acs_object_types.table_name%TYPE;
BEGIN

  -- Check that attribute exists
  select t.table_name into v_table_name
    from acs_object_types t, acs_attributes a
   where a.object_type = p_object_type
     and a.attribute_name = p_attribute_name
     and t.object_type = p_object_type;

  if found then

    -- First remove possible values for the enumeration
    delete from acs_enum_values
    where attribute_id in (select a.attribute_id
                           from acs_attributes a
                           where a.object_type = p_object_type
                           and a.attribute_name = p_attribute_name);

    -- Finally, get rid of the attribute
    delete from acs_attributes
    where object_type = p_object_type
    and attribute_name = p_attribute_name;

  end if;

  return null;
END;
$$ LANGUAGE plpgsql;

select inline_0('apm_package','package_uri');
select inline_0('apm_package','spec_file_path');
select inline_0('apm_package','spec_file_mtime');
select inline_0('apm_package','singleton_p');
select inline_0('apm_package','initial_install_p');

drop function inline_0(varchar,varchar);

end;