SerdStatus sord_inserter_write_statement(SordInserter* inserter, SerdStatementFlags flags, const SerdNode* graph, const SerdNode* subject, const SerdNode* predicate, const SerdNode* object, const SerdNode* object_datatype, const SerdNode* object_lang) { SordWorld* world = sord_get_world(inserter->model); SerdEnv* env = inserter->env; SordNode* g = sord_node_from_serd_node(world, env, graph, NULL, NULL); SordNode* s = sord_node_from_serd_node(world, env, subject, NULL, NULL); SordNode* p = sord_node_from_serd_node(world, env, predicate, NULL, NULL); SordNode* o = sord_node_from_serd_node(world, env, object, object_datatype, object_lang); if (!s || !p || !o) { return SERD_ERR_BAD_ARG; } const SordQuad tup = { s, p, o, g }; sord_add(inserter->model, tup); sord_node_free(world, o); sord_node_free(world, p); sord_node_free(world, s); sord_node_free(world, g); return SERD_SUCCESS; }
static void sord_drop_quad_ref(SordModel* sord, const SordNode* node, SordQuadIndex i) { if (!node) { return; } assert(node->refs > 0); if (node->node.type != SERD_LITERAL && i == SORD_OBJECT) { assert(node->meta.res.refs_as_obj > 0); --((SordNode*)node)->meta.res.refs_as_obj; } if (--((SordNode*)node)->refs == 0) { sord_node_free_internal(sord_get_world(sord), (SordNode*)node); } }