Forum .LRN Q&A: Re: notes on upgrading dotLRN to 2.2.0a1

Collapse
Posted by Nima Mazloumi on
Alright,

dotlrn installation fails as soon as the proc apm_parameter_register is called. So some reason the sql query parameter_register never returns.

Looking at the code I have a question. The query text is written directly inside the proc but there is a postgresql.xql where the query is available as well. Which query is in this case executed by the system?

Inside apm-procs.tcl is written

begin
:1 := apm.register_parameter(
parameter_id => :parameter_id,
parameter_name => :parameter_name,
package_key => :package_key,
description => :description,
datatype => :datatype,
default_value => :default_value,
section_name => :section_name,
min_n_values => :min_n_values,
max_n_values => :max_n_values
);
end;

And in the apm-procs-postgresql.xql is written:

select apm__register_parameter(
:parameter_id,
:package_key,
:parameter_name,
:description,
:datatype,
:default_value,
:section_name,
:min_n_values,
:max_n_values
);

The function apm__register_parameter is defined as this:

-- Function: apm__register_parameter(int4, varchar, varchar, varchar, varchar, varchar, varchar, int4, int4)

-- DROP FUNCTION apm__register_parameter(int4, "varchar", "varchar", "varchar", "varchar", "varchar", "varchar", int4, int4);

CREATE OR REPLACE FUNCTION apm__register_parameter(int4, "varchar", "varchar", "varchar", "varchar", "varchar", "varchar", int4, int4)
RETURNS int4 AS
'
declare
register_parameter__parameter_id alias for $1; -- default null
register_parameter__package_key alias for $2;
register_parameter__parameter_name alias for $3;
register_parameter__description alias for $4; -- default null
register_parameter__datatype alias for $5; -- default \'string\'
register_parameter__default_value alias for $6; -- default null
register_parameter__section_name alias for $7; -- default null
register_parameter__min_n_values alias for $8; -- default 1
register_parameter__max_n_values alias for $9; -- default 1

v_parameter_id apm_parameters.parameter_id%TYPE;
cur_val record;
begin
-- Create the new parameter.
v_parameter_id := acs_object__new(
register_parameter__parameter_id,
\'apm_parameter\',
now(),
null,
null,
null,
\'t\',
register_parameter__package_key || \': Parameter \' || register_parameter__parameter_name,
null
);

insert into apm_parameters
(parameter_id, parameter_name, description, package_key, datatype,
default_value, section_name, min_n_values, max_n_values)
values
(v_parameter_id, register_parameter__parameter_name,
register_parameter__description, register_parameter__package_key,
register_parameter__datatype, register_parameter__default_value,
register_parameter__section_name, register_parameter__min_n_values,
register_parameter__max_n_values);

-- Propagate parameter to new instances.
for cur_val in select ap.package_id, p.parameter_id, p.default_value
from apm_parameters p left outer join apm_parameter_values v
using (parameter_id), apm_packages ap
where p.package_key = ap.package_key
and v.attr_value is null
and p.package_key = register_parameter__package_key
loop
PERFORM apm__set_value(
cur_val.parameter_id,
cur_val.package_id,
cur_val.default_value
);
end loop;

return v_parameter_id;

end;'
LANGUAGE 'plpgsql' VOLATILE;

Maybe this is the reason why none of the parameters of the packages are added.

Any idea?