static inline int si_nodeclose(sinode *n, sr *r, int gc) { int rcret = 0; int rc = ss_vfsmunmap(r->vfs, &n->map); if (ssunlikely(rc == -1)) { sr_malfunction(r->e, "db file '%s' munmap error: %s", ss_pathof(&n->file.path), strerror(errno)); rcret = -1; } rc = ss_fileclose(&n->file); if (ssunlikely(rc == -1)) { sr_malfunction(r->e, "db file '%s' close error: %s", ss_pathof(&n->file.path), strerror(errno)); rcret = -1; } if (gc) { si_nodegc_index(r, &n->i0); si_nodegc_index(r, &n->i1); } else { sv_indexfree(&n->i0, r); sv_indexfree(&n->i1, r); } return rcret; }
static inline int si_nodeclose(sinode *n, sr *r) { int rcret = 0; int rc = sr_fileclose(&n->file); if (srunlikely(rc == -1)) { sr_malfunction(r->e, "db file '%s' close error: %s", n->file.file, strerror(errno)); rcret = -1; } sv_indexfree(&n->i0, r); sv_indexfree(&n->i1, r); return rcret; }
static void sv_indexiter_iterate1(void) { svindex i; t( sv_indexinit(&i) == 0 ); int j = 0; while (j < 16) { svv *v = st_svv(&st_r.g, NULL, j, 0, j); t( sv_indexset(&i, &st_r.r, v) == 0 ); j++; } ssiter it; ss_iterinit(sv_indexiter, &it); ss_iteropen(sv_indexiter, &it, &st_r.r, &i, SS_GTE, NULL, 0); j = 0; while (ss_iteratorhas(&it)) { sv *v = ss_iteratorof(&it); t( sv_lsn(v) == j ); ss_iteratornext(&it); j++; } t( j == 16 ); sv_indexfree(&i, &st_r.r); }
static void sv_indexiter_iterate0(void) { svindex i; t( sv_indexinit(&i) == 0 ); int keyb = 3; int keya = 7; int keyc = 15; svv *h = st_svv(&st_r.g, NULL, 0, 0, keyb); t( sv_indexset(&i, &st_r.r, h) == 0 ); svv *p = st_svv(&st_r.g, NULL, 2, 0, keyc); t( sv_indexset(&i, &st_r.r, p) == 0 ); svv *va = st_svv(&st_r.g, NULL, 1, 0, keya); t( sv_indexset(&i, &st_r.r, va) == 0 ); svv *vb = st_svv(&st_r.g, NULL, 2, 0, keya); t( sv_indexset(&i, &st_r.r, vb) == 0 ); svv *vc = st_svv(&st_r.g, NULL, 3, 0, keya); t( sv_indexset(&i, &st_r.r, vc) == 0 ); ssiter it; ss_iterinit(sv_indexiter, &it); ss_iteropen(sv_indexiter, &it, &st_r.r, &i, SS_GTE, NULL, 0); t( ss_iteratorhas(&it) != 0 ); sv *v = ss_iteratorof(&it); t( v->v == h ); ss_iteratornext(&it); v = ss_iteratorof(&it); t( v->v == vc ); ss_iteratornext(&it); v = ss_iteratorof(&it); t( v->v == vb ); ss_iteratornext(&it); v = ss_iteratorof(&it); t( v->v == va ); ss_iteratornext(&it); v = ss_iteratorof(&it); t( v->v == p ); ss_iteratornext(&it); v = ss_iteratorof(&it); t( v == NULL ); sv_indexfree(&i, &st_r.r); }
static inline int si_nodeclose(sinode *n, sr *r) { int rcret = 0; int rc = ss_munmap(&n->map); if (ssunlikely(rc == -1)) { sr_malfunction(r->e, "db file '%s' munmap error: %s", ss_pathof(&n->file.path), strerror(errno)); rcret = -1; } rc = ss_fileclose(&n->file); if (ssunlikely(rc == -1)) { sr_malfunction(r->e, "db file '%s' close error: %s", ss_pathof(&n->file.path), strerror(errno)); rcret = -1; } sv_indexfree(&n->i0, r); sv_indexfree(&n->i1, r); return rcret; }
static void sv_indexiter_lte_empty(void) { svindex i; t( sv_indexinit(&i) == 0 ); ssiter it; ss_iterinit(sv_indexiter, &it); ss_iteropen(sv_indexiter, &it, &st_r.r, &i, SS_LTE, NULL, 0); t( ss_iteratorhas(&it) == 0 ); sv *v = ss_iteratorof(&it); t( v == NULL ); sv_indexfree(&i, &st_r.r); }
static void sv_indexiter_gte_empty(void) { svindex i; t( sv_indexinit(&i) == 0 ); svv *key = st_svv(&st_r.g, &st_r.gc, 0, 0, 7); ssiter it; ss_iterinit(sv_indexiter, &it); ss_iteropen(sv_indexiter, &it, &st_r.r, &i, SS_GTE, sv_vpointer(key), key->size); t( ss_iteratorhas(&it) == 0 ); sv *v = ss_iteratorof(&it); t( v == NULL ); sv_indexfree(&i, &st_r.r); }
static void sv_indexiter_lt_eq(void) { svindex i; t( sv_indexinit(&i) == 0 ); int keya = 7; int keyb = 5; int keyc = 2; svv *va = st_svv(&st_r.g, NULL, 0, 0, keya); t( sv_indexset(&i, &st_r.r, va) == 0 ); svv *vb = st_svv(&st_r.g, NULL, 0, 0, keyb); t( sv_indexset(&i, &st_r.r, vb) == 0 ); svv *vc = st_svv(&st_r.g, NULL, 0, 0, keyc); t( sv_indexset(&i, &st_r.r, vc) == 0 ); ssiter it; ss_iterinit(sv_indexiter, &it); ss_iteropen(sv_indexiter, &it, &st_r.r, &i, SS_LT, sv_vpointer(va), va->size); t( ss_iteratorhas(&it) != 0 ); sv *v = ss_iteratorof(&it); t( v->v == vb ); ss_iterinit(sv_indexiter, &it); ss_iteropen(sv_indexiter, &it, &st_r.r, &i, SS_LT, sv_vpointer(vb), vb->size); t( ss_iteratorhas(&it) != 0 ); v = ss_iteratorof(&it); t( v->v == vc ); ss_iterinit(sv_indexiter, &it); ss_iteropen(sv_indexiter, &it, &st_r.r, &i, SS_LT, sv_vpointer(vc), vc->size); t( ss_iteratorhas(&it) == 0 ); v = ss_iteratorof(&it); t( v == NULL ); sv_indexfree(&i, &st_r.r); }
static void sv_index_replace0(void) { svindex i; t( sv_indexinit(&i) == 0 ); uint32_t key = 7; svv *h = st_svv(&st_r.g, NULL, 0, 0, key); svv *n = st_svv(&st_r.g, NULL, 1, 0, key); t( sv_indexset(&i, &st_r.r, h) == 0 ); t( sv_indexset(&i, &st_r.r, n) == 0 ); svv *keyv = st_svv(&st_r.g, &st_r.gc, 0, 0, key); svv *p = getv(&i, &st_r.r, 0, keyv); t( p == h ); p = getv(&i, &st_r.r, 1, keyv); t( p == n ); t( h->next == NULL ); sv_indexfree(&i, &st_r.r); }