amalgame/commit

Avoid long waiting time for opening /amalgame/app/build url by caching results of rdf_literal_predicates/1

authorJacco van Ossenbruggen
Tue Oct 25 16:55:21 2016 +0200
committerJacco van Ossenbruggen
Tue Oct 25 16:55:21 2016 +0200
commit64f34e90bfc23af682eb11b3fdcf24d8a5ff34de
treea742ee7d81230485c2fc802b4609ecbabb22d2d7
parentd1ff40501933e067ff9f0b163c4c6f07159a829e
Diff style: patch stat
diff --git a/lib/amalgame/rdf_util.pl b/lib/amalgame/rdf_util.pl
index 930d4ab..0fd1baa 100644
--- a/lib/amalgame/rdf_util.pl
+++ b/lib/amalgame/rdf_util.pl
@@ -19,6 +19,9 @@
 	rdf_lang(r,r,-),
 	rdf_lang(r,r,+,-).
 
+:- dynamic
+	rdf_literal_predicates_cache/1.
+
 %%	rdf_has(S,P,O,RP,G) is nondet
 %
 %	Behaves as rdf_has/4 but the underlying triple needs to be in
@@ -31,9 +34,13 @@ rdf_has(S,P,O,RP,G) :-
 	    rdf(S,RP,O,G:_)
 	).
 
+rdf_literal_predicates(L) :-
+	rdf_literal_predicates_cache(L),!.
+
 rdf_literal_predicates(L) :-
 	findall(P, rdf_is_literal_predicate(P), Ps),
-	sort(Ps, L).
+	sort(Ps, L),
+	assert(rdf_literal_predicates_cache(L)).
 
 rdf_is_literal_predicate(P) :-
 	rdf_current_predicate(P),