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; }
static int insert_rasqal_triple(struct update_context *uc, rasqal_triple *triple, int row) { fs_rid quad_buf[1][4]; fs_resource res; if (triple->origin) { fs_resource_from_rasqal_literal(uc, triple->origin, &res, row); quad_buf[0][0] = fs_hash_rasqal_literal(uc, triple->origin, row); } else if (uc->op->graph_uri) { res.lex = (char *)raptor_uri_as_string(uc->op->graph_uri); res.attr = FS_RID_NULL; quad_buf[0][0] = fs_hash_uri((char *)raptor_uri_as_string(uc->op->graph_uri)); } else { quad_buf[0][0] = fs_c.default_graph; res.lex = FS_DEFAULT_GRAPH; res.attr = FS_RID_NULL; } if (quad_buf[0][0] == fs_c.system_config) fsp_reload_acl_system(uc->link); if (!FS_IS_URI(quad_buf[0][0])) { return 1; } quad_buf[0][1] = fs_hash_rasqal_literal(uc, triple->subject, row); if (FS_IS_LITERAL(quad_buf[0][1])) { return 1; } quad_buf[0][2] = fs_hash_rasqal_literal(uc, triple->predicate, row); if (!FS_IS_URI(quad_buf[0][2])) { return 1; } quad_buf[0][3] = fs_hash_rasqal_literal(uc, triple->object, row); res.rid = quad_buf[0][0]; if (res.lex) fsp_res_import(uc->link, FS_RID_SEGMENT(quad_buf[0][0], uc->segments), 1, &res); res.rid = quad_buf[0][1]; fs_resource_from_rasqal_literal(uc, triple->subject, &res, 0); if (res.lex) fsp_res_import(uc->link, FS_RID_SEGMENT(quad_buf[0][1], uc->segments), 1, &res); res.rid = quad_buf[0][2]; fs_resource_from_rasqal_literal(uc, triple->predicate, &res, 0); if (res.lex) fsp_res_import(uc->link, FS_RID_SEGMENT(quad_buf[0][2], uc->segments), 1, &res); res.rid = quad_buf[0][3]; fs_resource_from_rasqal_literal(uc, triple->object, &res, 0); if (res.lex) fsp_res_import(uc->link, FS_RID_SEGMENT(quad_buf[0][3], uc->segments), 1, &res); fsp_quad_import(uc->link, FS_RID_SEGMENT(quad_buf[0][1], uc->segments), FS_BIND_BY_SUBJECT, 1, quad_buf); //printf("I %016llx %016llx %016llx %016llx\n", quad_buf[0][0], quad_buf[0][1], quad_buf[0][2], quad_buf[0][3]); return 0; }