int main() { char empName[40]; char empAge[40]; char empSal[40]; char dnameAge[40]; char deptName[40]; char errStr[200]; strcpy(empName,"EMP-NAME"); strcpy(empAge,"EMP-AGE"); strcpy(empSal,"EMP-SAL"); strcpy(dnameAge, "DNAME-AGE"); strcpy(deptName,"DEPT-NAME"); /******************************************************************************** * Αρχικοποίηση των εσωτερικών δομών του λογισμικού των ΒΔ * ********************************************************************************/ AM_Init(); /******************************************************************************** * Διαγραφή των b+-δένδρων , για παράδειγμα λόγω της διαγραφής * * ολόκληρης της βάσης * ********************************************************************************/ if (AM_DestroyIndex(empName) != AME_OK) { sprintf(errStr,"Error in AM_DestroyIndex called on %s \n",empName); AM_PrintError(errStr); } if (AM_DestroyIndex(empAge) != AME_OK) { sprintf(errStr,"Error in AM_DestroyIndex called on %s \n",empAge); AM_PrintError(errStr); } if (AM_DestroyIndex(empSal) != AME_OK) { sprintf(errStr,"Error in AM_DestroyIndex called on %s \n",empSal); AM_PrintError(errStr); } if (AM_DestroyIndex(dnameAge) != AME_OK) { sprintf(errStr,"Error in AM_DestroyIndex called on %s \n",dnameAge); AM_PrintError(errStr); } if (AM_DestroyIndex(deptName) != AME_OK) { sprintf(errStr,"Error in AM_DestroyIndex called on %s \n",deptName); AM_PrintError(errStr); } 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; 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 scan1; int eNentry; int eAentry; int eSentry; int dAentry; int eage; float esal; char edname[40]; empName[9] = '\0'; char fltname[40]; int recordid = 1; char errStr[200]; int* ivalue = NULL; char* cvalue = NULL; AM_Init(); strcpy(empAge, "TestDb3"); if (AM_CreateIndex(empAge, STRING, sizeof(empName) - 1, INTEGER, sizeof(int)) != AME_OK) { sprintf(errStr, "Error in AM_CreateIndex called on %s \n", empAge); AM_PrintError(errStr); return 1; } if ((eAentry = AM_OpenIndex(empAge)) < 0) { sprintf(errStr, "Error in AM_OpenIndex called on %s \n", empAge); AM_PrintError(errStr); return 1; } srand(time(NULL)); int i, j; recordid = 0; int count = 0; for (i = 1; i <= 100000; ++i) { for (j = 0; j < 9; ++j) { empName[j] = (char) abs(rand()%(122-97) + 97); } if(empName[0] == 'a') count++; insertEntries(eAentry, empName, ++recordid); // printf("record id : %d\n", recordid); } strcpy(empName, "bla"); insertEntries(eAentry, empName, ++recordid); printf("names starting with a : %d\n", count); empName[0] = 'b'; empName[1] = '\0'; int scan = AM_OpenIndexScan(eAentry, LESS_THAN, empName); i = 0; while(AM_FindNextEntry(scan) != NULL) i++; printf("Names with less than b : %d\n", i); AM_CloseIndexScan(scan); empName[0] = 'b'; empName[1] = '\0'; scan = AM_OpenIndexScan(eAentry, GREATER_THAN, empName); i = 0; while(AM_FindNextEntry(scan) != NULL) i++; printf("Names with more than b : %d\n", i); AM_CloseIndexScan(scan); strcpy(empName, "bla"); scan = AM_OpenIndexScan(eAentry, EQUAL, empName); i = 0; int * kappa = NULL; while((kappa = (int *) AM_FindNextEntry(scan) )!= NULL) { printf("%d\n", *kappa); i++; } printf("Names equal with bla : %d\n", i); AM_CloseIndexScan(scan); printf("record id : %d\n", recordid); AM_CloseIndex(eAentry); AM_DestroyIndex(empAge); 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_destroy( int argc, char* argv[] ) { int recId, attrcnt, indexcnt, return_val; char * relName, * record; relDesc * relPtr; if ( argc != 2 ) { printf( "Error: Two arguments expected for function UT_destroy\n" ); return AMINIREL_GE; } return_val = AMINIREL_OK; inline cleanup() { if ( record != NULL ) { free( record ); } if ( attrcnt > 0 ) { printf( "Error: De diagraftikan ola ta records twn attributes ths sxeshs '%s'\n", relName ); return_val = AMINIREL_GE; } if ( indexcnt > 0 ) { printf( "Error: De diagraftikan ola ta indeces twn attributes ths sxeshs '%s'\n", relName ); return_val = AMINIREL_GE; } if ( relName != NULL ) { if ( HF_DestroyFile( relName ) != HFE_OK ) { HF_PrintError( "Could not destroy relation in UT_destroy() " ); return_val = AMINIREL_GE; } } } /* Arxikopoihseis */ relName = argv[1]; record = NULL; /* Kanoume retrieve tis plhrofories gia thn relation */ if (( relPtr = getRelation( relName, &recId ) ) == NULL ) { printf( "Error: Cannot destroy relation '%s'. Could not retrieve information about relation.\n", argv[1] ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* an th vrhkame, swzoume posa attributes kai indeces exei, kai th diagrafoume */ attrcnt = relPtr->attrcnt; indexcnt = relPtr->indexcnt; free( relPtr ); /* Diagrafoume thn eggrafh sto relCat */ if ( HF_DeleteRec( this_db.relCatDesc, recId, sizeof( relDesc ) ) != HFE_OK ) { HF_PrintError( "Error in UT Destroy: Could not delete record from relCat\n" ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* An th vrhkame sto relCat arxeio, anoigoume to attrCat arxeio gia na diagrapsoume ola ta records gia ta attrcnt synolika attributes ths */ /* sto record tha apothikeyetai h eggrafh tou arxeiou attrCat */ if (( record = malloc( sizeof( attrDesc ) ) ) == NULL ) { printf( MEM_ERROR ); return_val = AMINIREL_GE; cleanup(); return return_val; } /* Ksekiname to psaksimo apo thn arxh tou arxeiou */ if (( recId = HF_GetFirstRec( this_db.attrCatDesc, record, sizeof( attrDesc ) ) ) < 0 ) { HF_PrintError( "Could not retrieve first Record from file relCat" ); return_val = AMINIREL_GE; cleanup(); return return_val; } do { /* To onoma ths sxeshs einai sthn arxh tou record */ if ( !strcmp( record, relName ) ) { char * pch; int indexed; /* to pch twra deixnei sto 'indexed' melos tou struct attrDesc */ pch = record + 2 * MAXNAME * sizeof( char ) + 2 * sizeof( int ) + sizeof( char ); memcpy( &indexed, pch, sizeof( int ) ); /* An exei eurethrio, prepei na diagrafei kai auto */ if ( indexed == TRUE ) { int indexno; /* to pch twra deixnei sto indexno melos tou struct attrDesc */ pch += sizeof( int ); memcpy( &indexno, pch, sizeof( int ) ); /* diagrafoume to eurethrio */ if ( AM_DestroyIndex( relName, indexno ) != AME_OK ) { AM_PrintError( "Could not delete index: " ); return_val = AMINIREL_GE; cleanup(); return return_val; } indexcnt--; } /* diagrafoume thn eggrafh tou attribute sto attrCat */ if ( HF_DeleteRec( this_db.attrCatDesc, recId, sizeof( attrDesc ) ) != HFE_OK ) { return_val = AMINIREL_GE; cleanup(); return return_val; } attrcnt--; } } while (( recId = HF_GetNextRec( this_db.attrCatDesc, recId, record , sizeof( attrDesc ) ) ) >= 0 ); if ( recId != HFE_EOF ) { HF_PrintError( "Error in UT Destroy while deleting records from file attrCat\n" ); return_val = AMINIREL_GE; cleanup(); return return_val; } cleanup(); return return_val; }