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

Reply via email to