Author: laalto Date: Mon Jan 14 20:12:45 2008 New Revision: 13604 URL: http://svn.librdf.org/view?rev=3D13604&view=3Drev Log: (rasqal_prefix_id) Moved from rasqal_query.c to rasqal_query_results.c stat= ic function. Do not free passed in string.
(rasqal_query_results_get_triple) Do not change nodeids of existing blanks = but create new blanks for new prefixed nodeids. Fixes issue http://bugs.lib= rdf.org/mantis/view.php?id=3D242 . Do not leak stored query_result->triples= . = Modified: rasqal/trunk/src/rasqal_internal.h rasqal/trunk/src/rasqal_query.c rasqal/trunk/src/rasqal_query_results.c Modified: rasqal/trunk/src/rasqal_internal.h URL: http://svn.librdf.org/view/rasqal/trunk/src/rasqal_internal.h?rev=3D13= 604&r1=3D13603&r2=3D13604&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- rasqal/trunk/src/rasqal_internal.h (original) +++ rasqal/trunk/src/rasqal_internal.h Mon Jan 14 20:12:45 2008 @@ -831,7 +831,6 @@ = /* rasqal_query.c */ void rasqal_query_remove_query_result(rasqal_query* query, rasqal_query_re= sults* query_results); -unsigned char* rasqal_prefix_id(int prefix_id, unsigned char *string); int rasqal_query_declare_prefix(rasqal_query* rq, rasqal_prefix* prefix); int rasqal_query_declare_prefixes(rasqal_query* rq); unsigned char* rasqal_query_get_genid(rasqal_query* query, const unsigned = char* base, int counter); Modified: rasqal/trunk/src/rasqal_query.c URL: http://svn.librdf.org/view/rasqal/trunk/src/rasqal_query.c?rev=3D13604= &r1=3D13603&r2=3D13604&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- rasqal/trunk/src/rasqal_query.c (original) +++ rasqal/trunk/src/rasqal_query.c Mon Jan 14 20:12:45 2008 @@ -1510,27 +1510,6 @@ return NULL; = return (rasqal_expression*)raptor_sequence_get_at(query->group_condition= s_sequence, idx); -} - - -unsigned char* -rasqal_prefix_id(int prefix_id, unsigned char *string) -{ - int tmpid=3Dprefix_id; - unsigned char* buffer; - size_t length=3Dstrlen((const char*)string)+4; /* "r" +... + "_" +... \= 0 */ - - while(tmpid/=3D10) - length++; - = - buffer=3D(unsigned char*)RASQAL_MALLOC(cstring, length); - if(!buffer) - return NULL; - = - sprintf((char*)buffer, "r%d_%s", prefix_id, string); - = - RASQAL_FREE(cstring, string); - return buffer; } = = Modified: rasqal/trunk/src/rasqal_query_results.c URL: http://svn.librdf.org/view/rasqal/trunk/src/rasqal_query_results.c?rev= =3D13604&r1=3D13603&r2=3D13604&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- rasqal/trunk/src/rasqal_query_results.c (original) +++ rasqal/trunk/src/rasqal_query_results.c Mon Jan 14 20:12:45 2008 @@ -452,6 +452,24 @@ } = = +static unsigned char* +rasqal_prefix_id(int prefix_id, unsigned char *string) +{ + int tmpid=3Dprefix_id; + unsigned char* buffer; + size_t length=3Dstrlen((const char*)string)+4; /* "r" +... + "_" +... \= 0 */ + + while(tmpid/=3D10) + length++; + = + buffer=3D(unsigned char*)RASQAL_MALLOC(cstring, length); + if(!buffer) + return NULL; + = + sprintf((char*)buffer, "r%d_%s", prefix_id, string); + = + return buffer; +} = = /** @@ -472,6 +490,7 @@ rasqal_triple *t; rasqal_literal *s, *p, *o; raptor_statement *rs; + unsigned char *nodeid; int skipped; = if(!query_results || query_results->failed || query_results->finished) @@ -518,10 +537,22 @@ break; = case RASQAL_LITERAL_BLANK: - s->string=3Drasqal_prefix_id(query_results->result_count, = - (unsigned char*)s->string); - - rs->subject=3Ds->string; + nodeid=3Drasqal_prefix_id(query_results->result_count, (unsigned c= har*)s->string); + rasqal_free_literal(s); + if(!nodeid) { + rasqal_log_error_simple(query->world, RAPTOR_LOG_LEVEL_FATAL, + &query->locator, + "Could not prefix subject blank identifi= er"); + return NULL; + } + s=3Drasqal_new_simple_literal(query->world, RASQAL_LITERAL_BLANK, = nodeid); + if(!s) { + rasqal_log_error_simple(query->world, RAPTOR_LOG_LEVEL_FATAL, + &query->locator, + "Could not create a new subject blank li= teral"); + return NULL; + } + rs->subject=3Dnodeid; rs->subject_type=3DRAPTOR_IDENTIFIER_TYPE_ANONYMOUS; break; = @@ -621,10 +652,26 @@ break; = case RASQAL_LITERAL_BLANK: - o->string=3Drasqal_prefix_id(query_results->result_count, = - (unsigned char*)o->string); - - rs->object=3Do->string; + nodeid=3Drasqal_prefix_id(query_results->result_count, (unsigned c= har*)o->string); + rasqal_free_literal(o); + if(!nodeid) { + rasqal_log_error_simple(query->world, RAPTOR_LOG_LEVEL_FATAL, + &query->locator, + "Could not prefix blank identifier"); + rasqal_free_literal(s); + rasqal_free_literal(p); + return NULL; + } + o=3Drasqal_new_simple_literal(query->world, RASQAL_LITERAL_BLANK, = nodeid); + if(!o) { + rasqal_log_error_simple(query->world, RAPTOR_LOG_LEVEL_FATAL, + &query->locator, + "Could not create a new subject blank li= teral"); + rasqal_free_literal(s); + rasqal_free_literal(p); + return NULL; + } + rs->object=3Dnodeid; rs->object_type=3DRAPTOR_IDENTIFIER_TYPE_ANONYMOUS; break; = @@ -663,6 +710,12 @@ rasqal_free_literal(o); continue; } + = + /* dispose previous triple if any */ + if(query_results->triple) { + rasqal_free_triple(query_results->triple); + query_results->triple=3DNULL; + } = /* for saving s, p, o for later disposal */ query_results->triple=3Drasqal_new_triple(s, p, o); _______________________________________________ redland-commits mailing list [email protected] http://lists.librdf.org/mailman/listinfo/redland-commits
