|
@@ -243,6 +243,50 @@ fail:
|
|
|
}
|
|
|
|
|
|
|
|
|
+LSUP_rc
|
|
|
+LSR_desc_store (const LSR_Desc *rsrc)
|
|
|
+{
|
|
|
+ // TODO Make atomic. Needs to implement transactions in backend.
|
|
|
+ LSR_Desc *old_rsrc;
|
|
|
+ LSUP_rc rc = LSR_desc_get (rsrc->id, &old_rsrc);
|
|
|
+ if (UNLIKELY (rc < 0)) return rc;
|
|
|
+
|
|
|
+ // Remove all existing user graphs.
|
|
|
+ if (old_rsrc) {
|
|
|
+ LSUP_Term *main_data_urn = LSUP_graph_uri (old_rsrc->main_data);
|
|
|
+ for (size_t i = 0; old_rsrc->user_data[i] != NULL; i++) {
|
|
|
+ LSUP_Term *gr_uri = LSUP_graph_uri (old_rsrc->user_data[i]);
|
|
|
+ size_t ct;
|
|
|
+ // Remove triples from user graph.
|
|
|
+ LSUP_graph_remove (old_rsrc->user_data[i], NULL, NULL, NULL, &ct);
|
|
|
+ log_debug ( "Removed %lu triples from graph %s", ct, gr_uri->data);
|
|
|
+
|
|
|
+ // Remove user graph metadata.
|
|
|
+ LSUP_graph_remove (old_rsrc->main_data, gr_uri, NULL, NULL, NULL);
|
|
|
+ LSUP_graph_remove (old_rsrc->main_data, NULL, NULL, gr_uri, NULL);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Add new triples.
|
|
|
+ for (size_t i = 0; rsrc->user_data[i] != NULL; i++) {
|
|
|
+ LSUP_Term *gr_uri = LSUP_graph_uri (rsrc->user_data[i]);
|
|
|
+
|
|
|
+ LSUP_graph_store (rsrc->user_data[i], NULL, NULL);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Update admin data.
|
|
|
+ LSUP_graph_store (rsrc->admin_data, NULL, NULL);
|
|
|
+ // Update graph metadata.
|
|
|
+ LSUP_graph_store (rsrc->main_data, NULL, NULL);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+LSUP_rc
|
|
|
+LSUP_desc_update (LSR_id id, LSUP_Term **remove, LSUP_Triple *add)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
LSUP_rc
|
|
|
LSR_desc_get (const uuid_t id, LSR_Desc **rsrc)
|
|
|
{
|