示例#1
0
文件: update.c 项目: 66laps/4store
static int delete_rasqal_triple(struct update_context *ct, fs_rid_vector *vec[], rasqal_triple *triple, int row)
{
    fs_rid m, s, p, o;

    if (triple->origin) {
        m = fs_hash_rasqal_literal(ct, triple->origin, row);
        if (m == FS_RID_NULL) return 1;
    } else if (ct->op->graph_uri) {
        m = fs_hash_uri((char *)raptor_uri_as_string(ct->op->graph_uri));
    } else {
        /* m can be wildcard in the absence of GRAPH, WITH etc. */
        m = FS_RID_NULL;
    }
    s = fs_hash_rasqal_literal(ct, triple->subject, row);
    if (s == FS_RID_NULL) return 1;
    p = fs_hash_rasqal_literal(ct, triple->predicate, row);
    if (p == FS_RID_NULL) return 1;
    o = fs_hash_rasqal_literal(ct, triple->object, row);
    if (o == FS_RID_NULL) return 1;

    /* as long as s, p, and o are bound, we can add this quad */
    fs_rid_vector_append(vec[0], m);
    fs_rid_vector_append(vec[1], s);
    fs_rid_vector_append(vec[2], p);
    fs_rid_vector_append(vec[3], o);

    if (fs_rid_vector_length(vec[0]) > 999) {
        fsp_delete_quads_all(ct->link, vec);
        for (int s=0; s<4; s++) {
            fs_rid_vector_truncate(vec[s], 0);
        }
    }

    return 0;
}
示例#2
0
END_TEST


START_TEST (check_fs_rid_vector_truncate)
{
  fs_rid_vector *v = fs_rid_vector_new(0);
  fail_unless(v != NULL, "fs_rid_vector is NULL");
  int i=0;
  for (i=100; i < 1e4; i++) {
      fs_rid_vector_append(v, i);
  }
  fs_rid_vector_truncate(v, 100);
  fail_if(fs_rid_vector_length(v) != 100);
  fail_if(v->data[fs_rid_vector_length(v)-1] != 199);
  fs_rid_vector_truncate(v, 1);
  fail_if(v->data[fs_rid_vector_length(v)-1] != 100);
  fs_rid_vector_free(v);
}
示例#3
0
/* truncate a binding to length entries long */
void fs_binding_truncate(fs_binding *b, int length)
{
    for (int i=0; b[i].name; i++) {
        fs_rid_vector_truncate(b[i].vals, length);
    }
}