Volksdata 1.0b12
RDF library and triple store
Loading...
Searching...
No Matches
data_set.c
Go to the documentation of this file.
2
3
6{
7 VOLK_DataSet *ds = malloc (sizeof (*ds));
8 NLNL (ds);
9
10 ds->store = store;
11 ds->gr = VOLK_term_set_new();
12
13 return ds;
14}
15
16
19{
20 VOLK_Buffer **tdata = VOLK_store_ctx_list_txn (store, txn);
21 NLNL (tdata);
22 size_t i = 0;
23 VOLK_DataSet *ds = malloc (sizeof (*ds));
24 NLCHECK (ds, fail_ds);
25
26 ds->store = store;
27 ds->gr = VOLK_term_set_new();
28 NLCHECK (ds->gr, fail_gr);
29
30 while (tdata[i]) {
32 VOLK_rc rc = VOLK_term_set_add (ds->gr, t, NULL);
33 VOLK_buffer_free (tdata[i]);
34 if (UNLIKELY (rc != VOLK_OK)) {
36 goto fail_t;
37 }
38 i++;
39 }
40 free (tdata);
41
42 return ds;
43
44fail_t:
45 i++; // tdata[i] was already freed.
46fail_gr:
48fail_ds:
49 while (tdata[i]) VOLK_buffer_free (tdata[i++]);
50 free (tdata);
51 return NULL;
52}
53
54
57{
58 VOLK_DataSet *dup = malloc (sizeof (*dup));
59 NLNL (dup);
60
61 dup->store = ds->store;
62 dup->gr = VOLK_term_set_new();
63
64 size_t i = 0;
65 VOLK_Term *t;
66 VOLK_rc rc;
67 while ((rc = VOLK_term_set_next (ds->gr, &i, &t)) != VOLK_END) {
68 RCNL (rc);
69 PRCNL (VOLK_term_set_add (dup->gr, VOLK_term_copy (t), NULL));
70 }
71
72 return dup;
73}
74
75
76void
78{
80 free (ds);
81}
82
83
84size_t
86{
87 size_t
88 ct = 0,
89 i = 0;
90 VOLK_Term *c = NULL;
91 VOLK_rc rc;
92 while ((rc = VOLK_term_set_next (ds->gr, &i, &c)) != VOLK_END) {
93 RCCK (rc); // FIXME This only returns an undefined size_t value.
94 VOLK_Graph *gr = VOLK_graph_new (ds->store, c->data);
95 ct += VOLK_graph_size (gr);
96 VOLK_graph_free (gr);
97 }
98
99 return ct;
100}
101
102
103/*
104 * Inline prototypes.
105 */
106VOLK_rc VOLK_data_set_add (VOLK_DataSet *ds, const VOLK_Graph *gr);
107VOLK_rc VOLK_data_set_remove (VOLK_DataSet *ds, const VOLK_Graph *gr);
108bool VOLK_data_set_contains (VOLK_DataSet *ds, const VOLK_Graph *gr);
#define UNLIKELY(x)
Definition core.h:65
VOLK_rc VOLK_data_set_remove(VOLK_DataSet *ds, const VOLK_Graph *gr)
Remove graphs from the data set.
Definition data_set.h:111
size_t VOLK_data_set_size(VOLK_DataSet *ds)
Number of triples in a data set.
Definition data_set.c:85
VOLK_rc VOLK_data_set_add(VOLK_DataSet *ds, const VOLK_Graph *gr)
Add graphs to the data set.
Definition data_set.h:92
VOLK_DataSet * VOLK_data_set_new_copy(VOLK_DataSet *ds)
Duplicate a data set.
Definition data_set.c:56
bool VOLK_data_set_contains(VOLK_DataSet *ds, const VOLK_Graph *gr)
Check if a graph is in a data set.
Definition data_set.h:132
VOLK_DataSet * VOLK_data_set_new_from_store_txn(void *txn, VOLK_Store *store)
Create a data set populated with a whole store.
Definition data_set.c:18
VOLK_DataSet * VOLK_data_set_new(VOLK_Store *store)
Create an empty data set.
Definition data_set.c:5
void VOLK_data_set_free(VOLK_DataSet *ds)
Free a data set handle.
Definition data_set.c:77
#define RCNL(exp)
Return NULL if exp returns a nonzero value.
Definition core.h:405
#define NLCHECK(exp, marker)
Log error and jump to marker if exp is NULL.
Definition core.h:363
#define PRCNL(exp)
Return NULL if exp returns a negative value (=error).
Definition core.h:416
#define NLNL(exp)
Log error and return NULL if exp is NULL.
Definition core.h:427
#define RCCK(exp)
Return exp return value if it is of VOLK_rc type and nonzero.
Definition core.h:372
#define VOLK_END
Loop end.
Definition core.h:145
#define VOLK_OK
Generic success return code.
Definition core.h:121
int VOLK_rc
Return code.
Definition core.h:117
VOLK_Buffer ** VOLK_store_ctx_list_txn(VOLK_Store *store, void *txn)
get index of all graph (context) URIs in a store.
Definition store.c:224
VOLK_rc VOLK_term_set_next(VOLK_TermSet *ts, size_t *i, VOLK_Term **term)
Iterate trough a term set.
Definition term.c:597
VOLK_TermSet * VOLK_term_set_new()
Create a new term set.
Definition term.c:548
void VOLK_term_set_free(VOLK_TermSet *ts)
Free a term set.
Definition term.c:609
void VOLK_term_free(VOLK_Term *term)
Definition term.c:392
VOLK_Term * VOLK_term_new_from_buffer(const VOLK_Buffer *sterm)
See notes in VOLK_term_serialize function body for format info.
Definition term.c:194
VOLK_rc VOLK_term_set_add(VOLK_TermSet *ts, VOLK_Term *term, VOLK_Term **ins)
Add term to a term set.
Definition term.c:561
VOLK_Term * VOLK_term_copy(const VOLK_Term *src)
Copy a term.
Definition term.c:174
void VOLK_buffer_free(VOLK_Buffer *buf)
Free a buffer.
Definition buffer.c:97
void VOLK_graph_free(VOLK_Graph *gr)
Free a graph.
Definition graph.c:266
#define VOLK_graph_size(...)
Non-transactional version of VOLK_graph_size_txn().
Definition graph.h:293
VOLK_Graph * VOLK_graph_new(VOLK_Store *store, const char *uri_str)
Create new graph.
Definition graph.c:45
General-purpose data buffer.
Definition buffer.h:47
RDF Dataset type.
Definition data_set.h:26
VOLK_TermSet * gr
Graphs in the data set.
Definition data_set.h:29
VOLK_Store * store
Definition data_set.h:27
Store structure.
Definition store.h:59
RDF term.
Definition term.h:61
char * data
URI, literal value, or BNode label.
Definition term.h:62