MOdificato il comportamento della write e della rewrite in caso di chiavi duplicate
git-svn-id: svn://10.65.10.50/trunk@1576 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4938651fb0
commit
f62fed19dc
@ -406,7 +406,12 @@ int DB_delkey(int handle, char* key, long recno)
|
|||||||
strcpy(fn,dbdata[handle]->file.name);
|
strcpy(fn,dbdata[handle]->file.name);
|
||||||
if ((i=d4index(dbdata[handle],fn)) == NULL)
|
if ((i=d4index(dbdata[handle],fn)) == NULL)
|
||||||
return(e4index);
|
return(e4index);
|
||||||
rt=i4lock(i);
|
while ((rt=i4lock(i)) == r4locked)
|
||||||
|
#ifdef DBG
|
||||||
|
message_box("Sono in attesa nella DB_delkeys");
|
||||||
|
#else
|
||||||
|
u4delay_sec();
|
||||||
|
#endif
|
||||||
if (rt == 0)
|
if (rt == 0)
|
||||||
rt=t4remove_calc(t,recno);
|
rt=t4remove_calc(t,recno);
|
||||||
i4unlock(i);
|
i4unlock(i);
|
||||||
@ -420,9 +425,15 @@ int DB_rewrite(int handle)
|
|||||||
{
|
{
|
||||||
int rt;
|
int rt;
|
||||||
if(dbdata[handle]==0) return(-1);
|
if(dbdata[handle]==0) return(-1);
|
||||||
rt=d4write(dbdata[handle],d4recno(dbdata[handle]));
|
while ((rt=d4write(dbdata[handle],d4recno(dbdata[handle]))) == r4locked)
|
||||||
if (rt==r4success)
|
#ifdef DBG
|
||||||
rt=DB_unlock(handle);
|
message_box("Sono in attesa nella DB_rewrite");
|
||||||
|
#else
|
||||||
|
u4delay_sec();
|
||||||
|
#endif
|
||||||
|
rt=DB_unlock(handle);
|
||||||
|
if (rt == r4unique)
|
||||||
|
fatal_box("Errore : chiave duplicata nell' indice %d", dbdata[handle]->rec_num + 1);
|
||||||
return (rt);
|
return (rt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -431,11 +442,36 @@ int DB_rewrite(int handle)
|
|||||||
appende il record attuale
|
appende il record attuale
|
||||||
--------------------------------------------------------------------------*/
|
--------------------------------------------------------------------------*/
|
||||||
int DB_add(int handle)
|
int DB_add(int handle)
|
||||||
{
|
{
|
||||||
if(dbdata[handle]==0) return(-1);
|
int rt;
|
||||||
d4append_start(dbdata[handle],0);
|
DATA4 * data = dbdata[handle];
|
||||||
d4recall(dbdata[handle]);
|
|
||||||
return(d4append(dbdata[handle]));
|
if(data==0) return(-1);
|
||||||
|
while ((rt = d4append_start(data,0)) == r4locked)
|
||||||
|
#ifdef DBG
|
||||||
|
message_box("Sono in attesa nella DB_add (d4append_start)");
|
||||||
|
#else
|
||||||
|
u4delay_sec();
|
||||||
|
#endif
|
||||||
|
if (rt == 0)
|
||||||
|
{
|
||||||
|
d4recall(data);
|
||||||
|
while ((rt = d4append(data)) == r4locked)
|
||||||
|
#ifdef DBG
|
||||||
|
message_box("Sono in attesa nella DB_add (d4append)");
|
||||||
|
#else
|
||||||
|
u4delay_sec();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (rt == r4unique)
|
||||||
|
{
|
||||||
|
if (data->rec_num > 0)
|
||||||
|
fatal_box("Errore : chiave duplicata nell' indice %d", data->rec_num + 1);
|
||||||
|
else
|
||||||
|
rt = _isreinsert;
|
||||||
|
}
|
||||||
|
DB_unlock(handle);
|
||||||
|
return(rt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
|
@ -731,14 +731,14 @@ int TBaseisamfile::write(TDate& atdate)
|
|||||||
TRectype r(curr());
|
TRectype r(curr());
|
||||||
|
|
||||||
setkey(1);
|
setkey(1);
|
||||||
if (cisread(_isamfile, r, _isequal + _nolock) != NOERR)
|
// if (cisread(_isamfile, r, _isequal + _nolock) != NOERR)
|
||||||
{
|
// {
|
||||||
memcpy(DB_getrecord(_isamfile->fhnd),curr().string(),DB_reclen(_isamfile->fhnd));
|
memcpy(DB_getrecord(_isamfile->fhnd),curr().string(),DB_reclen(_isamfile->fhnd));
|
||||||
_lasterr = DB_add(_isamfile->fhnd);
|
_lasterr = DB_add(_isamfile->fhnd);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
_lasterr=_isreinsert;
|
// _lasterr=_isreinsert;
|
||||||
setkey(oldkey);
|
setkey(oldkey);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
@ -756,14 +756,14 @@ int TBaseisamfile::write(const TRectype& rec, TDate& atdate)
|
|||||||
TRectype r(rec);
|
TRectype r(rec);
|
||||||
|
|
||||||
setkey(1);
|
setkey(1);
|
||||||
if (cisread(_isamfile, r, _isequal + _nolock) != NOERR)
|
// if (cisread(_isamfile, r, _isequal + _nolock) != NOERR)
|
||||||
{
|
// {
|
||||||
memcpy(DB_getrecord(_isamfile->fhnd),rec.string(),DB_reclen(_isamfile->fhnd));
|
memcpy(DB_getrecord(_isamfile->fhnd),rec.string(),DB_reclen(_isamfile->fhnd));
|
||||||
_lasterr = DB_add(_isamfile->fhnd);
|
_lasterr = DB_add(_isamfile->fhnd);
|
||||||
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
if (_lasterr != NOERR) _lasterr = get_error(_lasterr);
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
_lasterr=_isreinsert;
|
// _lasterr=_isreinsert;
|
||||||
setkey(oldkey);
|
setkey(oldkey);
|
||||||
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
_recno = _isamfile->RecNo = DB_recno(_isamfile->fhnd);
|
||||||
return _lasterr;
|
return _lasterr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user