mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-02 08:39:46 +02:00
834 lines
25 KiB
C
834 lines
25 KiB
C
/* -*- Mode: c; c-basic-offset: 2 -*-
|
|
*
|
|
* rdf_model_storage.c - RDF Model Storage implementation
|
|
*
|
|
* Copyright (C) 2003-2008, David Beckett http://www.dajobe.org/
|
|
* Copyright (C) 2003-2004, University of Bristol, UK http://www.bristol.ac.uk/
|
|
*
|
|
* This package is Free Software and part of Redland http://librdf.org/
|
|
*
|
|
* It is licensed under the following three licenses as alternatives:
|
|
* 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
|
|
* 2. GNU General Public License (GPL) V2 or any newer version
|
|
* 3. Apache License, V2.0 or any newer version
|
|
*
|
|
* You may not use this file except in compliance with at least one of
|
|
* the above three licenses.
|
|
*
|
|
* See LICENSE.html or LICENSE.txt at the top of this package for the
|
|
* complete terms and further detail along with the license texts for
|
|
* the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
|
|
*
|
|
*
|
|
*/
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <rdf_config.h>
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
#include <win32_rdf_config.h>
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#ifdef HAVE_STDLIB_H
|
|
#include <stdlib.h> /* for exit() */
|
|
#endif
|
|
|
|
#include <redland.h>
|
|
|
|
|
|
typedef struct
|
|
{
|
|
librdf_storage *storage;
|
|
} librdf_model_storage_context;
|
|
|
|
|
|
static void
|
|
librdf_model_storage_init(void) {
|
|
|
|
}
|
|
|
|
|
|
static void
|
|
librdf_model_storage_terminate(void) {
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_create:
|
|
* @model: #librdf_model to initialise
|
|
* @storage: #librdf_storage storage to use
|
|
* @options: #librdf_hash of options to use
|
|
*
|
|
* Constructor - Create a new #librdf_model with storage.
|
|
*
|
|
* Options are presently not used.
|
|
*
|
|
* Return value: non 0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_create(librdf_model *model, librdf_storage *storage,
|
|
librdf_hash* options)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
|
|
if(!storage)
|
|
return 1;
|
|
|
|
if(librdf_storage_open(storage, model))
|
|
return 1;
|
|
|
|
context->storage=storage;
|
|
|
|
librdf_storage_add_reference(storage);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_clone:
|
|
* @old_model: the existing #librdf_model
|
|
*
|
|
* Copy constructor - create a new librdf_model from an existing one.
|
|
*
|
|
* Creates a new model as a copy of the existing model in the same
|
|
* storage context.
|
|
*
|
|
* Return value: a new #librdf_model or NULL on failure
|
|
**/
|
|
static librdf_model*
|
|
librdf_model_storage_clone(librdf_model* old_model)
|
|
{
|
|
librdf_model_storage_context *old_context=(librdf_model_storage_context *)old_model->context;
|
|
librdf_storage *new_storage;
|
|
librdf_model *new_model;
|
|
|
|
new_storage=librdf_new_storage_from_storage(old_context->storage);
|
|
if(!new_storage)
|
|
return NULL;
|
|
|
|
new_model=librdf_new_model_with_options(old_model->world, new_storage, NULL);
|
|
if(!new_model)
|
|
librdf_free_storage(new_storage);
|
|
|
|
return new_model;
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_destroy:
|
|
* @model: #librdf_model model to destroy
|
|
*
|
|
* Destructor - Destroy a #librdf_model object.
|
|
*
|
|
**/
|
|
static void
|
|
librdf_model_storage_destroy(librdf_model *model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
|
|
if(context->storage) {
|
|
librdf_storage_close(context->storage);
|
|
librdf_storage_remove_reference(context->storage);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_size:
|
|
* @model: #librdf_model object
|
|
*
|
|
* Get the number of statements in the model.
|
|
*
|
|
* Return value: the number of statements
|
|
**/
|
|
static int
|
|
librdf_model_storage_size(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_size(context->storage);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_add_statement:
|
|
* @model: model object
|
|
* @statement: statement object
|
|
*
|
|
* Add a statement to the model.
|
|
*
|
|
* The passed-in statement is copied when added to the model, not
|
|
* shared with the model.
|
|
*
|
|
* Return value: non 0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_add_statement(librdf_model* model,
|
|
librdf_statement* statement)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_add_statement(context->storage, statement);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_add_statements:
|
|
* @model: model object
|
|
* @statement_stream: stream of statements to use
|
|
*
|
|
* Add a stream of statements to the model.
|
|
*
|
|
* Return value: non 0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_add_statements(librdf_model* model, librdf_stream* statement_stream)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_add_statements(context->storage, statement_stream);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_remove_statement:
|
|
* @model: the model object
|
|
* @statement: the statement
|
|
*
|
|
* Remove a known statement from the model.
|
|
*
|
|
* Return value: non 0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_remove_statement(librdf_model* model,
|
|
librdf_statement* statement)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_remove_statement(context->storage, statement);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_contains_statement:
|
|
* @model: the model object
|
|
* @statement: the statement
|
|
*
|
|
* Check for a statement in the model.
|
|
*
|
|
* Return value: non 0 if the model contains the statement
|
|
**/
|
|
static int
|
|
librdf_model_storage_contains_statement(librdf_model* model, librdf_statement* statement)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_contains_statement(context->storage, statement);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_serialise:
|
|
* @model: the model object
|
|
*
|
|
* Serialise the entire model as a stream.
|
|
*
|
|
* Return value: a #librdf_stream or NULL on failure
|
|
**/
|
|
static librdf_stream*
|
|
librdf_model_storage_serialise(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_serialise(context->storage);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_find_statements:
|
|
* @model: the model object
|
|
* @statement: the partial statement to match
|
|
*
|
|
* Find matching statements in the model.
|
|
*
|
|
* The partial statement is a statement where the subject, predicate
|
|
* and/or object can take the value NULL which indicates a match with
|
|
* any value in the model
|
|
*
|
|
* Return value: a #librdf_stream of statements (can be empty) or NULL
|
|
* on failure.
|
|
**/
|
|
static librdf_stream*
|
|
librdf_model_storage_find_statements(librdf_model* model,
|
|
librdf_statement* statement)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_find_statements(context->storage, statement);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_get_sources:
|
|
* @model: #librdf_model object
|
|
* @arc: #librdf_node arc
|
|
* @target: #librdf_node target
|
|
*
|
|
* Return the sources (subjects) of arc in an RDF graph given arc (predicate) and target (object).
|
|
*
|
|
* Searches the model for arcs matching the given arc and target
|
|
* and returns a list of the source #librdf_node objects as an iterator
|
|
*
|
|
* Return value: #librdf_iterator of #librdf_node objects (may be empty) or NULL on failure
|
|
**/
|
|
static librdf_iterator*
|
|
librdf_model_storage_get_sources(librdf_model *model,
|
|
librdf_node *arc, librdf_node *target)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_get_sources(context->storage, arc, target);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_get_arcs:
|
|
* @model: #librdf_model object
|
|
* @source: #librdf_node source
|
|
* @target: #librdf_node target
|
|
*
|
|
* Return the arcs (predicates) of an arc in an RDF graph given source (subject) and target (object).
|
|
*
|
|
* Searches the model for arcs matching the given source and target
|
|
* and returns a list of the arc #librdf_node objects as an iterator
|
|
*
|
|
* Return value: #librdf_iterator of #librdf_node objects (may be empty) or NULL on failure
|
|
**/
|
|
static librdf_iterator*
|
|
librdf_model_storage_get_arcs(librdf_model *model,
|
|
librdf_node *source, librdf_node *target)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_get_arcs(context->storage, source, target);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_get_targets:
|
|
* @model: #librdf_model object
|
|
* @source: #librdf_node source
|
|
* @arc: #librdf_node arc
|
|
*
|
|
* Return the targets (objects) of an arc in an RDF graph given source (subject) and arc (predicate).
|
|
*
|
|
* Searches the model for targets matching the given source and arc
|
|
* and returns a list of the source #librdf_node objects as an iterator
|
|
*
|
|
* Return value: #librdf_iterator of #librdf_node objects (may be empty) or NULL on failure
|
|
**/
|
|
static librdf_iterator*
|
|
librdf_model_storage_get_targets(librdf_model *model,
|
|
librdf_node *source, librdf_node *arc)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_get_targets(context->storage, source, arc);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_get_arcs_in:
|
|
* @model: #librdf_model object
|
|
* @node: #librdf_node resource node
|
|
*
|
|
* Return the properties pointing to the given resource.
|
|
*
|
|
* Return value: #librdf_iterator of #librdf_node objects (may be empty) or NULL on failure
|
|
**/
|
|
static librdf_iterator*
|
|
librdf_model_storage_get_arcs_in(librdf_model *model, librdf_node *node)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_get_arcs_in(context->storage, node);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_get_arcs_out:
|
|
* @model: #librdf_model object
|
|
* @node: #librdf_node resource node
|
|
*
|
|
* Return the properties pointing from the given resource.
|
|
*
|
|
* Return value: #librdf_iterator of #librdf_node objects (may be empty) or NULL on failure
|
|
**/
|
|
static librdf_iterator*
|
|
librdf_model_storage_get_arcs_out(librdf_model *model, librdf_node *node)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_get_arcs_out(context->storage, node);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_has_arc_in:
|
|
* @model: #librdf_model object
|
|
* @node: #librdf_node resource node
|
|
* @property: #librdf_node property node
|
|
*
|
|
* Check if a node has a given property pointing to it.
|
|
*
|
|
* Return value: non 0 if arc property does point to the resource node
|
|
**/
|
|
static int
|
|
librdf_model_storage_has_arc_in(librdf_model *model, librdf_node *node,
|
|
librdf_node *property)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_has_arc_in(context->storage, node, property);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_has_arc_out:
|
|
* @model: #librdf_model object
|
|
* @node: #librdf_node resource node
|
|
* @property: #librdf_node property node
|
|
*
|
|
* Check if a node has a given property pointing from it.
|
|
*
|
|
* Return value: non 0 if arc property does point from the resource node
|
|
**/
|
|
static int
|
|
librdf_model_storage_has_arc_out(librdf_model *model, librdf_node *node,
|
|
librdf_node *property)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_has_arc_out(context->storage, node, property);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_context_add_statement:
|
|
* @model: #librdf_model object
|
|
* @context: #librdf_node context
|
|
* @statement: #librdf_statement statement object
|
|
*
|
|
* Add a statement to a model with a context.
|
|
*
|
|
* Return value: Non 0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_context_add_statement(librdf_model* model,
|
|
librdf_node* context,
|
|
librdf_statement* statement)
|
|
{
|
|
librdf_model_storage_context *mcontext=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_context_add_statement(mcontext->storage,
|
|
context, statement);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_context_add_statements:
|
|
* @model: #librdf_model object
|
|
* @context: #librdf_node context
|
|
* @stream: #librdf_stream stream object
|
|
*
|
|
* Add statements to a model with a context.
|
|
*
|
|
* Return value: Non 0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_context_add_statements(librdf_model* model,
|
|
librdf_node* context,
|
|
librdf_stream* stream)
|
|
{
|
|
librdf_model_storage_context *mcontext=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_context_add_statements(mcontext->storage,
|
|
context, stream);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_context_remove_statement:
|
|
* @model: #librdf_model object
|
|
* @context: #librdf_uri context
|
|
* @statement: #librdf_statement statement
|
|
*
|
|
* Remove a statement from a model in a context.
|
|
*
|
|
* Return value: Non 0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_context_remove_statement(librdf_model* model,
|
|
librdf_node* context,
|
|
librdf_statement* statement)
|
|
{
|
|
librdf_model_storage_context *mcontext=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_context_remove_statement(mcontext->storage,
|
|
context, statement);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_context_remove_statements:
|
|
* @model: #librdf_model object
|
|
* @context: #librdf_uri context
|
|
*
|
|
* Remove statements from a model with the given context.
|
|
*
|
|
* Return value: Non 0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_context_remove_statements(librdf_model* model,
|
|
librdf_node* context)
|
|
{
|
|
librdf_model_storage_context *mcontext=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_context_remove_statements(mcontext->storage, context);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_context_serialize:
|
|
* @model: #librdf_model object
|
|
* @context: #librdf_uri context
|
|
*
|
|
* List all statements in a model context.
|
|
*
|
|
* Return value: #librdf_stream of statements or NULL on failure
|
|
**/
|
|
static librdf_stream*
|
|
librdf_model_storage_context_serialize(librdf_model* model,
|
|
librdf_node* context)
|
|
{
|
|
librdf_model_storage_context *mcontext=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_context_as_stream(mcontext->storage, context);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_find_statements_in_context:
|
|
* @model: #librdf_model object
|
|
* @statement: #librdf_statement partial statement to find
|
|
* @context_node: context #librdf_node (or NULL)
|
|
*
|
|
* Search the model for matching statements in a given context.
|
|
*
|
|
* Searches the model for a (partial) statement as described in
|
|
* librdf_statement_match() in the given context and returns a
|
|
* #librdf_stream of matching #librdf_statement objects. If
|
|
* context is NULL, this is equivalent to librdf_model_find_statements.
|
|
*
|
|
* Return value: #librdf_stream of matching statements (may be empty) or NULL on failure
|
|
**/
|
|
static librdf_stream*
|
|
librdf_model_storage_find_statements_in_context(librdf_model* model,
|
|
librdf_statement* statement,
|
|
librdf_node* context_node)
|
|
{
|
|
librdf_model_storage_context *mcontext=(librdf_model_storage_context *)model->context;
|
|
librdf_stream *stream;
|
|
|
|
LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(model, librdf_model, NULL);
|
|
LIBRDF_ASSERT_OBJECT_POINTER_RETURN_VALUE(statement, librdf_statement, NULL);
|
|
|
|
if(mcontext->storage->factory->find_statements_in_context)
|
|
return mcontext->storage->factory->find_statements_in_context(mcontext->storage,
|
|
statement,
|
|
context_node);
|
|
|
|
statement=librdf_new_statement_from_statement(statement);
|
|
if(!statement)
|
|
return NULL;
|
|
|
|
stream=librdf_model_context_as_stream(model, context_node);
|
|
if(!stream) {
|
|
librdf_free_statement(statement);
|
|
return librdf_new_empty_stream(model->world);
|
|
}
|
|
|
|
librdf_stream_add_map(stream,
|
|
&librdf_stream_statement_find_map,
|
|
(librdf_stream_map_free_context_handler)&librdf_free_statement, (void*)statement);
|
|
|
|
return stream;
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_query_execute:
|
|
* @model: #librdf_model object
|
|
* @query: #librdf_query object
|
|
*
|
|
* Run a query against the model returning librdf_query_results.
|
|
*
|
|
* Run the given query against the model and return a #librdf_query_results
|
|
*
|
|
* Return value: #librdf_query_results or NULL on failure
|
|
**/
|
|
static librdf_query_results*
|
|
librdf_model_storage_query_execute(librdf_model* model,
|
|
librdf_query *query)
|
|
{
|
|
librdf_model_storage_context *mcontext=(librdf_model_storage_context *)model->context;
|
|
if(librdf_storage_supports_query(mcontext->storage, query))
|
|
return librdf_storage_query_execute(mcontext->storage, query);
|
|
else
|
|
return librdf_query_execute(query,model);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_sync:
|
|
* @model: #librdf_model object
|
|
*
|
|
* Synchronise the model to the storage.
|
|
*
|
|
* Return-value: Non-0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_sync(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_sync(context->storage);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_get_storage:
|
|
* @model: #librdf_model object
|
|
*
|
|
* Get the storage for the model.
|
|
*
|
|
**/
|
|
static librdf_storage*
|
|
librdf_model_storage_get_storage(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return context->storage;
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_get_contexts:
|
|
* @storage: #librdf_storage object
|
|
*
|
|
* Return the list of contexts in the store.
|
|
*
|
|
* Returns an iterator of #librdf_node context nodes for each
|
|
* context in the store.
|
|
*
|
|
* Return value: #librdf_iterator of context nodes or NULL on failure or if contexts are not supported
|
|
**/
|
|
static librdf_iterator*
|
|
librdf_model_storage_get_contexts(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_get_contexts(context->storage);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_get_feature:
|
|
* @storage: #librdf_storage object
|
|
* @feature: #librdf_uri feature property
|
|
*
|
|
* Get the value of a model storage feature.
|
|
*
|
|
* Return value: new #librdf_node feature value or NULL if no such feature
|
|
* exists or the value is empty.
|
|
**/
|
|
static librdf_node*
|
|
librdf_model_storage_get_feature(librdf_model* model, librdf_uri* feature)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_get_feature(context->storage, feature);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_set_feature:
|
|
* @storage: #librdf_storage object
|
|
* @feature: #librdf_uri feature property
|
|
* @value: #librdf_node feature property value
|
|
*
|
|
* Get the value of a model storage feature.
|
|
*
|
|
* Return value: #librdf_node feature value or NULL if no such feature
|
|
* exists or the value is empty.
|
|
**/
|
|
static int
|
|
librdf_model_storage_set_feature(librdf_model* model, librdf_uri* feature,
|
|
librdf_node* value)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_set_feature(context->storage, feature, value);
|
|
}
|
|
|
|
|
|
static librdf_stream*
|
|
librdf_model_storage_find_statements_with_options(librdf_model* model,
|
|
librdf_statement* statement,
|
|
librdf_node* context_node,
|
|
librdf_hash* options)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_find_statements_with_options(context->storage, statement, context_node, options);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_transaction_start:
|
|
* @storage: the storage object
|
|
*
|
|
* Start a transaction
|
|
*
|
|
* Return value: non-0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_transaction_start(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_transaction_start(context->storage);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_transaction_start_with_handle:
|
|
* @storage: the storage object
|
|
* @handle: the transaction object
|
|
*
|
|
* Start a transaction using an existing external transaction object.
|
|
*
|
|
* Return value: non-0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_transaction_start_with_handle(librdf_model* model,
|
|
void* handle)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_transaction_start_with_handle(context->storage, handle);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_transaction_commit:
|
|
* @storage: the storage object
|
|
*
|
|
* Commit a transaction.
|
|
*
|
|
* Return value: non-0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_transaction_commit(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_transaction_commit(context->storage);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_transaction_rollback:
|
|
* @storage: the storage object
|
|
*
|
|
* Rollback a transaction.
|
|
*
|
|
* Return value: non-0 on failure
|
|
**/
|
|
static int
|
|
librdf_model_storage_transaction_rollback(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_transaction_rollback(context->storage);
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_model_storage_transaction_get_handle:
|
|
* @storage: the storage object
|
|
*
|
|
* Get the current transaction handle.
|
|
*
|
|
* Return value: non-0 on failure
|
|
**/
|
|
static void*
|
|
librdf_model_storage_transaction_get_handle(librdf_model* model)
|
|
{
|
|
librdf_model_storage_context *context=(librdf_model_storage_context *)model->context;
|
|
return librdf_storage_transaction_get_handle(context->storage);
|
|
}
|
|
|
|
|
|
|
|
/* local function to register model_storage functions */
|
|
|
|
static void
|
|
librdf_model_storage_register_factory(librdf_model_factory *factory)
|
|
{
|
|
factory->context_length = sizeof(librdf_model_storage_context);
|
|
|
|
factory->init = librdf_model_storage_init;
|
|
factory->terminate = librdf_model_storage_terminate;
|
|
factory->create = librdf_model_storage_create;
|
|
factory->clone = librdf_model_storage_clone;
|
|
factory->destroy = librdf_model_storage_destroy;
|
|
factory->size = librdf_model_storage_size;
|
|
factory->add_statement = librdf_model_storage_add_statement;
|
|
factory->add_statements = librdf_model_storage_add_statements;
|
|
factory->remove_statement = librdf_model_storage_remove_statement;
|
|
factory->contains_statement = librdf_model_storage_contains_statement;
|
|
factory->serialise = librdf_model_storage_serialise;
|
|
|
|
factory->find_statements = librdf_model_storage_find_statements;
|
|
factory->get_sources = librdf_model_storage_get_sources;
|
|
factory->get_arcs = librdf_model_storage_get_arcs;
|
|
factory->get_targets = librdf_model_storage_get_targets;
|
|
|
|
factory->get_arcs_in = librdf_model_storage_get_arcs_in;
|
|
factory->get_arcs_out = librdf_model_storage_get_arcs_out;
|
|
factory->has_arc_in = librdf_model_storage_has_arc_in;
|
|
factory->has_arc_out = librdf_model_storage_has_arc_out;
|
|
|
|
factory->context_add_statement = librdf_model_storage_context_add_statement;
|
|
factory->context_add_statements = librdf_model_storage_context_add_statements;
|
|
factory->context_remove_statement = librdf_model_storage_context_remove_statement;
|
|
factory->context_remove_statements = librdf_model_storage_context_remove_statements;
|
|
factory->context_serialize = librdf_model_storage_context_serialize;
|
|
factory->find_statements_in_context = librdf_model_storage_find_statements_in_context;
|
|
|
|
|
|
factory->query_execute = librdf_model_storage_query_execute;
|
|
factory->sync = librdf_model_storage_sync;
|
|
factory->get_storage = librdf_model_storage_get_storage;
|
|
factory->get_contexts = librdf_model_storage_get_contexts;
|
|
factory->get_feature = librdf_model_storage_get_feature;
|
|
factory->set_feature = librdf_model_storage_set_feature;
|
|
factory->find_statements_with_options = librdf_model_storage_find_statements_with_options;
|
|
|
|
factory->transaction_start = librdf_model_storage_transaction_start;
|
|
factory->transaction_start_with_handle = librdf_model_storage_transaction_start_with_handle;
|
|
factory->transaction_commit = librdf_model_storage_transaction_commit;
|
|
factory->transaction_rollback = librdf_model_storage_transaction_rollback;
|
|
factory->transaction_get_handle = librdf_model_storage_transaction_get_handle;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* librdf_init_model_storage:
|
|
* @world: world object
|
|
*
|
|
* INTERNAL - Initialise the model_storage module
|
|
**/
|
|
void
|
|
librdf_init_model_storage(librdf_world *world)
|
|
{
|
|
librdf_model_register_factory(world,
|
|
"storage", "Model backed by a Redland storage",
|
|
&librdf_model_storage_register_factory);
|
|
}
|