X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fkinput.c;h=1c7d9083a76ff241d4bd6bbe608d88fcdf8d9977;hb=93fc01961d210c8ada1d3147763da8f7293dcbfb;hp=4a635c0e06b059095d8569cf8b21a0fb4104d967;hpb=4f2ca550b3aeaf42480ba84e196fd930ba407a18;p=idzebra-moved-to-github.git diff --git a/index/kinput.c b/index/kinput.c index 4a635c0..1c7d908 100644 --- a/index/kinput.c +++ b/index/kinput.c @@ -208,6 +208,7 @@ struct heap_info { ISAMC isamc; ISAMS isams; ISAMH isamh; + ISAMD isamd; }; struct heap_info *key_heap_init (int nkeys, @@ -478,6 +479,60 @@ int heap_inph (struct heap_info *hi) return 0; } +int heap_inpd (struct heap_info *hi) +{ + struct heap_cread_info hci; + ISAMD_I isamd_i = (ISAMD_I) xmalloc (sizeof(*isamd_i)); + + hci.key = (char *) xmalloc (KEY_SIZE); + hci.mode = 1; + hci.hi = hi; + hci.more = heap_read_one (hi, hci.cur_name, hci.key); + + isamd_i->clientData = &hci; + isamd_i->read_item = heap_cread_item; + + while (hci.more) + { + char this_name[INP_NAME_MAX]; + ISAMD_P isamd_p, isamd_p2; + char *dict_info; + + strcpy (this_name, hci.cur_name); + assert (hci.cur_name[1]); + no_diffs++; + if ((dict_info = dict_lookup (hi->dict, hci.cur_name))) + { + memcpy (&isamd_p, dict_info+1, sizeof(ISAMD_P)); + isamd_p2 = isamd_append (hi->isamd, isamd_p, isamd_i); + if (!isamd_p2) + { + no_deletions++; + if (!dict_delete (hi->dict, this_name)) + abort(); + } + else + { + no_updates++; + if (isamd_p2 != isamd_p) + dict_insert (hi->dict, this_name, + sizeof(ISAMD_P), &isamd_p2); + } + } + else + { + isamd_p = isamd_append (hi->isamd, 0, isamd_i); + no_insertions++; + dict_insert (hi->dict, this_name, sizeof(ISAMD_P), &isamd_p); + } + } + xfree (isamd_i); + return 0; +} + + + + int heap_inp (struct heap_info *hi) { char *info; @@ -591,6 +646,7 @@ void key_input (BFiles bfs, int nkeys, int cache) ISAMC isamc = NULL; ISAMS isams = NULL; ISAMH isamh = NULL; + ISAMD isamd = NULL; struct key_file **kf; char rbuf[1024]; int i, r; @@ -619,8 +675,9 @@ void key_input (BFiles bfs, int nkeys, int cache) } if (res_get_match (common_resource, "isam", "s", NULL)) { + struct ISAMS_M_s isams_m; isams = isams_open (bfs, FNAME_ISAMS, 1, - key_isams_m (common_resource)); + key_isams_m (common_resource, &isams_m)); if (!isams) { logf (LOG_FATAL, "isams_open fail"); @@ -647,10 +704,22 @@ void key_input (BFiles bfs, int nkeys, int cache) exit (1); } } + else if (res_get_match (common_resource, "isam", "d", NULL)) + { + struct ISAMD_M_s isamd_m; + isamd = isamd_open (bfs, FNAME_ISAMD, 1, + key_isamd_m (common_resource,&isamd_m)); + if (!isamd) + { + logf (LOG_FATAL, "isamd_open fail"); + exit (1); + } + } else { + struct ISAMC_M_s isamc_m; isamc = isc_open (bfs, FNAME_ISAMC, 1, - key_isamc_m (common_resource)); + key_isamc_m (common_resource, &isamc_m)); if (!isamc) { logf (LOG_FATAL, "isc_open fail"); @@ -676,6 +745,7 @@ void key_input (BFiles bfs, int nkeys, int cache) hi->isamc = isamc; hi->isams = isams; hi->isamh = isamh; + hi->isamd = isamd; for (i = 1; i<=nkeys; i++) if ((r = key_file_read (kf[i], rbuf))) @@ -688,6 +758,8 @@ void key_input (BFiles bfs, int nkeys, int cache) heap_inp (hi); else if (isamh) heap_inph (hi); + else if (isamd) + heap_inpd (hi); dict_close (dict); if (isam) @@ -698,6 +770,8 @@ void key_input (BFiles bfs, int nkeys, int cache) isams_close (isams); if (isamh) isamh_close (isamh); + if (isamd) + isamd_close (isamd); for (i = 1; i<=nkeys; i++) { @@ -709,13 +783,25 @@ void key_input (BFiles bfs, int nkeys, int cache) logf (LOG_LOG, "Updates. . . . .%7d", no_updates); logf (LOG_LOG, "Deletions. . . .%7d", no_deletions); logf (LOG_LOG, "Insertions . . .%7d", no_insertions); + + xmalloc_trav("unfreed"); /* while hunting leaks */ } /* * $Log: kinput.c,v $ - * Revision 1.35 1999-06-30 15:07:23 heikki + * Revision 1.38 1999-08-18 08:38:04 heikki + * Memory leak hunting + * + * Revision 1.37 1999/07/14 13:21:34 heikki + * Added isam-d files. Compiles (almost) clean. Doesn't work at all + * + * Revision 1.36 1999/07/14 10:59:26 adam + * Changed functions isc_getmethod, isams_getmethod. + * Improved fatal error handling (such as missing EXPLAIN schema). + * + * Revision 1.35 1999/06/30 15:07:23 heikki * Adding isamh stuff * * Revision 1.34 1999/05/26 07:49:13 adam