From fc1333efd875d6d39e0551cf628c9384503cfa4e Mon Sep 17 00:00:00 2001 From: xgaia Date: Wed, 28 Jan 2026 12:00:14 +0100 Subject: [PATCH] feat: add dump_nt_graph_procedure.sql script --- dump_nt_graph_procedure.sql | 43 +++++++++++++++++++++++++++++++++++++ virtuoso.sh | 1 + 2 files changed, 44 insertions(+) create mode 100644 dump_nt_graph_procedure.sql diff --git a/dump_nt_graph_procedure.sql b/dump_nt_graph_procedure.sql new file mode 100644 index 0000000..1a386db --- /dev/null +++ b/dump_nt_graph_procedure.sql @@ -0,0 +1,43 @@ +CREATE PROCEDURE dump_nt_graph + ( IN srcgraph VARCHAR + , IN out_file VARCHAR + , IN file_length_limit INTEGER := 1000000000 + ) { + DECLARE env, ses ANY; + DECLARE ses_len + , max_ses_len + , file_len INTEGER; + SET ISOLATION = 'uncommitted'; + max_ses_len := 10000000; + file_len := 0; + string_to_file ( + out_file, + sprintf ( '# Dump of graph <%s>, as of %s\n@base <> .\n', + srcgraph, CAST (NOW() AS VARCHAR) ), + -2 + ); + env := vector (0, 0, 0); + ses := string_output (); + FOR (SELECT * FROM ( SPARQL DEFINE input:storage "" + SELECT ?s ?p ?o { GRAPH `iri(?:srcgraph)` { ?s ?p ?o } } + ) AS sub OPTION (LOOP)) DO { + http_nt_triple (env, "s", "p", "o", ses); + ses_len := length (ses); + IF (ses_len > max_ses_len) { + file_len := file_len + ses_len; + IF (file_len > file_length_limit) { + string_to_file (out_file, ses, -1); + file_len := 0; + env := vector (0, 0, 0); + } ELSE { + string_to_file (out_file, ses, -1); + } + ses := string_output (); + } + } + IF (LENGTH (ses)) { + string_to_file (out_file, ses, -1); + gz_compress_file (out_file, out_file||'.gz'); + file_delete (out_file); + } +}; diff --git a/virtuoso.sh b/virtuoso.sh index dbfdf20..53a2310 100755 --- a/virtuoso.sh +++ b/virtuoso.sh @@ -38,6 +38,7 @@ if [ "$SPARQL_UPDATE" = "true" ]; then echo 'GRANT execute on "DB.DBA.L_O_LOOK_N virtuoso-t +configfile ${CONFIG_FILE} +wait isql-v -U dba -P dba < /virtuoso/dump_nquads_procedure.sql isql-v -U dba -P dba < /virtuoso/dump_one_graph_procedure.sql +isql-v -U dba -P dba < /virtuoso/dump_nt_graph_procedure.sql isql-v -U dba -P dba < /sql-query.sql kill $(ps ax | egrep '[v]irtuoso-t' | awk '{print $1}')