⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 eXtremeDB数据库在Linux平台下的使用源码。内含多个示例程序
💻 C
字号:
/***************************************************************** *                                                               * * Copyright (c) 2001-2007 McObject LLC. All Right Reserved.     * *                                                               * *****************************************************************//* * This sample demonstrates the use of user-defined compare functions for tree index */#include <platform.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "udf.h"#define DBSIZE      ( 1024 * 16000 )#define PAGESIZE    128const int MAP_ADDRESS =  0x20000000;int file_writer(void *stream_handle /* FILE *  */, const void * from, unsigned nbytes) {	FILE *f = (FILE*)stream_handle;	int nbs = fwrite(from,1,nbytes,f);	return nbs;}int file_reader(void *stream_handle /* FILE *  */, /* OUT */ void * to, unsigned max_nbytes) {	FILE *f = (FILE*)stream_handle;  int nbs = -1;  if (to == 0)    return nbs;	nbs = fread(to,1,max_nbytes,f);	return nbs;}void _SH_(void) {	char text[] = {		"\nThis sample demonstrates the use of user-defined compare functions for tree index\n"	};	char text1[] = {		"Copyright (c) 2001-2007 McObject LLC. All Right Reserved.\n\n"	};	printf("%s\neXtremeDB runtime version %d.%d, build %d\n%s\n\nPress Enter to start",		text, MCO_COMP_VER_MAJOR, MCO_COMP_VER_MINOR, MCO_COMP_BUILD_NUM,text1);	getchar();}static void errhandler( int n ) {	printf( "\neXtremeDB runtime fatal error: %d", n );	getchar();	exit( -1 );}int main( void ) {	int  ret=-2;	const char  *dbName = "udf";	MCO_RET     rc;	mco_db_h    db = 0;	mco_trans_h t;	int 		i;	Record 		rec;	mco_cursor_t c;	void *start_mem;	mco_runtime_info_t info;        uint2 len;        uint4 value;	char buf[12];	char search[11];	FILE *f;	char fname[] = "udf.dat";	char *fruits[] = {                        "banana",                        "PEAR",                        "plum",                        "Peach",                        "apricot",                        "Kiwi",                        "QUINCE",                        "pineapple",                        "Lemon", 			"orange",			"apple",                        "pawpaw",                        "Fig",                         "mango",                         "MANDARIN",                         "Persimmon",                         "Grapefruit",                        0 };	_SH_();	mco_get_runtime_info( &info);	if ( info.mco_shm_supported ) {		start_mem = (void*)MAP_ADDRESS;	}	else {		start_mem = (void*)malloc(DBSIZE);		if (!start_mem) {			printf("Couldn't allocated memory\n");			exit (1);		}	};	mco_error_set_handler( &errhandler );	rc= mco_runtime_start();	rc = mco_db_open( dbName, udf_get_dictionary(), start_mem, DBSIZE, (uint2) PAGESIZE );	if ( rc ) {		printf( "\nerror %d creating database", rc );		if ( !info.mco_shm_supported )			free( start_mem );		exit( 1);	}        /* register generated udfs on database name */	mco_db_register_udf(dbName, udf_get_udfs());	/* connect to the database, obtain a database handle */	rc = mco_db_connect( dbName, &db );	if ( rc ) {	  printf("\nerror %d connecting database", rc);  	 if ( !info.mco_shm_supported )			free( start_mem );	  exit( 1);	}        /* insert Records */        for (i = 0; fruits[i]; ++i) {		rc = mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );		if( MCO_S_OK != rc ) exit(1);		rc = Record_new(t, &rec);		Record_value_put(&rec, i);		Record_name_put(&rec, fruits[i], (uint2) strlen(fruits[i]));		rc = mco_trans_commit(t);		if (MCO_S_OK == rc) 		    printf("\nInsert: name=%-15s, value = %d", fruits[i], i);		else 		    printf("\nCan't insert %-15s : error %d", fruits[i], rc);	}	printf("\n\nStandard Tree sequential (case-sensitive) :");	rc = mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );	rc = Record_tstd_index_cursor(t, &c );	if ( rc == MCO_S_OK ) {		for (rc = mco_cursor_first(t, &c); rc == MCO_S_OK;  rc = mco_cursor_next(t, &c)) {		    Record_from_cursor(t, &c, &rec);		    Record_name_get(&rec, buf, 11 , &len);		    Record_value_get(&rec, &value);		    printf("\nName = %-15s, value = %d", buf, value);		}	} else printf("\nError : %d", rc);	mco_trans_commit(t);	printf("\n\nUser-defined Tree sequential (case-insensitive) :");	rc = mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );	rc = Record_tudf_index_cursor(t, &c );	if ( rc == MCO_S_OK ) {		for (rc = mco_cursor_first(t, &c); rc == MCO_S_OK;  rc = mco_cursor_next(t, &c)) {		    Record_from_cursor(t, &c, &rec);		    Record_name_get(&rec, buf, 11 , &len);		    Record_value_get(&rec, &value);		    printf("\nName = %-15s, value = %d", buf, value);		}	} else printf("\nError : %d", rc);	mco_trans_commit(t);	rc = mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );		strcpy(search, "kiwi"); // try find this fruit	        printf("\n\nFind string \"%s\" :", search);	rc = Record_tudf_find(t, search, (uint2) strlen(search), &rec );	if ( rc == MCO_S_OK ) {		    Record_name_get(&rec, buf, 11 , &len);		    Record_value_get(&rec, &value);		    printf("\nUser-defined tree: name = %s, value = %d", buf, value);			ret++;	} else printf("\nUser-defined tree: not found");	rc = Record_tstd_find(t, search, (uint2) strlen(search), &rec );	if ( rc == MCO_S_OK ) {		    Record_name_get(&rec, buf, 11 , &len);		    Record_value_get(&rec, &value);		    printf("\nStandard tree    : name = %s, value = %d", buf, value);	} else {		printf("\nStandard tree    : not found");		ret++;	}	mco_trans_commit(t);	/* disconnect from the database, db is no longer valid */	mco_db_disconnect( db );	/* destroy the database */	mco_db_close( dbName );	mco_runtime_stop();	if ( !info.mco_shm_supported )		free( start_mem );	printf( "\n\nPress Enter to exit" );	getchar();       PROG_EXIT(ret);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -