Using a separate nmem for creating rsets
authorHeikki Levanto <heikki@indexdata.dk>
Mon, 30 Aug 2004 12:32:24 +0000 (12:32 +0000)
committerHeikki Levanto <heikki@indexdata.dk>
Mon, 30 Aug 2004 12:32:24 +0000 (12:32 +0000)
index/index.h
index/zrpn.c
index/zsets.c

index 43661a8..0132e3d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: index.h,v 1.114 2004-08-25 09:23:36 adam Exp $
+/* $Id: index.h,v 1.115 2004-08-30 12:32:24 heikki Exp $
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
@@ -359,7 +359,7 @@ struct term_set_list {
     struct term_set_entry *last;
 };
 
-RSET rpn_search (ZebraHandle zh, NMEM mem,
+RSET rpn_search (ZebraHandle zh, NMEM mem, NMEM rset_nmem,
                 Z_RPNQuery *rpn, int num_bases, char **basenames, 
                 const char *setname, ZebraSet sset);
 
index f65475d..83ad083 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zrpn.c,v 1.145 2004-08-24 14:25:16 heikki Exp $
+/* $Id: zrpn.c,v 1.146 2004-08-30 12:32:24 heikki Exp $
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
@@ -2199,7 +2199,8 @@ static RSET rpn_search_APT (ZebraHandle zh, Z_AttributesPlusTerm *zapt,
 }
 
 static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
-                                  oid_value attributeSet, NMEM stream,
+                                  oid_value attributeSet, 
+                                  NMEM stream, NMEM rset_nmem,
                                   Z_SortKeySpecList *sort_sequence,
                                   int num_bases, char **basenames)
 {
@@ -2211,13 +2212,13 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
         RSET rset_r;
 
         rset_l = rpn_search_structure (zh, zs->u.complex->s1,
-                                       attributeSet, stream,
+                                       attributeSet, stream, rset_nmem,
                                        sort_sequence,
                                        num_bases, basenames);
         if (rset_l == NULL)
             return NULL;
         rset_r = rpn_search_structure (zh, zs->u.complex->s2,
-                                       attributeSet, stream,
+                                       attributeSet, stream, rset_nmem,
                                        sort_sequence,
                                        num_bases, basenames);
         if (rset_r == NULL)
@@ -2229,17 +2230,17 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
         switch (zop->which)
         {
         case Z_Operator_and:
-            r = rsbool_create_and( NULL, /* FIXME - use a proper nmem */
+            r = rsbool_create_and( rset_nmem,
                     sizeof(struct it_key),  key_compare_it,
                     rset_l, rset_r, key_logdump_txt );
             break;
         case Z_Operator_or:
-            r = rsbool_create_or( NULL, /* FIXME - use a proper nmem */
+            r = rsbool_create_or( rset_nmem,
                     sizeof(struct it_key),  key_compare_it,
                     rset_l, rset_r, key_logdump_txt );
             break;
         case Z_Operator_and_not:
-            r = rsbool_create_not( NULL, /* FIXME - use a proper nmem */
+            r = rsbool_create_not( rset_nmem,
                     sizeof(struct it_key),  key_compare_it,
                     rset_l, rset_r, key_logdump_txt );
             break;
@@ -2264,7 +2265,7 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
                 
                 twosets[0] = rset_l;
                 twosets[1] = rset_r;
-                r=rsprox_create(NULL, /* FIXME - use a proper nmem */
+                r=rsprox_create(rset_nmem,
                          sizeof(struct it_key), key_compare_it,
                          key_get_seq, 
                          2, twosets, 
@@ -2309,7 +2310,7 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
             r = resultSetRef (zh, zs->u.simple->u.resultSetId);
             if (!r)
             {
-                r = rsnull_create (NULL);  /* FIXME - Use a proper nmem */
+                r = rsnull_create (rset_nmem);
                 zh->errCode = 30;
                 zh->errString =
                     nmem_strdup (stream, zs->u.simple->u.resultSetId);
@@ -2333,7 +2334,7 @@ static RSET rpn_search_structure (ZebraHandle zh, Z_RPNStructure *zs,
 }
 
 
-RSET rpn_search (ZebraHandle zh, NMEM nmem,
+RSET rpn_search (ZebraHandle zh, NMEM nmem, NMEM rset_nmem,
                  Z_RPNQuery *rpn, int num_bases, char **basenames, 
                  const char *setname,
                  ZebraSet sset)
@@ -2360,7 +2361,8 @@ RSET rpn_search (ZebraHandle zh, NMEM nmem,
     attrset = oid_getentbyoid (rpn->attributeSetId);
     attributeSet = attrset->value;
     rset = rpn_search_structure (zh, rpn->RPNStructure, attributeSet,
-                                 nmem, sort_sequence, num_bases, basenames);
+                                 nmem, rset_nmem,
+                                 sort_sequence, num_bases, basenames);
     if (!rset)
         return 0;
 
index 11ac101..aa2d16d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zsets.c,v 1.57 2004-08-20 14:44:46 heikki Exp $
+/* $Id: zsets.c,v 1.58 2004-08-30 12:32:24 heikki Exp $
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004
    Index Data Aps
 
@@ -46,6 +46,7 @@ struct zebra_set {
     char *name;
     RSET rset;
     NMEM nmem;
+    NMEM rset_nmem; /* for creating the rsets in */
     zint hits;
     int num_bases;
     char **basenames;
@@ -88,6 +89,7 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m,
     zebraSet->locked = 1;
     zebraSet->rpn = 0;
     zebraSet->nmem = m;
+    zebraSet->rset_nmem=nmem_create(); /* FIXME - where to free this ?? */
 
     zebraSet->num_bases = num_bases;
     zebraSet->basenames = 
@@ -96,8 +98,8 @@ ZebraSet resultSetAddRPN (ZebraHandle zh, NMEM m,
         zebraSet->basenames[i] = nmem_strdup (zebraSet->nmem, basenames[i]);
 
 
-    zebraSet->rset = rpn_search (zh, zebraSet->nmem, rpn,
-                                 zebraSet->num_bases,
+    zebraSet->rset = rpn_search (zh, zebraSet->nmem, zebraSet->rset_nmem,
+                                 rpn, zebraSet->num_bases,
                                  zebraSet->basenames, zebraSet->name,
                                  zebraSet);
     zh->hits = zebraSet->hits;
@@ -237,6 +239,7 @@ ZebraSet resultSetAdd (ZebraHandle zh, const char *name, int ov)
     s->term_entries = 0;
     s->hits = 0;
     s->rset = 0;
+    s->rset_nmem=0;
     s->nmem = 0;
     s->rpn = 0;
     return s;
@@ -254,7 +257,7 @@ ZebraSet resultSetGet (ZebraHandle zh, const char *name)
                 NMEM nmem = nmem_create ();
                 yaz_log (LOG_LOG, "research %s", name);
                 s->rset =
-                    rpn_search (zh, nmem, s->rpn, s->num_bases,
+                    rpn_search (zh, nmem, s->rset_nmem, s->rpn, s->num_bases,
                                 s->basenames, s->name, s);
                 nmem_destroy (nmem);
             }
@@ -272,6 +275,9 @@ void resultSetInvalidate (ZebraHandle zh)
         if (s->rset)
             rset_delete (s->rset);
         s->rset = 0;
+        if (s->rset_nmem)
+            nmem_destroy(s->rset_nmem);
+        s->rset_nmem=0;
     }
 }
 
@@ -312,6 +318,8 @@ void resultSetDestroy (ZebraHandle zh, int num, char **names,int *statuses)
                 nmem_destroy (s->nmem);
             if (s->rset)
                 rset_delete (s->rset);
+            if (s->rset_nmem)
+                nmem_destroy(s->rset_nmem);
             xfree (s->name);
             xfree (s);
         }