From 3fca3f45870f2c5ca8636a30d4c0303168ef6069 Mon Sep 17 00:00:00 2001 From: angelo Date: Tue, 11 Jul 1995 17:45:31 +0000 Subject: [PATCH] Riscritta la DB_add. git-svn-id: svn://10.65.10.50/trunk@1585 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/codeb.c | 98 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 76 insertions(+), 22 deletions(-) diff --git a/include/codeb.c b/include/codeb.c index e452f09a6..5cbb9f133 100755 --- a/include/codeb.c +++ b/include/codeb.c @@ -414,6 +414,7 @@ int DB_delkey(int handle, char* key, long recno) #endif if (rt == 0) rt=t4remove_calc(t,recno); + d4flush(dbdata[handle]); i4unlock(i); return(rt); } @@ -431,11 +432,12 @@ int DB_rewrite(int handle) #else u4delay_sec(); #endif + d4flush(dbdata[handle]); rt=DB_unlock(handle); if (rt == e4unique) { DB_get_error(); - fatal_box("Errore : chiave duplicata nell' indice %d", dbdata[handle]->rec_num + 1); + fatal_box("Errore : chiave duplicata nell' indice "); } return (rt); } @@ -446,35 +448,87 @@ int DB_rewrite(int handle) --------------------------------------------------------------------------*/ int DB_add(int handle) { - int rt; + int rt,ntag=1; DATA4 * data = dbdata[handle]; - + TAG4* tag_on; if(data==0) return(-1); - while ((rt = d4append_start(data,0)) == r4locked) + /* + 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 == e4unique) + { + DB_get_error(); + if (data->rec_num > 0) + fatal_box("Errore : chiave duplicata nell' indice %d", data->rec_num + 1); + else + rt = _isreinsert; + } + d4flush(data); + DB_unlock(handle); + */ + while ((rt = d4lock_append(data)) == r4locked) #ifdef DBG - message_box("Sono in attesa nella DB_add (d4append_start)"); + message_box("Sono in attesa nella DB_add (d4lock_append)"); #else u4delay_sec(); #endif - if (rt == 0) - { - d4recall(data); - while ((rt = d4append(data)) == r4locked) + if ((rt=d4append_data(data)) == 0) + { + while ((rt = d4lock_index(data)) == r4locked) #ifdef DBG - message_box("Sono in attesa nella DB_add (d4append)"); + message_box("Sono in attesa nella DB_add (d4lock_index)"); #else - u4delay_sec(); -#endif - } - if (rt == e4unique) - { - DB_get_error(); - if (data->rec_num > 0) - fatal_box("Errore : chiave duplicata nell' indice %d", data->rec_num + 1); - else - rt = _isreinsert; - } - DB_unlock(handle); + 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 + fatal_box("Errore : chiave duplicata nell' indice %d", ntag); + } + } + } + } + if (!rt ) d4update_header(data, 1, 1); + d4unlock(data); return(rt); }