Database-Sophia
view release on metacpan or search on metacpan
Sophia-src/db/core.h view on Meta::CPAN
sprep rep;
sptxn txn; /* transaction mode: single or multi-stmt */
spi *i, i0, i1;
spi itxn;
int iskip; /* skip second index during read */
uint64_t psn; /* page sequence number */
spcat s;
spbatch lb; /* log batch related */
volatile int stop;
sptask merger;
sprefset refs; /* pre allocated key buffer (page merge) */
spfile lockdb; /* per-process database lock */
int lockc; /* incremental cursor lock */
spspinlock lockr; /* repository lock */
spspinlock locks; /* space lock */
spspinlock locki; /* index lock */
spe e, em; /* separate error contexts: fe and merger */
};
int sp_rotate(sp*, spe*);
Sophia-src/db/ref.h view on Meta::CPAN
/*
* sophia database
* sphia.org
*
* Copyright (c) Dmitry Simonenko
* BSD License
*/
typedef struct spref spref;
typedef struct sprefset sprefset;
#define SPREFNONE 0
#define SPREFD 1
#define SPREFM 2
struct spref {
uint8_t type;
union {
spvh *vh;
spv *v;
} v;
} sppacked;
struct sprefset {
spref *r;
int used;
int max;
};
static inline char*
sp_refk(spref *r) {
switch (r->type) {
case SPREFD: return r->v.vh->key;
case SPREFM: return r->v.v->key;
Sophia-src/db/ref.h view on Meta::CPAN
switch (r->type) {
case SPREFM: flags = r->v.v->flags;
break;
case SPREFD: flags = r->v.vh->flags;
break;
}
return (flags & SPDEL? 1: 0);
}
static inline int
sp_refsetinit(sprefset *s, spa *a, int count) {
s->r = sp_malloc(a, count * sizeof(spref));
if (spunlikely(s->r == NULL))
return -1;
s->used = 0;
s->max = count;
return 0;
}
static inline void
sp_refsetfree(sprefset *s, spa *a) {
if (s->r) {
sp_free(a, s->r);
s->r = NULL;
}
}
static inline void
sp_refsetadd(sprefset *s, spref *r) {
assert(s->used < s->max);
s->r[s->used] = *r;
s->used++;
}
static inline void
sp_refsetreset(sprefset *s) {
s->used = 0;
}
#endif
( run in 0.755 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )