Report 'too many characters in search..'
[idzebra-moved-to-github.git] / include / rset.h
index 23f7d0d..f6d4bc1 100644 (file)
@@ -1,8 +1,5 @@
-/* $Id: rset.h,v 1.52 2005-05-24 11:35:41 adam Exp $
-   Copyright (C) 1995-2005
-   Index Data ApS
-
-This file is part of the Zebra server.
+/* This file is part of the Zebra server.
+   Copyright (C) 1994-2011 Index Data
 
 Zebra is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
@@ -15,9 +12,9 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with Zebra; see the file LICENSE.zebra.  If not, write to the
-Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
 */
 
 #ifndef RSET_H
@@ -32,30 +29,45 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 
 YAZ_BEGIN_CDECL
 
-typedef struct rsfd *RSFD; /* Rset "file descriptor" */
-typedef struct rset *RSET; /* Result set */
+typedef struct rsfd *RSFD;
+typedef struct rset *RSET;
+
+struct ord_list {
+    int ord;
+    struct ord_list *next;
+};
 
+struct ord_list *ord_list_create(NMEM nmem);
+struct ord_list *ord_list_append(NMEM nmem, struct ord_list *list, int ord);
+struct ord_list *ord_list_dup(NMEM nmem, struct ord_list *list);
+void ord_list_print(struct ord_list *list);
 
 /** 
  * rset_term is all we need to know of a term to do ranking etc. 
  * As far as the rsets are concerned, it is just a dummy pointer to
  * be passed around.
  */
-
 struct rset_term {
-    /** the term itself */
-    char *name;
-    char *flags;
-    int  type;
-    /** the rset corresponding to this term */
-    RSET rset;
-    /** private stuff for the ranking algorithm */
-    void *rankpriv;
+    char *name;    /** the term itself in internal encoding (UTF-8/raw) */
+    char *flags;   /** flags for rank method */
+    int  type;     /** Term_type from RPN Query. Actually this
+                      is Z_Term_general, Z_Term_numeric,
+                      Z_Term_characterString, ..
+                      This info is used to return encoded term back for
+                      search-result-1 .
+                  */
+    int reg_type;  /** register type */
+    RSET rset;     /** the rset corresponding to this term */
+    void *rankpriv;/** private stuff for the ranking algorithm */
+    zint hits_limit;/** limit for hits if > 0 */
+    char *ref_id;  /** reference for this term */
+    struct ord_list *ol;
 };
 
 typedef struct rset_term *TERMID; 
 TERMID rset_term_create (const char *name, int length, const char *flags,
-                        int type, NMEM nmem);
+                        int type, NMEM nmem, struct ord_list *ol,
+                        int reg_type, zint hits_limit, const char *ref_id);
 
 /** rsfd is a "file descriptor" for reading from a rset */
 struct rsfd {  /* the stuff common to all rsfd's. */
@@ -103,13 +115,6 @@ int rset_default_forward(RSFD rfd, void *buf, TERMID *term,
 /** rset_default_read implements a generic read */
 int rset_default_read(RSFD rfd, void *buf, TERMID *term);
 
-/** rset_get_no_terms is a getterms function for those that don't have any */
-void rset_get_no_terms(RSET ct, TERMID *terms, int maxterms, int *curterm);
-
-/** 
- * rset_get_one_term is a getterms function for those rsets that have
- * exactly one term, like all rsisamX types. 
- */
 void rset_get_one_term(RSET ct,TERMID *terms,int maxterms,int *curterm);
 
 /**
@@ -126,6 +131,7 @@ struct rset_key_control {
     int (*cmp)(const void *p1, const void *p2);
     void (*key_logdump_txt) (int logmask, const void *p, const char *txt);
     zint (*getseq)(const void *p);
+    zint (*get_segment)(const void *p);
     int (*filter_func)(const void *p, void *data);
     void *filter_data;
     void (*inc)(struct rset_key_control *kc);
@@ -145,15 +151,13 @@ typedef struct rset
 {
     const struct rset_control *control;
     struct rset_key_control *keycontrol;
-    int  refcount;  /* reference count */
-    void *priv;     /* stuff private to the given type of rset */
-    NMEM nmem;      /* nibble memory for various allocs */
-    char my_nmem;   /* Should the nmem be destroyed with the rset?  */
-                    /* 1 if created with it, 0 if passed from above */
-    RSFD free_list; /* all rfd's allocated but not currently in use */
-    RSFD use_list;  /* all rfd's in use */
-    int scope;      /* On what level do we count hits and compare them? */
-    TERMID term;    /* the term thing for ranking etc */
+    int  refcount;   /* reference count */
+    void *priv;      /* stuff private to the given type of rset */
+    NMEM nmem;       /* nibble memory for various allocs */
+    RSFD free_list;  /* all rfd's allocated but not currently in use */
+    RSFD use_list;   /* all rfd's in use */
+    int scope;       /* On what level do we count hits and compare them? */
+    TERMID term;     /* the term thing for ranking etc */
     int no_children;
     RSET *children;
     zint hits_limit;
@@ -221,33 +225,27 @@ void rset_close(RSFD rfd);
 /** rset_count counts or estimates the keys in it*/
 zint rset_count(RSET rs);
 
-RSET rstemp_create(NMEM nmem, struct rset_key_control *kcontrol,
-                    int scope, const char *temp_path, TERMID term);
-
-RSET rsnull_create(NMEM nmem, struct rset_key_control *kcontrol, TERMID term);
-
-RSET rsbool_create_and(NMEM nmem, struct rset_key_control *kcontrol,
-                      int scope, RSET rset_l, RSET rset_r);
+RSET rset_create_temp(NMEM nmem, struct rset_key_control *kcontrol,
+                      int scope, const char *temp_path, TERMID term);
 
-RSET rsbool_create_or(NMEM nmem, struct rset_key_control *kcontrol,
-                     int scope, RSET rset_l, RSET rset_r);
+RSET rset_create_null(NMEM nmem, struct rset_key_control *kcontrol, TERMID term);
 
-RSET rsbool_create_not(NMEM nmem, struct rset_key_control *kcontrol,
-                      int scope, RSET rset_l, RSET rset_r);
+RSET rset_create_not(NMEM nmem, struct rset_key_control *kcontrol,
+                     int scope, RSET rset_l, RSET rset_r);
 
-RSET rsbetween_create(NMEM nmem, struct rset_key_control *kcontrol,
-                     int scope, RSET rset_l, RSET rset_m, RSET rset_r, 
-                     RSET rset_attr);
+RSET rset_create_between(NMEM nmem, struct rset_key_control *kcontrol,
+                         int scope, RSET rset_l, RSET rset_m, RSET rset_r, 
+                         RSET rset_attr);
 
-RSET rsmulti_or_create(NMEM nmem, struct rset_key_control *kcontrol,
-                      int scope, TERMID termid, int no_rsets, RSET* rsets);
+RSET rset_create_or(NMEM nmem, struct rset_key_control *kcontrol,
+                          int scope, TERMID termid, int no_rsets, RSET* rsets);
 
-RSET rsmulti_and_create(NMEM nmem, struct rset_key_control *kcontrol,
-                       int scope, int no_rsets, RSET* rsets);
+RSET rset_create_and(NMEM nmem, struct rset_key_control *kcontrol,
+                     int scope, int no_rsets, RSET* rsets);
 
-RSET rsprox_create(NMEM nmem, struct rset_key_control *kcontrol,
-                  int scope, int rset_no, RSET *rset,
-                  int ordered, int exclusion, int relation, int distance);
+RSET rset_create_prox(NMEM nmem, struct rset_key_control *kcontrol,
+                      int scope, int rset_no, RSET *rset,
+                      int ordered, int exclusion, int relation, int distance);
 
 RSET rsisamb_create(NMEM nmem, struct rset_key_control *kcontrol,
                    int scope, ISAMB is, ISAM_P pos, TERMID term);
@@ -260,6 +258,17 @@ RSET rsisams_create(NMEM nmem, struct rset_key_control *kcontrol,
 
 void rset_visit(RSET rset, int level);
 
+void rset_set_hits_limit(RSET rs, zint l);
+
 YAZ_END_CDECL
 
 #endif
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+