Multi-or result set.
[idzebra-moved-to-github.git] / index / trunc.c
index 4a0de39..41ab4aa 100644 (file)
@@ -4,7 +4,16 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: trunc.c,v $
- * Revision 1.1  1996-11-04 14:07:40  adam
+ * Revision 1.3  1996-12-20 11:07:14  adam
+ * Multi-or result set.
+ *
+ * Revision 1.2  1996/11/08 11:10:28  adam
+ * Buffers used during file match got bigger.
+ * Compressed ISAM support everywhere.
+ * Bug fixes regarding masking characters in queries.
+ * Redesigned Regexp-2 queries.
+ *
+ * Revision 1.1  1996/11/04 14:07:40  adam
  * Moved truncation code to trunc.c.
  *
  */
 #include <rsisamc.h>
 #include <rsnull.h>
 
+#define NEW_TRUNC 0
+
+#if NEW_TRUNC
+#include <rsm_or.h>
+#endif
+
 struct trunc_info {
     int  *ptr;
     int  *indx;
@@ -207,7 +222,7 @@ static RSET rset_trunc_r (ZServerInfo *zi, ISAM_P *isam_p, int from, int to,
             int n = ti->indx[ti->ptr[1]];
 
             rset_write (result, result_rsfd, ti->heap[ti->ptr[1]]);
-#if 0
+#if 1
 /* section that preserve all keys */
             heap_delete (ti);
             if (is_readkey (ispt[n], ti->tmpbuf))
@@ -249,7 +264,7 @@ static RSET rset_trunc_r (ZServerInfo *zi, ISAM_P *isam_p, int from, int to,
         for (i = to-from; --i >= 0; )
         {
             ispt[i] = isc_pp_open (zi->isamc, isam_p[from+i]);
-            if (isc_read_key (ispt[i], ti->tmpbuf))
+            if (isc_pp_read (ispt[i], ti->tmpbuf))
                 heap_insert (ti, ti->tmpbuf, i);
             else
                 isc_pp_close (ispt[i]);
@@ -270,7 +285,7 @@ static RSET rset_trunc_r (ZServerInfo *zi, ISAM_P *isam_p, int from, int to,
 /* section that preserve all keys with unique sysnos */
             while (1)
             {
-                if (!isc_read_key (ispt[n], ti->tmpbuf))
+                if (!isc_pp_read (ispt[n], ti->tmpbuf))
                 {
                     heap_delete (ti);
                     isc_pp_close (ispt[n]);
@@ -318,6 +333,7 @@ static int isamc_trunc_cmp (const void *p1, const void *p2)
 
 RSET rset_trunc (ZServerInfo *zi, ISAM_P *isam_p, int no)
 {
+    logf (LOG_LOG, "rset_trunc no=%d", no);
     if (zi->isam)
     {
         if (no < 1)
@@ -344,6 +360,20 @@ RSET rset_trunc (ZServerInfo *zi, ISAM_P *isam_p, int no)
             parms.is = zi->isamc;
             return rset_create (rset_kind_isamc, &parms);
         }
+#if NEW_TRUNC
+        else if (no < 2000)
+        {
+            rset_m_or_parms parms;
+
+            logf (LOG_LOG, "new_trunc");
+            parms.key_size = sizeof(struct it_key);
+            parms.cmp = key_compare;
+            parms.isc = zi->isamc;
+            parms.isam_positions = isam_p;
+            parms.no_isam_positions = no;
+            return rset_create (rset_kind_m_or, &parms);
+        }
+#endif
         qsort (isam_p, no, sizeof(*isam_p), isamc_trunc_cmp);
     }
     else