示例#1
0
static void
rasqal_raptor_statement_handler(void *user_data,
                                raptor_statement *statement)
{
    rasqal_raptor_triples_source_user_data* rtsc;
    rasqal_raptor_triple *triple;

    rtsc = (rasqal_raptor_triples_source_user_data*)user_data;

    triple = RASQAL_MALLOC(rasqal_raptor_triple*, sizeof(rasqal_raptor_triple));
    triple->next = NULL;
    triple->triple = raptor_statement_as_rasqal_triple(rtsc->world,
                     statement);

    /* this origin URI literal is shared amongst the triples and
     * freed only in rasqal_raptor_free_triples_source
     */
    rasqal_triple_set_origin(triple->triple,
                             rtsc->source_literals[rtsc->source_index]);

    if(rtsc->tail)
        rtsc->tail->next = triple;
    else
        rtsc->head = triple;

    rtsc->tail = triple;
}
示例#2
0
static int
rasqal_algebra_visitor_set_origin(rasqal_query* query,
                                  rasqal_algebra_node* node,
                                  void *user_data)
{
  rasqal_literal *origin = (rasqal_literal*)user_data;
  int i;
  
  if(node->op != RASQAL_ALGEBRA_OPERATOR_BGP)
    return 0;

  for(i = node->start_column; i <= node->end_column; i++) {
    rasqal_triple *t;
    rasqal_literal *o = NULL;
    
    t = (rasqal_triple*)raptor_sequence_get_at(node->triples, i);
    if(origin)
      o = rasqal_new_literal_from_literal(origin);
    
    rasqal_triple_set_origin(t, o);
  }
  return 0;
}