Corretto errore in rete

git-svn-id: svn://10.65.10.50/trunk@1608 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1995-07-17 16:56:51 +00:00
parent c0c868a2ae
commit 8f48962566
2 changed files with 1021 additions and 1031 deletions

View File

@ -87,6 +87,7 @@ void DB_init(void)
code_base.default_unique_error=e4unique; code_base.default_unique_error=e4unique;
code_base.safety=0; code_base.safety=0;
code_base.lock_attempts=1; code_base.lock_attempts=1;
// code_base.optimize_write = 0;
u4ncpy(code_base.date_format,"CCYYMMDD",sizeof(code_base.date_format)); u4ncpy(code_base.date_format,"CCYYMMDD",sizeof(code_base.date_format));
} }
@ -414,11 +415,26 @@ int DB_delkey(int handle, char* key, long recno)
#endif #endif
if (rt == 0) if (rt == 0)
rt=t4remove_calc(t,recno); rt=t4remove_calc(t,recno);
d4flush(dbdata[handle]);
i4unlock(i); i4unlock(i);
return(rt); return(rt);
} }
/*-------------------------------------------------------------------------
cancella dall'indice corrente la chiave specificata
--------------------------------------------------------------------------*/
int DB_flush(int handle)
{
int rt;
while ((rt = d4flush(dbdata[handle])) == r4locked)
#ifdef DBG
message_box("Sono in attesa nella DB_add (d4append)");
#else
u4delay_sec();
#endif
return rt;
}
/*------------------------------------------------------------------------- /*-------------------------------------------------------------------------
riscrive il record attuale riscrive il record attuale
--------------------------------------------------------------------------*/ --------------------------------------------------------------------------*/
@ -432,13 +448,21 @@ int DB_rewrite(int handle)
#else #else
u4delay_sec(); u4delay_sec();
#endif #endif
d4flush(dbdata[handle]); if (rt == 0)
rt=DB_unlock(handle); {
while ((rt = d4flush(dbdata[handle])) == r4locked)
#ifdef DBG
message_box("Sono in attesa nella DB_add (d4append)");
#else
u4delay_sec();
#endif
}
if (rt == e4unique) if (rt == e4unique)
{ {
DB_get_error(); DB_get_error();
fatal_box("Errore : chiave duplicata nell' indice "); fatal_box("Errore : chiave duplicata nell' indice %d", dbdata[handle]->rec_num + 1);
} }
rt=DB_unlock(handle);
return (rt); return (rt);
} }
@ -448,11 +472,16 @@ int DB_rewrite(int handle)
--------------------------------------------------------------------------*/ --------------------------------------------------------------------------*/
int DB_add(int handle) int DB_add(int handle)
{ {
int rt,ntag=1; int rt;
DATA4 * data = dbdata[handle]; DATA4 * data = dbdata[handle];
TAG4* tag_on;
if (data==0) return(-1); if (data==0) return(-1);
/* while (file4lock(&data->file, L4LOCK_POS_OLD, 1L) == r4locked)
#ifdef DBG
message_box("Sono in attesa nella DB_add");
#else
u4delay_sec();
#endif
while ((rt = d4append_start(data,0)) == r4locked) while ((rt = d4append_start(data,0)) == r4locked)
#ifdef DBG #ifdef DBG
message_box("Sono in attesa nella DB_add (d4append_start)"); message_box("Sono in attesa nella DB_add (d4append_start)");
@ -468,7 +497,6 @@ int DB_add(int handle)
#else #else
u4delay_sec(); u4delay_sec();
#endif #endif
}
if (rt == e4unique) if (rt == e4unique)
{ {
DB_get_error(); DB_get_error();
@ -477,58 +505,19 @@ int DB_add(int handle)
else else
rt = _isreinsert; rt = _isreinsert;
} }
d4flush(data);
DB_unlock(handle);
*/
while ((rt = d4lock_append(data)) == r4locked)
#ifdef DBG
message_box("Sono in attesa nella DB_add (d4lock_append)");
#else
u4delay_sec();
#endif
if ((rt=d4append_data(data)) == 0)
{
while ((rt = d4lock_index(data)) == r4locked)
#ifdef DBG
message_box("Sono in attesa nella DB_add (d4lock_index)");
#else
u4delay_sec();
#endif
/* Ora aggiunge le chiavi */
for( tag_on = 0;rt == 0;ntag++ )
{
tag_on = d4tag_next( data, tag_on ) ;
if ( !tag_on )
break ;
rt = t4add_calc( tag_on, data->rec_num ) ;
if ( rt < 0 || rt == r4unique )
{
/* Remove the keys which were just added */
for(;;)
{
tag_on = d4tag_prev( data, tag_on ) ;
if ( !tag_on )
break ;
t4remove_calc( tag_on, data->rec_num ) ;
}
d4blank(data);
d4delete(data);
d4write_data(data,d4recno(data));
data->rec_num = 0;
if (rt == r4unique || rt == e4unique)
{
code_base.error_code = 0;
if (ntag == 1)
rt = _isreinsert;
else else
fatal_box("Errore : chiave duplicata nell' indice %d", ntag); if (rt == 0)
{
while ((rt = d4flush(data)) == r4locked)
#ifdef DBG
message_box("Sono in attesa nella DB_add (d4append)");
#else
u4delay_sec();
#endif
} }
} }
} DB_unlock(handle);
} file4unlock(&data->file, L4LOCK_POS_OLD, 1L);
if (!rt ) d4update_header(data, 1, 1);
d4unlock(data);
return(rt); return(rt);
} }
@ -541,7 +530,7 @@ int DB_lockfile(int handle)
if(dbdata[handle]==0) return(-1); if(dbdata[handle]==0) return(-1);
rt = d4lock_file(dbdata[handle]); rt = d4lock_file(dbdata[handle]);
if (rt==0) rt=d4lock_index(dbdata[handle]); if (rt>=0) rt=d4lock_index(dbdata[handle]);
return(rt); return(rt);
} }

View File

@ -47,6 +47,7 @@ extern "C" {
int DB_delete(int handle); int DB_delete(int handle);
int DB_recall(int handle); int DB_recall(int handle);
int DB_delkey(int handle, char* key, long recno); int DB_delkey(int handle, char* key, long recno);
int DB_flush(int handle);
int DB_rewrite(int handle); int DB_rewrite(int handle);
int DB_add(int handle); int DB_add(int handle);
int DB_lockfile(int handle); // Per sbloccare il file basta la DB_unlock() int DB_lockfile(int handle); // Per sbloccare il file basta la DB_unlock()