main(){ int fd; /* file descriptor for the index */ char fname[FNAME_LENGTH]; /* file name */ int recnum; /* record number */ int sd; /* scan descriptor */ int numrec; /* # of records retrieved */ int testval; clock_t t; // timeval t1, t2; // double elapsedtime; /* init */ printf("initializing\n"); PF_Init(); /* create index */ printf("creating index\n"); AM_CreateIndex(RELNAME,0,CHAR_TYPE,sizeof(char)); /* open the index */ printf("opening index\n"); sprintf(fname,"%s.0",RELNAME); fd = PF_OpenFile(fname); // gettime for (recnum=1; recnum < MAXRECS; recnum++){ char value; if(recnum%4==0) value=0; else if(recnum%4==1) value=1; else if(recnum%4==2) value=2; else value=3; AM_InsertEntry(fd,CHAR_TYPE,sizeof(char),(char *)&value, recnum); } // gettimeofday(&t2,NULL); t = clock(); numrec= 0; char val = 3; sd = AM_OpenIndexScan(fd,CHAR_TYPE,sizeof(char),LE_OP,(char*)&val); while((recnum=AM_FindNextEntry(sd))>= 0){ numrec++; } AM_CloseIndexScan(sd); t = clock()-t; double time_taken = ((double)t)/CLOCKS_PER_SEC; printf("Scan takes %f seconds to retreive records with repeating attributes\n", time_taken); printf("Number of pages used %d\n",totalNumberOfPages); printf("closing down\n"); PF_CloseFile(fd); AM_DestroyIndex(RELNAME,0); }
void insertEntries(int fd, char * name, int recid) { char errStr[140]; strcpy(errStr, "Error in AM_InsertEntry"); if (AM_InsertEntry(fd, name, &recid) != AME_OK) { sprintf(errStr, "Error in AM_InsertEntry called on %s \n", empSal); AM_PrintError(errStr); printf("record id : %d\n", recid); AM_CloseIndex(fd); AM_DestroyIndex("TestDb3"); exit(0); } }
main() { int fd; /* file descriptor for the index */ char fname[FNAME_LENGTH]; /* file name */ int recnum; /* record number */ int sd; /* scan descriptor */ int numrec; /* # of records retrieved */ int testval; clock_t t; // timeval t1, t2; // double elapsedtime; /* init */ printf("initializing\n"); PF_Init(); /* create index */ printf("creating index\n"); AM_CreateIndex(RELNAME,0,CHAR_TYPE,sizeof(char)); /* open the index */ printf("opening index\n"); sprintf(fname,"%s.0",RELNAME); fd = PF_OpenFile(fname); t = clock(); // gettimeofday(&t1,NULL); for (recnum=1; recnum < MAXRECS; recnum++) { char value; if(recnum%4==0) value='a'; else if(recnum%4==1) value='b'; else if(recnum%4==2) value='c'; else value='d'; AM_InsertEntry(fd,CHAR_TYPE,sizeof(char),(char *)&value, recnum); } t = clock()-t; // gettimeofday(&t2,NULL); double time_taken = ((double)t)/CLOCKS_PER_SEC; // elapsedtime = (t2.tv_sec - t1.tv_sec) * 1000.0; // elapsedtime += (t2.tv_usec - t1.tv_usec) / 1000.0; printf("Insert takes %f seconds to insert records with repeating attributes\n", time_taken); printf("Number of pages used %d\n",totalNumberOfPages); printf("closing down\n"); PF_CloseFile(fd); AM_DestroyIndex(RELNAME,0); }
main(){ int fd; /* file descriptor for the index */ char fname[FNAME_LENGTH]; /* file name */ int recnum; /* record number */ int sd; /* scan descriptor */ int numrec; /* # of records retrieved */ int testval; clock_t t; // timeval t1, t2; // double elapsedtime; /* init */ printf("initializing\n"); PF_Init(); /* create index */ printf("creating index\n"); AM_CreateIndex(RELNAME,0,INT_TYPE,sizeof(int)); /* open the index */ printf("opening index\n"); sprintf(fname,"%s.0",RELNAME); fd = PF_OpenFile(fname); int value = 1; for (recnum=0; recnum < MAXRECS; recnum++){ AM_InsertEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); } t = clock(); for(recnum=0;recnum < MAXRECS; recnum++){ AM_DeleteEntry(fd,INT_TYPE,sizeof(int),(char*)&recnum,recnum); } t = clock()-t; double time_taken = ((double)t)/CLOCKS_PER_SEC; printf("Delete takes %f seconds to delete records\n", time_taken); printf("Number of pages used %d\n",totalNumberOfPages); printf("closing down\n"); PF_CloseFile(fd); AM_DestroyIndex(RELNAME,0); }
int main() { int athletesFd; int eventsFd; int partsFd; int athletesIndexFd0; int athletesIndexFd1; int athletesIndexFd2; int eventsIndexFd0; int eventsIndexFd1; int partsIndexFd0; int partsIndexFd1; int partsIndexFd2; int recId; char *athleteRec; char *eventRec; char *partRec; int athId; char surname[AM_MAIN_NAME_SIZE]; char name[AM_MAIN_NAME_SIZE]; int eventId; char eventName[AM_MAIN_EVENT_NAME_SIZE]; char partDate[AM_MAIN_DATE_SIZE]; /* Αρχικοποίηση Επιπέδου HF */ HF_Init(); /* Αρχικοποίηση Επιπέδου AM */ AM_Init(); /* ’νοιγμα Αρχείου ATHLETES */ athletesFd = HF_OpenFile("ATHLETES"); if (athletesFd < 0) { HF_PrintError("Error in HF_OpenFile called on ATHLETES."); return -1; } /* ’νοιγμα Αρχείου EVENTS */ eventsFd = HF_OpenFile("EVENTS"); if (eventsFd < 0) { HF_PrintError("Error in HF_OpenFile called on EVENTS."); return -1; } /* ’νοιγμα Αρχείου PARTICIPATIONS */ partsFd = HF_OpenFile("PARTICIPATIONS"); if (partsFd < 0) { HF_PrintError("Error in HF_OpenFile called on PARTICIPATIONS."); return -1; } /*Δημιουργία ευρετηρίου στο 1ο πεδίο του αρχείου ATHLETES*/ if (AM_CreateIndex("ATHLETES", 0, 'i', sizeof(int)) != AME_OK) { AM_PrintError("Error in AM_CreateIndex called on ATHLETES.0."); } /*’νοιγμα του 1ου ευρετηρίου στο αρχείο ATHLETES*/ athletesIndexFd0 = AM_OpenIndex("ATHLETES", 0); if (athletesIndexFd0 < 0) { AM_PrintError("Error in AM_OpenIndex called on ATHLETES.0."); return -1; } /*Δημιουργία ευρετηρίου στο 2ο πεδίο του αρχείου ATHLETES*/ if (AM_CreateIndex("ATHLETES", 1, 'c', AM_MAIN_NAME_SIZE) != AME_OK) { AM_PrintError("Error in AM_CreateIndex called on ATHLETES.1."); } /* //’νοιγμα του 2ου ευρετηρίου στο αρχείο ATHLETES*/ athletesIndexFd1 = AM_OpenIndex("ATHLETES", 1); if (athletesIndexFd1 < 0) { AM_PrintError("Error in AM_OpenIndex called on ATHLETES.1."); return -1; } /* //Δημιουργία ευρετηρίου στο 3ο πεδίο του αρχείου ATHLETES */ if (AM_CreateIndex("ATHLETES", 2, 'c', AM_MAIN_NAME_SIZE) != AME_OK) { AM_PrintError("Error in AM_CreateIndex called on ATHLETES.2."); } /* //’νοιγμα του 3ου ευρετηρίου στο αρχείο ATHLETES*/ athletesIndexFd2 = AM_OpenIndex("ATHLETES", 2); if (athletesIndexFd2 < 0) { AM_PrintError("Error in AM_OpenIndex called on ATHLETES.2."); return -1; } athleteRec = (char *) malloc(AM_MAIN_ATHLETE_REC_SIZE); if (athleteRec == NULL) { printf("Athlete record malloc failed\n"); return -1; } /* // Εισαγωγή δεδομένων στα ευρετήρια του αρχείου ATHLETES*/ recId = HF_GetFirstRec(athletesFd, athleteRec, AM_MAIN_ATHLETE_REC_SIZE); while (recId >= 0) { memcpy((void *) &athId, (void *) athleteRec, sizeof(int)); athleteRec += sizeof(int); strcpy(surname, athleteRec); athleteRec += AM_MAIN_NAME_SIZE; strcpy(name, athleteRec); athleteRec += AM_MAIN_NAME_SIZE; athleteRec -= AM_MAIN_ATHLETE_REC_SIZE; if (AM_InsertEntry(athletesIndexFd0, 'i', sizeof(int), (char *) &athId, recId) != AME_OK) AM_PrintError("Failed to insert entry."); if (AM_InsertEntry(athletesIndexFd1, 'c', AM_MAIN_NAME_SIZE, surname, recId) != AME_OK) AM_PrintError("Failed to insert entry."); if (AM_InsertEntry(athletesIndexFd2, 'c', AM_MAIN_NAME_SIZE, name, recId) != AME_OK) AM_PrintError("Failed to insert entry."); recId = HF_GetNextRec(athletesFd, recId, athleteRec, AM_MAIN_ATHLETE_REC_SIZE); } /* //Δημιουργία ευρετηρίου στο 1ο πεδίο του αρχείου EVENTS*/ if (AM_CreateIndex("EVENTS", 0, 'i', sizeof(int)) != AME_OK) { AM_PrintError("Error in AM_CreateIndex called on EVENTS.0."); } /* //’νοιγμα του 1ου ευρετηρίου στο αρχείο EVENTS*/ eventsIndexFd0 = AM_OpenIndex("EVENTS", 0); if (eventsIndexFd0 < 0) { AM_PrintError("Error in AM_OpenIndex called on EVENTS.0."); return -1; } /* //Δημιουργία ευρετηρίου στο 2ο πεδίο του αρχείου EVENTS*/ if (AM_CreateIndex("EVENTS", 1, 'c', AM_MAIN_EVENT_NAME_SIZE) != AME_OK) { AM_PrintError("Error in AM_CreateIndex called on EVENTS.1."); } /* //’νοιγμα του 2ου ευρετηρίου στο αρχείο EVENTS*/ eventsIndexFd1 = AM_OpenIndex("EVENTS", 1); if (eventsIndexFd1 < 0) { AM_PrintError("Error in AM_OpenIndex called on EVENTS.1."); return -1; } eventRec = (char *) malloc(AM_MAIN_EVENT_REC_SIZE); if (eventRec == NULL) { printf("Event record malloc failed\n"); return -1; } /* // Εισαγωγή δεδομένων στα ευρετήρια του αρχείου EVENTS*/ recId = HF_GetFirstRec(eventsFd, eventRec, AM_MAIN_EVENT_REC_SIZE); while (recId >= 0) { memcpy((void *) &eventId, (void *) eventRec, sizeof(int)); eventRec += sizeof(int); strcpy(eventName, eventRec); eventRec += AM_MAIN_EVENT_NAME_SIZE; eventRec -= AM_MAIN_EVENT_REC_SIZE; if (AM_InsertEntry(eventsIndexFd0, 'i', sizeof(int), (char *) &eventId, recId) != AME_OK) AM_PrintError("Failed to insert entry."); if (AM_InsertEntry(eventsIndexFd1, 'c', AM_MAIN_EVENT_NAME_SIZE, eventName, recId) != AME_OK) AM_PrintError("Failed to insert entry."); recId = HF_GetNextRec(eventsFd, recId, eventRec, AM_MAIN_ATHLETE_REC_SIZE); } /* //Δημιουργία ευρετηρίου στο 1ο πεδίο του αρχείου PARTICIPATIONS*/ if (AM_CreateIndex("PARTICIPATIONS", 0, 'i', sizeof(int)) != AME_OK) { AM_PrintError("Error in AM_CreateIndex called on PARTICIPATIONS.0."); } /* //’νοιγμα του 1ου ευρετηρίου στο αρχείο PARTICIPATIONS*/ partsIndexFd0 = AM_OpenIndex("PARTICIPATIONS", 0); if (partsIndexFd0 < 0) { AM_PrintError("Error in AM_OpenIndex called on PARTICIPATIONS.0."); return -1; } /* //Δημιουργία ευρετηρίου στο 2ο πεδίο του αρχείου PARTICIPATIONS*/ if (AM_CreateIndex("PARTICIPATIONS", 1, 'i', sizeof(int)) != AME_OK) { AM_PrintError("Error in AM_CreateIndex called on PARTICIPATIONS.1."); } /* //’νοιγμα του 2ου ευρετηρίου στο αρχείο PARTICIPATIONS*/ partsIndexFd1 = AM_OpenIndex("PARTICIPATIONS", 1); if (partsIndexFd1 < 0) { AM_PrintError("Error in AM_OpenIndex called on PARTICIPATIONS.1."); return -1; } /* //Δημιουργία ευρετηρίου στο 3ο πεδίο του αρχείου PARTICIPATIONS*/ if (AM_CreateIndex("PARTICIPATIONS", 2, 'c', AM_MAIN_DATE_SIZE) != AME_OK) { AM_PrintError("Error in AM_CreateIndex called on PARTICIPATIONS.2."); } /* //’νοιγμα του 3ου ευρετηρίου στο αρχείο PARTICIPATIONS*/ partsIndexFd2 = AM_OpenIndex("PARTICIPATIONS", 2); if (partsIndexFd2 < 0) { AM_PrintError("Error in AM_OpenIndex called on PARTICIPATIONS.2."); return -1; } partRec = (char *) malloc(AM_MAIN_PARTICIPATION_REC_SIZE); if (partRec == NULL) { printf("Participation record malloc failed\n"); return -1; } /* // Εισαγωγή δεδομένων στα ευρετήρια του αρχείου PARTICIPATIONS*/ recId = HF_GetFirstRec(partsFd, partRec, AM_MAIN_PARTICIPATION_REC_SIZE); while (recId >= 0) { memcpy((void *) &athId, (void *) partRec, sizeof(int)); partRec += sizeof(int); memcpy((void *) &eventId, (void *) partRec, sizeof(int)); partRec += sizeof(int); strcpy(partDate, partRec); partRec += AM_MAIN_DATE_SIZE; partRec -= AM_MAIN_PARTICIPATION_REC_SIZE; if (AM_InsertEntry(partsIndexFd0, 'i', sizeof(int), (char *) &athId, recId) != AME_OK) AM_PrintError("Failed to insert entry."); if (AM_InsertEntry(partsIndexFd1, 'i', sizeof(int), (char *) &eventId, recId) != AME_OK) AM_PrintError("Failed to insert entry."); if (AM_InsertEntry(partsIndexFd2, 'c', AM_MAIN_DATE_SIZE, partDate, recId) != AME_OK) AM_PrintError("Failed to insert entry."); recId = HF_GetNextRec(partsFd, recId, partRec, AM_MAIN_PARTICIPATION_REC_SIZE); } free(athleteRec); free(eventRec); free(partRec); /* //Κλείσιμο Αρχείων*/ if (HF_CloseFile(athletesFd) != HFE_OK) HF_PrintError("Error in HF_CloseFile called on ATHLETES."); if (HF_CloseFile(eventsFd) != HFE_OK) HF_PrintError("Error in HF_CloseFile called on EVENTS."); if (HF_CloseFile(partsFd) != HFE_OK) HF_PrintError("Error in HF_CloseFile called on PARTICIPATIONS."); if (AM_CloseIndex(athletesIndexFd0) != AME_OK) AM_PrintError("Error in AM_CloseIndex called on ATHLETES.0."); if (AM_CloseIndex(athletesIndexFd1) != AME_OK) AM_PrintError("Error in AM_CloseIndex called on ATHLETES.1."); if (AM_CloseIndex(athletesIndexFd2) != AME_OK) AM_PrintError("Error in AM_CloseIndex called on ATHLETES.2."); if (AM_CloseIndex(eventsIndexFd0) != AME_OK) AM_PrintError("Error in AM_CloseIndex called on EVENTS.0."); if (AM_CloseIndex(eventsIndexFd1) != AME_OK) AM_PrintError("Error in AM_CloseIndex called on EVENTS.1."); if (AM_CloseIndex(partsIndexFd0) != AME_OK) AM_PrintError("Error in AM_CloseIndex called on PARTICIPATIONS.0."); if (AM_CloseIndex(partsIndexFd1) != AME_OK) AM_PrintError("Error in AM_CloseIndex called on PARTICIPATIONS.1."); if (AM_CloseIndex(partsIndexFd2) != AME_OK) AM_PrintError("Error in AM_CloseIndex called on PARTICIPATIONS.2."); return 0; }
main() { int fd; /* file descriptor for the index */ char fname[FNAME_LENGTH]; /* file name */ int recnum; /* record number */ int sd; /* scan descriptor */ int numrec; /* # of records retrieved */ int testval; /* init */ printf("initializing\n"); PF_Init(); /* create index */ printf("creating index\n"); AM_CreateIndex(RELNAME,0,INT_TYPE,sizeof(int)); /* open the index */ printf("opening index\n"); sprintf(fname,"%s.0",RELNAME); fd = PF_OpenFile(fname); /* first, make sure that simple deletions work */ printf("inserting into index\n"); for (recnum=0; recnum < 20; recnum++){ AM_InsertEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); } printf("deleting odd number records\n"); for (recnum=1; recnum < 20; recnum += 2) AM_DeleteEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); printf("retrieving even number records\n"); numrec= 0; sd = AM_OpenIndexScan(fd,INT_TYPE,sizeof(int),EQ_OP,NULL); while((recnum=AM_FindNextEntry(sd))>= 0){ printf("%d\n",recnum); numrec++; } printf("retrieved %d records\n",numrec); AM_CloseIndexScan(sd); printf("deleting even number records\n"); for (recnum=0; recnum < 20; recnum += 2) AM_DeleteEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); printf("retrieving from empty index\n"); numrec= 0; sd = AM_OpenIndexScan(fd,INT_TYPE,sizeof(int),EQ_OP,NULL); while((recnum=AM_FindNextEntry(sd))>= 0){ printf("%d\n",recnum); numrec++; } printf("retrieved %d records\n",numrec); AM_CloseIndexScan(sd); /* insert into index */ printf("begin test of complex delete\n"); printf("inserting into index\n"); for (recnum=0; recnum < MAXRECS; recnum+=2){ AM_InsertEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); } for (recnum=1; recnum < MAXRECS; recnum+=2) AM_InsertEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); /* delete everything */ printf("deleting everything\n"); for (recnum=1; recnum < MAXRECS; recnum += 2) AM_DeleteEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); for (recnum=0; recnum < MAXRECS; recnum +=2) AM_DeleteEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); /* print out what remains */ printf("printing empty index\n"); numrec= 0; sd = AM_OpenIndexScan(fd,INT_TYPE,sizeof(int),EQ_OP,NULL); while((recnum=AM_FindNextEntry(sd))>= 0){ printf("%d\n",recnum); numrec++; } printf("retrieved %d records\n",numrec); AM_CloseIndexScan(sd); /* insert everything back */ printf("inserting everything back\n"); for (recnum=0; recnum < MAXRECS; recnum++){ AM_InsertEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); } /* delete records less than 100, using scan!! */ printf("delete records less than 100\n"); testval = 100; sd = AM_OpenIndexScan(fd,INT_TYPE,sizeof(int),LT_OP,(char *)&testval); while((recnum=AM_FindNextEntry(sd))>= 0){ if (recnum >= 100){ printf("invalid recnum %d\n",recnum); exit(1); } AM_DeleteEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); } AM_CloseIndexScan(sd); /* delete records greater than 150, using scan */ printf("delete records greater than 150\n"); testval = 150; sd = AM_OpenIndexScan(fd,INT_TYPE,sizeof(int),GT_OP,(char *)&testval); while((recnum=AM_FindNextEntry(sd))>= 0){ if (recnum <= 150){ printf("invalid recnum %d\n",recnum); exit(1); } AM_DeleteEntry(fd,INT_TYPE,sizeof(int),(char *)&recnum, recnum); } AM_CloseIndexScan(sd); /* print out what remains */ printf("printing between 100 and 150\n"); numrec= 0; sd = AM_OpenIndexScan(fd,INT_TYPE,sizeof(int),EQ_OP,NULL); while((recnum=AM_FindNextEntry(sd))>= 0){ printf("%d\n",recnum); numrec++; } printf("retrieved %d records\n",numrec); AM_CloseIndexScan(sd); /* destroy everything */ printf("closing down\n"); PF_CloseFile(fd); AM_DestroyIndex(RELNAME,0); printf("test3 done!\n"); }
int UT_buildindex( int argc, char* argv[] ) { relDesc * relInfo; attrDesc * attrInfo; char * relName, * attrName, * record, * value; int relRecId, attrRecId, return_val, recId, indexFileDesc, fileDesc; if ( argc != 3 ) { printf( "Error: Three arguments expected for function UT_buildindex\n" ); return AMINIREL_GE; } inline cleanup() { /* apodesmeush dynamikhs mnhmhs */ if ( relInfo != NULL ) { free( relInfo ); } if ( attrInfo != NULL ) { free( attrInfo ); } if ( record != NULL ) { free( record ); } /* Kleinoyme arxeia pou isws anoiksame */ /* kleinoyme to arxeio ths sxeshs */ if ( fileDesc >= 0 ) { if ( HF_CloseFile( fileDesc ) != HFE_OK ) { HF_PrintError( "Could not close relation's file" ); return_val = AMINIREL_GE; } } /* kleinoyme to eyrethrio */ if ( indexFileDesc >= 0 ) { if ( AM_CloseIndex( indexFileDesc ) != AME_OK ) { AM_PrintError( "Could not close index" ); return_val = AMINIREL_GE; } } } /* initialization */ relName = argv[1]; attrName = argv[2]; relInfo = NULL; attrInfo = NULL; record = NULL; return_val = AMINIREL_OK; fileDesc = indexFileDesc = AMINIREL_INVALID; /* kanoume retrieve tis plhrofories gia th sxesh me onoma relName */ if (( relInfo = getRelation( relName, &relRecId ) ) == NULL ) { printf( "Error: Could not retrieve information about relation '%s'\n", relName ); return AMINIREL_GE; } /* Mias kai mporoume na exoume to poly 1 eurethrio gia kathe attribute, an o arithmos twn eurethriwn isoutai me ton arithmo twn attributes tote de ginetai na ftiaksoume allo index */ if ( relInfo->attrcnt == relInfo->indexcnt ) { printf( "Error: Cannot create yet another index for any of %s's attributes, delete one first\n", relName ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* afou mporesame na vroume th sxesh relName, twra kanoume retrieve tis plhrofories gia to attribute ths */ if (( attrInfo = getAttribute( relName, attrName, &attrRecId ) ) == NULL ) { printf( "Error: Could not retrieve information about attribute '%s' of relation %s\n", attrName, relName ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* Vrhkame to attribute, twra elegxoume an yparxei hdh ena eurethrio gia to attribute! */ if ( attrInfo->indexed == TRUE ) { printf( "Error: There is already an index for attribute '%s' of relation '%s'\n", attrName, relName ); return_val = AMINIREL_GE; cleanup(); return return_val; } else { /* Mporoume na ftiaksoume neo eurethrio! :v */ /* Enhmerwnoume to indexed kai indexno tou attrInfo */ attrInfo->indexed = TRUE; attrInfo->indexno = relInfo->indexcnt; /* Enhmerwnoume ton indexcnt tou relInfo */ ( relInfo->indexcnt )++; /* Mias kai to HF epipedo mas epistrefei antigrafa twn records, emeis twra pou exoume tis nees versions twn records prepei na diagrapsoume ta original kai na eisagoume pali ta kainourgia! */ /* Diagrafh ths eggrafhs sto relCat */ if ( HF_DeleteRec( this_db.relCatDesc, relRecId, sizeof( relDesc ) ) != HFE_OK ) { HF_PrintError( "Could not Destroy record in relCat " ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* Diagrafh ths eggrafhs sto attrCat */ if ( HF_DeleteRec( this_db.attrCatDesc, attrRecId, sizeof( attrDesc ) ) != HFE_OK ) { HF_PrintError( "Could not Destroy record in attrCat " ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* Eisagwgh twn updated records sto relCat */ if ( updateRelCat( relInfo ) != AMINIREL_OK ) { printf( "ton hpie h update relcat\n" ) ; return_val = AMINIREL_GE; cleanup(); return return_val; } /* kai sto attrCat */ if ( updateAttrCat( attrInfo ) != AMINIREL_OK ) { printf( "ton hpie h update attrcat\n" ) ; return_val = AMINIREL_GE; cleanup(); return return_val; } /* Telos, dhmioyrgoyme to eurethrio */ if ( AM_CreateIndex( relName, attrInfo->indexno, attrInfo->attrtype, attrInfo->attrlength ) != AME_OK ) { AM_PrintError( "Could not Create Index in UT_buildindex() " ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* Twra pou dhmioyrghsame to eyrethrio, prepei oses eggrafes yparxoun sto arxeio ths sxeshs na perastoun sto eurethrio! */ /* Desmeuoume xwro gia to xwro pou tha apothikeuetai to kathe record tou arxeiou */ if (( record = malloc( relInfo->relwidth ) ) == NULL ) { printf( MEM_ERROR ); return_val = AMINIREL_GE; cleanup(); return return_val; } memset( record, 0, relInfo->relwidth ); /* Anoigoume to eurethrio */ if (( indexFileDesc = AM_OpenIndex( relName, attrInfo->indexno ) ) < 0 ) { AM_PrintError( "Could not Open Index in UT_buildindex() " ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* Anoigoume to arxeio ths sxeshs */ if (( fileDesc = HF_OpenFile( relName ) ) < 0 ) { HF_PrintError( "Could not Open relation's file in UT_buildindex() " ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* ksekiname me thn prwth eggrafh */ if (( recId = HF_GetFirstRec( fileDesc, record, relInfo->relwidth ) ) < 0 ) { /* Yparxei h periptwsh to arxeio na mhn exei eggrafes */ if ( recId != HFE_EOF ) { HF_PrintError( "Could not retrieve first Record from relation's file" ); return_val = AMINIREL_GE; } cleanup(); return return_val; } /* Eisagoume oles tis eggrafes tou arxeiou ths sxeshs, sto eurethrio */ do { /* Thetoume ton pointer value sto swsto shmeio ths eggrafhs ap opou tha paroume tin timh mas */ value = record + attrInfo->offset; /* Eisagoume thn eggrafh sto eurethrio */ if ( AM_InsertEntry( indexFileDesc, attrInfo->attrtype, attrInfo->attrlength, value, recId ) != AME_OK ) { AM_PrintError( "Could not insert into index" ); return_val = AMINIREL_GE; } } while (( recId = HF_GetNextRec( fileDesc, recId, record , relInfo->relwidth ) ) >= 0 ); if ( recId != HFE_EOF ) { HF_PrintError( "Error: Cannot build index\n" ); cleanup(); return return_val; } return_val = AMINIREL_OK; } cleanup(); return return_val; }