Example #1
0
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;
}
Example #2
0
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);
	}
}