int fs_import_stream_finish(fsp_link *link, int *count, int *errors) { raptor_parse_chunk(parse_data.parser, NULL, 0, 1); /* finish */ raptor_free_parser(parse_data.parser); raptor_free_uri(parse_data.muri); g_free(parse_data.model); const int segments = fsp_link_segments(link); *count += process_quads(&parse_data); close(parse_data.quad_fd); unlink(parse_data.quad_fn); free(parse_data.quad_fn); parse_data.quad_fd = 0xdeadbeef; parse_data.quad_fn = NULL; /* make sure buffers are flushed */ for (int seg = 0; seg < segments; seg++) { if (res_pos[seg] > 0 && fsp_res_import(link, seg, res_pos[seg], res_buffer[seg])) { fs_error(LOG_ERR, "resource import failed"); return 1; } } if (fsp_res_import_commit_all(link)) { fs_error(LOG_ERR, "resource commit failed"); return 2; } for (int seg = 0; seg < segments; seg++) { for (int i=0; i<res_pos[seg]; i++) { if (res_buffer[seg][i].lex != lex_tmp[seg][i]) { free(res_buffer[seg][i].lex); } } res_pos[seg] = 0; } if (fsp_quad_import_commit_all(link, FS_BIND_BY_SUBJECT)) { fs_error(LOG_ERR, "quad commit failed"); return 3; } for (int i=0; i<segments; i++) { for (int j=0; j<RES_BUF_SIZE; j++) { free(lex_tmp[i][j]); lex_tmp[i][j] = NULL; } } *errors = parse_data.count_err; return 0; }
int fs_import_commit(fsp_link *link, int verbosity, int dryrun, int has_o_index, FILE *msg, int *count) { const int segments = fsp_link_segments(link); *count += process_quads(&parse_data); close(parse_data.quad_fd); unlink(parse_data.quad_fn); free(parse_data.quad_fn); parse_data.quad_fd = 0xdeadbeef; parse_data.quad_fn = NULL; /* make sure buffers are flushed */ for (int seg = 0; seg < segments; seg++) { if (!(dryrun & FS_DRYRUN_RESOURCES) && res_pos[seg] > 0 && fsp_res_import(link, seg, res_pos[seg], res_buffer[seg])) { fs_error(LOG_ERR, "resource import failed"); return 1; } } if (!(dryrun & FS_DRYRUN_RESOURCES) && fsp_res_import_commit_all(link)) { fs_error(LOG_ERR, "resource commit failed"); return 2; } for (int seg = 0; seg < segments; seg++) { for (int i=0; i<res_pos[seg]; i++) { if (res_buffer[seg][i].lex != lex_tmp[seg][i]) { free(res_buffer[seg][i].lex); } } res_pos[seg] = 0; } if (!(dryrun & FS_DRYRUN_QUADS) && fsp_quad_import_commit_all(link, FS_BIND_BY_SUBJECT)) { fs_error(LOG_ERR, "quad commit failed"); return 3; } for (int i=0; i<segments; i++) { for (int j=0; j<RES_BUF_SIZE; j++) { free(lex_tmp[i][j]); lex_tmp[i][j] = NULL; } } inited = 0; return 0; }
int fs_update(fs_query_state *qs, char *update, char **message, int unsafe) { rasqal_query *rq = rasqal_new_query(qs->rasqal_world, "sparql11-update", NULL); if (!rq) { *message = g_strdup_printf("Unable to initialise update parser"); return 1; } struct update_context uctxt; rasqal_world_set_log_handler(qs->rasqal_world, &uctxt, error_handler); memset(&uctxt, 0, sizeof(uctxt)); uctxt.link = qs->link; uctxt.segments = fsp_link_segments(qs->link); uctxt.qs = qs; uctxt.rq = rq; raptor_uri *bu = raptor_new_uri(qs->raptor_world, (unsigned char *)"local:local"); rasqal_query_prepare(rq, (unsigned char *)update, bu); if (uctxt.error) { if (uctxt.messages) { *message = build_update_error_message(uctxt.messages); g_slist_free(uctxt.messages); } return 1; } if (!quad_buffer) { quad_buffer = calloc(uctxt.segments, sizeof(struct quad_buf)); } int ok = 1; for (int i=0; 1; i++) { rasqal_update_operation *op = rasqal_query_get_update_operation(rq, i); if (!op) { break; } uctxt.op = op; uctxt.opid = i; if (update_op(&uctxt)) { ok = 0; break; } } fsp_res_import_commit_all(qs->link); fsp_quad_import_commit_all(qs->link, FS_BIND_BY_SUBJECT); rasqal_free_query(rq); if (uctxt.messages) { *message = build_update_error_message(uctxt.messages); g_slist_free(uctxt.messages); } for (GSList *it=uctxt.freeable; it; it=it->next) { g_free(it->data); } g_slist_free(uctxt.freeable); raptor_free_uri(bu); if (ok) { return 0; } else { return 1; } }