-- IDEMPIERE-5586
SELECT register_migration_script('202302220654_IDEMPIERE-5586.sql') FROM dual;

CREATE OR REPLACE FUNCTION torecordid(
	p_tablename  IN 	VARCHAR,
	p_uu_value IN 	VARCHAR
)
  RETURNS INTEGER AS $body$
DECLARE
     id_column VARCHAR;
     uu_column VARCHAR;
     o_id INTEGER;
BEGIN
     SELECT a.ColumnName 
     INTO id_column
     FROM AD_Column a 
     JOIN AD_Table b ON (a.AD_Table_ID=b.AD_Table_ID) 
     WHERE a.IsActive='Y' AND a.IsKey='Y' AND  lower(b.TableName) = lower(p_tablename);

     IF (id_column IS NULL) THEN
         RAISE EXCEPTION 'ID column not found for table %', p_tablename;
     END IF;

     IF (length(p_tablename) <= 27) THEN
         uu_column = p_tablename || '_UU';
     ELSE
         SELECT a.ColumnName 
         INTO uu_column
         FROM AD_Column a 
        JOIN AD_Table b ON (a.AD_Table_ID=b.AD_Table_ID) 
         WHERE a.IsActive='Y' AND a.FieldLength=36  AND lower(ColumnName) like (lower(substring(p_tablename from 0 for 27)) || '%UU')
         AND  lower(b.TableName) = lower(p_tablename);
     END IF;
     
     IF (uu_column IS NULL) THEN
         RAISE EXCEPTION 'UUID column not found for table %', p_tablename;
     END IF;

     EXECUTE 'SELECT ' || quote_ident(lower(id_column)) || ' FROM ' || quote_ident(lower(p_tablename)) || ' WHERE ' ||  uu_column || '=$1'
     INTO STRICT o_id
     USING p_uu_value;

     RETURN o_id;
END;
$body$ LANGUAGE plpgsql
;