Remote execution of SPARQL via SPARQL protocol, produces a result set of SQL values.
any
create procedure SPARQL_TEST (in rquri varchar, in graph_uri varchar, in resuri varchar, in in_result integer := 0)
{
declare REPORT varchar;
declare rqtext, sqltext varchar;
declare app_env any;
declare rset, row any;
declare etalon_vars, etalon_rowids, etalon_rows any;
declare rctr, rcount integer;
declare copyright_filter any;
if (not in_result)
result_names (REPORT);
result ('');
declare exit handler for sqlstate '*' {
...
};
...
rqtext := replace (cast (XML_URI_GET ('', rquri) as varchar), '# \044Id:', '# Id:');
declare rexec_stat, rexec_msg varchar;
declare bnode_dict, rexec_rmeta, rexec_rrows any;
rexec_stat := '00000';
rexec_msg := 'OK';
bnode_dict := dict_new ();
rexec_rrows := null;
exec (
'DB.DBA.SPARQL_REXEC (?, ?, ?, ?, ?, ?, ?)',
rexec_stat, rexec_msg,
vector (
WB_CFG_HTTP_URI() || '/sparql/',
rqtext,
graph_uri,
vector (),
'',
10000,
bnode_dict ),
10000, rexec_rmeta, rexec_rrows );
if (not isarray (rexec_rrows))
rexec_rrows := null;
result (sprintf ('Remote exec of %s', rquri));
dump_large_text_impl (
sprintf (' completed with state %s msg %s and %d rows',
rexec_stat, rexec_msg, length (rexec_rrows) ) );
result ('PASSED');
};