static int delete_rasqal_triple(struct update_context *ct, fs_rid_vector *vec[], rasqal_triple *triple, int row) { fs_rid m, s, p, o; if (triple->origin) { m = fs_hash_rasqal_literal(ct, triple->origin, row); if (m == FS_RID_NULL) return 1; } else if (ct->op->graph_uri) { m = fs_hash_uri((char *)raptor_uri_as_string(ct->op->graph_uri)); } else { /* m can be wildcard in the absence of GRAPH, WITH etc. */ m = FS_RID_NULL; } s = fs_hash_rasqal_literal(ct, triple->subject, row); if (s == FS_RID_NULL) return 1; p = fs_hash_rasqal_literal(ct, triple->predicate, row); if (p == FS_RID_NULL) return 1; o = fs_hash_rasqal_literal(ct, triple->object, row); if (o == FS_RID_NULL) return 1; /* as long as s, p, and o are bound, we can add this quad */ fs_rid_vector_append(vec[0], m); fs_rid_vector_append(vec[1], s); fs_rid_vector_append(vec[2], p); fs_rid_vector_append(vec[3], o); if (fs_rid_vector_length(vec[0]) > 999) { fsp_delete_quads_all(ct->link, vec); for (int s=0; s<4; s++) { fs_rid_vector_truncate(vec[s], 0); } } return 0; }
END_TEST START_TEST (check_fs_rid_vector_truncate) { fs_rid_vector *v = fs_rid_vector_new(0); fail_unless(v != NULL, "fs_rid_vector is NULL"); int i=0; for (i=100; i < 1e4; i++) { fs_rid_vector_append(v, i); } fs_rid_vector_truncate(v, 100); fail_if(fs_rid_vector_length(v) != 100); fail_if(v->data[fs_rid_vector_length(v)-1] != 199); fs_rid_vector_truncate(v, 1); fail_if(v->data[fs_rid_vector_length(v)-1] != 100); fs_rid_vector_free(v); }
/* truncate a binding to length entries long */ void fs_binding_truncate(fs_binding *b, int length) { for (int i=0; b[i].name; i++) { fs_rid_vector_truncate(b[i].vals, length); } }