int BuildIndexFile(int handle, char *fieldname); Crea il file contenente l'indice per un certo campo del database L'indice e' un file binario contenente una successione di coppie <valore campo><numero del record> (per semplicita', il file indice non ha header) La dimensione degli elementi delle coppie contenuti negli indici sono determinate da: <valore campo> la stessa dimensione dichiarata nello header del DBF <numero record> intero long (4 bytes) I dati contenuti nell'indice vanno memorizzati in network byte order (NBO). Le coppie sono ordinate in ordine crescente rispetto a <valore campo>. Per confrontare i valori, usare le seguenti regole: stringhe usare strcmp interi confronto numerico date ordine crescente di data logical FALSE < TRUE Nel caso di due record contenenti lo stesso valore nell campo indicizzato, si deve mantenere l'ordine in cui occorrono nel database. In altre parole, le coppie con lo stesso valore sono ordinate in ordine crescente rispetto al numero del record. Argomenti: int handle handle del database (già aperto) char *fieldname nome del campo per il quale va creato l'indice Il nome del file indice da creare e' "<database name>.<field name>.ndx" Valori di ritorno: La funzione restituisce un codice di errore negativo in caso di errore, o LP_OK quando la creazione dell'indice puo' essere completata con successo. Errori: (l'insieme puo' essere esteso con altre situazioni di errore individuate durante l'implementazione) LPC_BAD_ARG argomenti non validi o erratiRicerca di un valore in un indice
int SearchRecordPosition(int handle, FIELD_VALUE_t *FieldValue, long *position); Cerca il valore di un campo nel corrispondente file indice e restituisce il numero di un record contenente il valore. Argomenti: int handle handle del database (già aperto) char *fieldname nome del campo e suo valore da cercare long *numrec in : numero di record da cui cominciare la ricerca out: il primo record contenente il valore con numero strettamente maggiore del numero di record ricevuto in input Valori di ritorno: Se NumRecStart e' il valore ricevuto in input attraverso numrec, restituisce in numrec il numero del primo record contenente il valore con numero strettamente maggiore di NumRecStart, se tale record esiste, e ritorna LPC_OK. Ad esempio, per cercare il primo record occorre fornire come input 0 in numrec. Se non ci sono record in posizione maggiore di NumRecStart, ritorna LPC_NOT_FOUND. In caso di errore, ritorna un codice di errore negativo. Errori: (l'insieme puo' essere esteso con altre situazioni di errore individuate durante l'implementazione) LPC_BAD_ARG LPC_ERR_READ errori nel leggere dall'indiceAggiornamento incrementale degli indici
int IncrementalReindex(int handle, FIELD_VALUE_t *FieldValue, int isInsertion, long numrec); Aggiorna il file contenente l'indice a seguito dell'inserimento/cancellazione di un solo record nel database. Argomenti: int handle, handle del database (già aperto) FIELD_VALUE_t *FieldValue nome del campo e suo valore da inserire/cancellare dall'indice int isInsertion tipo di operazione eseguita valori possibili: ADD_RECORD inserimento DEL_RECORD cancellazione long numrec numero del record aggiunto/eliminato dal database Valori di ritorno: La funzione restituisce un codice di errore negativo in caso di errore, o LP_OK quando l'aggiornamento del'indice puo' essere completato con successo. Errori: (l'insieme puo' essere esteso con altre situazioni di errore individuate durante l'implementazione) LPC_BAD_ARG Note: Quando si inserisce un nuovo record nel database occorre aggiornare l'indice inserendo nell'opportuna posizione una nuova coppia <valore campo> <numero record>. Quando si cancella un reecord, occorre cancellare dall'indice la coppia corrispondente al record eliminato. In entrambi i casi occorre aggiornare le coppie relative ai record che hanno cambiato posizione a causa dell'inserimento/cancellazione (quelli che prima dell'inserimento avevano un numero di record maggiore o uguale di numrec). Le costanti ADD_RECORD e DEL_RECORD sono definite nell'interfaccia.-- AndreaSterbini - 05 Jun 2006
I | Attachment | History | Action | Size | Date | Who | Comment |
---|---|---|---|---|---|---|---|
![]() |
Modulo5.tar.gz | r1 | manage | 86.8 K | 2007-03-14 - 12:44 | StefanoGuerrini | Modulo Cinque |
![]() |
![]() |
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica ![]() |
|
![]() |
![]() |