storage-common/pgsql/fload.sql

35 lines
854 B
PL/PgSQL

create or replace function get_value(tname text, vtext text) returns bigint as $$
begin
case tname
when 'node' then
return get_node(vtext);
when 'int' then
return to_number(vtext, '99999999');
else
return 0;
end case;
end;
$$ language plpgsql;
create or replace function get_node(vtext text) returns bigint as $$
declare
pfx text;
vname text;
value bigint;
begin
pfx := split_part(vtext, ':', 1);
vname := split_part(vtext, ':', 2);
select nodes.id into value from nodes, namespaces ns
where ns.prefix = pfx
and nodes.namespace = ns.id
and nodes.name = vname;
if value is null then
insert into nodes (namespace, name)
(select ns.id, vname from namespaces ns where ns.prefix = pfx)
returning nodes.id into value;
end if;
return value;
end;
$$ language plpgsql;