Пример #1
0
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);
}
Пример #3
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);
}
Пример #5
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);
}
Пример #6
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;
}
Пример #7
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");
}
Пример #8
0
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;
}