Honor position attribute, i.e. allow first-in-field search. To
[idzebra-moved-to-github.git] / index / index.h
index aa33cc5..a147563 100644 (file)
@@ -1,5 +1,5 @@
-/* $Id: index.h,v 1.165 2006-05-30 13:21:14 adam Exp $
-   Copyright (C) 1995-2005
+/* $Id: index.h,v 1.175 2006-09-08 14:40:52 adam Exp $
+   Copyright (C) 1995-2006
    Index Data ApS
 
 This file is part of the Zebra server.
@@ -15,9 +15,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 INDEX_H
@@ -46,6 +46,7 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "zinfo.h"
 #include <passwddb.h>
 #include <rset.h>
+#include <zebramap.h>
 
 YAZ_BEGIN_CDECL
 
@@ -104,6 +105,7 @@ int key_compare (const void *p1, const void *p2);
 void key_init(struct it_key *k);
 char *key_print_it (const void *p, char *buf);
 zint key_get_seq (const void *p);
+zint key_get_segment (const void *p);
 int key_compare_it (const void *p1, const void *p2);
 int key_qsort_compare (const void *p1, const void *p2);
 void key_logdump (int mask, const void *p);
@@ -148,25 +150,6 @@ void zebra_lock_prefix (Res res, char *dst);
 int key_SU_decode (int *ch, const unsigned char *out);
 int key_SU_encode (int ch, char *out);
 
-#define ENCODE_BUFLEN 768
-struct encode_info {
-    int  sysno;  /* previously written values for delta-compress */
-    int  seqno;
-    int  cmd;
-    int prevsys; /* buffer for skipping insert/delete pairs */
-    int prevseq;
-    int prevcmd;
-    int keylen; /* tells if we have an unwritten key in buf, and how long*/
-    void *encode_handle;
-    void *decode_handle;
-    char buf[ENCODE_BUFLEN];
-};
-
-void encode_key_init (struct encode_info *i);
-char *encode_key_int (int d, char *bp);
-void encode_key_write (char *k, struct encode_info *i, FILE *outf);
-void encode_key_flush (struct encode_info *i, FILE *outf);
-
 typedef struct zebra_set *ZebraSet;
 
 typedef struct zebra_rank_class {
@@ -260,6 +243,7 @@ struct zebra_session {
     int  shadow_enable;
 
     int m_staticrank;
+    int m_segment_indexing;
 
     zint records_inserted;
     zint records_updated;
@@ -368,16 +352,29 @@ void extract_get_fname_tmp (ZebraHandle zh, char *fname, int no);
 
 void zebra_index_merge (ZebraHandle zh);
 
-ZEBRA_RES buffer_extract_record (ZebraHandle zh, 
-                                const char *buf, size_t buf_size,
-                                int delete_flag,
-                                int test_mode, 
-                                const char *recordType,
-                                SYSNO *sysno,
-                                const char *match_criteria,
-                                const char *fname,
-                                int force_update,
-                                int allow_update);
+ZEBRA_RES zebra_buffer_extract_record(ZebraHandle zh, 
+                                      const char *buf, size_t buf_size,
+                                      int delete_flag,
+                                      int test_mode, 
+                                      const char *recordType,
+                                      SYSNO *sysno,
+                                      const char *match_criteria,
+                                      const char *fname,
+                                      int force_update,
+                                      int allow_update);
+
+ZEBRA_RES zebra_extract_record_stream(ZebraHandle zh, 
+                                      struct ZebraRecStream *stream,
+                                      int delete_flag,
+                                      int test_mode, 
+                                      const char *recordType,
+                                      SYSNO *sysno,
+                                      const char *match_criteria,
+                                      const char *fname,
+                                      int force_update,
+                                      int allow_update,
+                                      RecType recType,
+                                      void *recTypeClientData);
 
 #if 0
 int extract_rec_in_mem (ZebraHandle zh, const char *recordType,
@@ -389,23 +386,10 @@ int extract_rec_in_mem (ZebraHandle zh, const char *recordType,
 #endif
 void extract_flushWriteKeys (ZebraHandle zh, int final);
 
-struct zebra_fetch_control {
-    off_t offset_end;
-    off_t record_offset;
-    off_t record_int_pos;
-    const char *record_int_buf;
-    int record_int_len;
-    int fd;
-};
-
-int zebra_record_ext_read (void *fh, char *buf, size_t count);
-off_t zebra_record_ext_seek (void *fh, off_t offset);
-off_t zebra_record_ext_tell (void *fh);
-off_t zebra_record_int_seek (void *fh, off_t offset);
-off_t zebra_record_int_tell (void *fh);
-int zebra_record_int_read (void *fh, char *buf, size_t count);
-void zebra_record_int_end (void *fh, off_t offset);
-
+YAZ_EXPORT void zebra_create_stream_mem(struct ZebraRecStream *stream,
+                                        const char *buf, size_t sz);
+YAZ_EXPORT void zebra_create_stream_fd(struct ZebraRecStream *stream,
+                                       int fd, off_t start_offset);
 void print_rec_keys(ZebraHandle zh, zebra_rec_keys_t reckeys);
 
 ZEBRA_RES zebra_snippets_rec_keys(ZebraHandle zh, zebra_rec_keys_t reckeys,
@@ -413,14 +397,7 @@ ZEBRA_RES zebra_snippets_rec_keys(ZebraHandle zh, zebra_rec_keys_t reckeys,
 ZEBRA_RES zebra_snippets_hit_vector(ZebraHandle zh, const char *setname,
                                    zint sysno, zebra_snippets *snippets);
 
-void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno,
-                              int cmd, zebra_rec_keys_t reckeys,
-                             zint staticrank);
-void extract_flushSortKeys (ZebraHandle zh, SYSNO sysno,
-                            int cmd, zebra_rec_keys_t skp);
-void extract_schema_add (struct recExtractCtrl *p, Odr_oid *oid);
-void extract_token_add (RecWord *p);
-int explain_extract (void *handle, Record rec, data1_node *n);
+ZEBRA_RES zebra_extract_explain(void *handle, Record rec, data1_node *n);
 
 ZEBRA_RES zebra_extract_file(ZebraHandle zh, SYSNO *sysno, const char *fname,
                             int deleteFlag);
@@ -462,6 +439,7 @@ ZEBRA_RES zebra_apt_get_ord(ZebraHandle zh,
 
 ZEBRA_RES zebra_attr_list_get_ord(ZebraHandle zh,
                                   Z_AttributeList *attr_list,
+                                  zinfo_index_category_t cat,
                                   int index_type,
                                   oid_value curAttributeSet,
                                   int *ord);
@@ -475,6 +453,9 @@ ZEBRA_RES zebra_update_file_match(ZebraHandle zh, const char *path);
 ZEBRA_RES zebra_update_from_path(ZebraHandle zh, const char *path);
 ZEBRA_RES zebra_delete_from_path(ZebraHandle zh, const char *path);
 
+#define FIRST_IN_FIELD_STR "\001^"
+#define FIRST_IN_FIELD_LEN 2
+
 YAZ_END_CDECL
 
 #endif