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
This commit is contained in:
angelo 1996-03-28 11:40:04 +00:00
parent 3cb6e48d78
commit 2ea8b69f12
4 changed files with 19 additions and 15 deletions

View File

@ -580,7 +580,7 @@ HIDDEN void do_key(char *fname, RecDes *r, TAG4INFO *tag_info, int n_keys)
tag_info[i].unique=0; tag_info[i].unique=0;
else else
tag_info[i].unique= i == 0 ? e4unique : r4unique_continue; 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].filter,".NOT. DELETED()"); /* Not available for DBIII and CLIPPER */
strcpy(tag_info[i].name,tiname) ; strcpy(tag_info[i].name,tiname) ;
if (strlen(tiname) < 8) 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 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; int rt=0,handle;
TAG4INFO tags[MaxKeys+1]; 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) if (rt == e4unique || rt == r4unique)
{ {
rt = 0; 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); rt = DB_clean_file(handle, (char*) filename, ff, r, vis);
else else
tags[0].unique = r4unique_continue; tags[0].unique = r4unique_continue;

View File

@ -53,7 +53,7 @@ extern "C" {
int DB_lockfile(int handle); /* Per sbloccare il record basta la DB_unlock()*/ 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_packfile(short vis, const char * filename, long eod);
int DB_packmemo(short vis, const char * filename); 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_build(const char * filename, RecDes *r);
int DB_get_error(void); int DB_get_error(void);
void DB_zero_error(void); void DB_zero_error(void);

View File

@ -1321,14 +1321,14 @@ int TBaseisamfile::is_valid()
TLocalisamfile::TLocalisamfile( TLocalisamfile::TLocalisamfile(
int logicnum, // @parm Numero del logico del file int logicnum, // @parm Numero del logico del file
bool linkrecinst) // @parm Puo assumere i valori: bool linkrecinst) // @parm Puo assumere i valori:
// //
// @flag 0 | Istanzio un nuovo file fisico (default) // @flag 0 | Istanzio un nuovo file fisico (default)
// @flag 1 | Utilizza, se possibile, un file gia' esistente // @flag 1 | Utilizza, se possibile, un file gia' esistente
// @flag 2 | Crea un file temporaneo // @flag 2 | Crea un file temporaneo
: TBaseisamfile(logicnum, linkrecinst == TRUE) : TBaseisamfile(logicnum, linkrecinst == TRUE)
// @comm ATTENZIONE: <p linkrecinst> puo' valere 0, 1, 2. // @comm ATTENZIONE: <p linkrecinst> 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 // 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 // @rdesc Ritorna NOERR se l'operazione di compattamento e' riuscita, altrimenti il codice di
// di errore generato (vedi <t TIsamerr>). // di errore generato (vedi <t TIsamerr>).
int TSystemisamfile::packindex( 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 <mf TSystemisamfile::packfile> // @xref <mf TSystemisamfile::packfile>
@ -2039,7 +2040,7 @@ int TSystemisamfile::packindex(
d.get(num(),_nolock, _nordir,_sysdirop); d.get(num(),_nolock, _nordir,_sysdirop);
bool is_com = d.is_com(); bool is_com = d.is_com();
d.get(num(),_nolock, is_com ? _comdir : _nordir); 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) err = get_error(err);
if (err != NOERR) error_box("Errore in compattamento indici.\nFile %d : %d", num(),err); if (err != NOERR) error_box("Errore in compattamento indici.\nFile %d : %d", num(),err);
else else
@ -2052,12 +2053,12 @@ int TSystemisamfile::packindex(
return err; return err;
} }
int TSystemisamfile::pack(bool vis) int TSystemisamfile::pack(bool vis, bool ask)
{ {
int err=NOERR; int err=NOERR;
if ((err=packfile(vis))==NOERR) if ((err=packfile(vis))==NOERR)
err=packindex(vis); err=packindex(vis,ask);
setstatus(err); setstatus(err);
return err; return err;
} }
@ -2244,6 +2245,9 @@ int TSystemisamfile::load(
if (write() == NOERR) r++; if (write() == NOERR) r++;
else else
{ {
#ifdef DBG
yesnofatal_box("Numero linea relativa all'errore: %ld",r+e+1);
#endif
e++; e++;
last = status(); last = status();
} }

View File

@ -673,11 +673,11 @@ public:
int update(TTrec& newrec, bool vis = TRUE); int update(TTrec& newrec, bool vis = TRUE);
// @cmember Esegue sia <mf TSystemisamfile::packfile> e <mf TSystemisamfile::packindex> // @cmember Esegue sia <mf TSystemisamfile::packfile> e <mf TSystemisamfile::packindex>
int pack(bool vis = TRUE); int pack(bool vis = TRUE, bool ask = TRUE);
// @cmember Rimuove fisicamente i record cancellati // @cmember Rimuove fisicamente i record cancellati
int packfile(bool vis = TRUE); int packfile(bool vis = TRUE);
// @cmember Rimuove fisicamente gli indici cancellati // @cmember Rimuove fisicamente gli indici cancellati
int packindex(bool vis = TRUE); int packindex(bool vis = TRUE, bool ask = TRUE);
// @cmember Importa un file ascii // @cmember Importa un file ascii
int load(const char* from, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool extended = FALSE) ; int load(const char* from, char fs = '|', char fd = '\0', char rs = '\n', bool vis = TRUE, bool extended = FALSE) ;