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'indice
Aggiornamento 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 |
|