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;
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;

View File

@ -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);

View File

@ -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: <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
{
@ -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 <t TIsamerr>).
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>
@ -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();
}

View File

@ -673,11 +673,11 @@ public:
int update(TTrec& newrec, bool vis = TRUE);
// @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
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) ;