From 2ea8b69f12fbdf945b021f2bdc5ec5a455cbe801 Mon Sep 17 00:00:00 2001 From: angelo Date: Thu, 28 Mar 1996 11:40:04 +0000 Subject: [PATCH] isam.cpp, isam.h: aggiunto un nuovo parametro di default alla TSystemisamfile::pack() e alla TSystemisamfile::packindex(). Il parametro aggiunto fa si' che la routine chieda o meno il recupero dei record duplicati nel caso si sia riscontrato un errore nella ricostruzione dell'indice. codeb.c, codeb.h: aggiunto il parametro ask alla funzione DB_packindex(), per il motivo di cui sopra. git-svn-id: svn://10.65.10.50/trunk@2704 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/codeb.c | 6 +++--- include/codeb.h | 2 +- include/isam.cpp | 22 +++++++++++++--------- include/isam.h | 4 ++-- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/include/codeb.c b/include/codeb.c index caf498c13..44883a91a 100755 --- a/include/codeb.c +++ b/include/codeb.c @@ -580,7 +580,7 @@ HIDDEN void do_key(char *fname, RecDes *r, TAG4INFO *tag_info, int n_keys) tag_info[i].unique=0; else tag_info[i].unique= i == 0 ? e4unique : r4unique_continue; -// tag_info[i].unique=e4unique; +/* tag_info[i].unique=e4unique; */ strcpy(tag_info[i].filter,".NOT. DELETED()"); /* Not available for DBIII and CLIPPER */ strcpy(tag_info[i].name,tiname) ; if (strlen(tiname) < 8) @@ -819,7 +819,7 @@ int DB_clean_file(int handle, char * filename, char * ff, RecDes * r, short vis) /*------------------------------------------------------------------------- Compatta gli indici --------------------------------------------------------------------------*/ -int DB_packindex(short vis, const char * filename, RecDes *r, long *peod) +int DB_packindex(short vis, const char * filename, RecDes *r, long *peod, bool ask) { int rt=0,handle; TAG4INFO tags[MaxKeys+1]; @@ -857,7 +857,7 @@ int DB_packindex(short vis, const char * filename, RecDes *r, long *peod) if (rt == e4unique || rt == r4unique) { rt = 0; - if (yesno_box("Sono stati rilevati alcuni record duplicati devo eliminarli ?")) + if (!ask || yesno_box("Sono stati rilevati alcuni record duplicati devo eliminarli ?")) rt = DB_clean_file(handle, (char*) filename, ff, r, vis); else tags[0].unique = r4unique_continue; diff --git a/include/codeb.h b/include/codeb.h index c99ec10e4..e87cd07ba 100755 --- a/include/codeb.h +++ b/include/codeb.h @@ -53,7 +53,7 @@ extern "C" { int DB_lockfile(int handle); /* Per sbloccare il record basta la DB_unlock()*/ int DB_packfile(short vis, const char * filename, long eod); int DB_packmemo(short vis, const char * filename); - int DB_packindex(short vis, const char * filename, RecDes *r, long *peod ); + int DB_packindex(short vis, const char * filename, RecDes *r, long *peod, bool ask ); int DB_build(const char * filename, RecDes *r); int DB_get_error(void); void DB_zero_error(void); diff --git a/include/isam.cpp b/include/isam.cpp index 3a08e9ecf..7ce91b2dc 100755 --- a/include/isam.cpp +++ b/include/isam.cpp @@ -1321,14 +1321,14 @@ int TBaseisamfile::is_valid() TLocalisamfile::TLocalisamfile( int logicnum, // @parm Numero del logico del file bool linkrecinst) // @parm Puo assumere i valori: - // - // @flag 0 | Istanzio un nuovo file fisico (default) - // @flag 1 | Utilizza, se possibile, un file gia' esistente - // @flag 2 | Crea un file temporaneo + // + // @flag 0 | Istanzio un nuovo file fisico (default) + // @flag 1 | Utilizza, se possibile, un file gia' esistente + // @flag 2 | Crea un file temporaneo : TBaseisamfile(logicnum, linkrecinst == TRUE) // @comm ATTENZIONE:

puo' valere 0, 1, 2. -// Se vale 2 significa che si sta costruendo un file temporaneo +// Se vale 2 significa che si sta costruendo un file temporaneo // per cui linkrecinst va' considerato FALSE { @@ -2023,7 +2023,8 @@ int TSystemisamfile::packfile( // @rdesc Ritorna NOERR se l'operazione di compattamento e' riuscita, altrimenti il codice di // di errore generato (vedi ). int TSystemisamfile::packindex( - bool vis) // @parm Indica se visualizzare lo stato dell'operazione + bool vis, // @parm Indica se visualizzare lo stato dell'operazione + bool ask) // @parm Indica se chiedere il recupero dei record duplicati // @xref @@ -2039,7 +2040,7 @@ int TSystemisamfile::packindex( d.get(num(),_nolock, _nordir,_sysdirop); bool is_com = d.is_com(); d.get(num(),_nolock, is_com ? _comdir : _nordir); - err=DB_packindex(vis,d.name(),r.rec(),&peod); + err=DB_packindex(vis,d.name(),r.rec(),&peod,ask); if (err != NOERR) err = get_error(err); if (err != NOERR) error_box("Errore in compattamento indici.\nFile %d : %d", num(),err); else @@ -2052,12 +2053,12 @@ int TSystemisamfile::packindex( return err; } -int TSystemisamfile::pack(bool vis) +int TSystemisamfile::pack(bool vis, bool ask) { int err=NOERR; if ((err=packfile(vis))==NOERR) - err=packindex(vis); + err=packindex(vis,ask); setstatus(err); return err; } @@ -2244,6 +2245,9 @@ int TSystemisamfile::load( if (write() == NOERR) r++; else { +#ifdef DBG + yesnofatal_box("Numero linea relativa all'errore: %ld",r+e+1); +#endif e++; last = status(); } diff --git a/include/isam.h b/include/isam.h index 135a94232..4e38bd3b0 100755 --- a/include/isam.h +++ b/include/isam.h @@ -673,11 +673,11 @@ public: int update(TTrec& newrec, bool vis = TRUE); // @cmember Esegue sia e - int pack(bool vis = TRUE); + int pack(bool vis = TRUE, bool ask = TRUE); // @cmember Rimuove fisicamente i record cancellati int packfile(bool vis = TRUE); // @cmember Rimuove fisicamente gli indici cancellati - int packindex(bool vis = TRUE); + int packindex(bool vis = TRUE, bool ask = TRUE); // @cmember Importa un file ascii int load(const char* from, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool extended = FALSE) ;