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

📄 xmltest.c

📁 extremeDB s sample code,useful for you
💻 C
字号:
/*************************************************************** *                                                             * * Copyright (c) 2001-2006 McObject LLC. All Right Reserved.   * *                                                             * ***************************************************************//* This samples demonstartes export of the eXtremeDB data to XML * The following xml-related interfaces are demonstrated: * * mco_xml_get_policy(); * mco_xml_set_policy(); * <class_name>_xml_get(); * <class_name>_xml_schema(); */#include <platform.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "XMLtestDB.h"#ifdef MCO_PLATFORM_X64#define MCO_OID(hi,lo) (hi<<32)+lo#else //MCO_PLATFORM_X64#define MCO_OID(hi,lo) {hi,lo}#endif //MCO_PLATFORM_X64static const char *dbname = "XMLtestDB";static const int  SEGSZ = 1024 * 1024 * 1;#ifndef MCO_PLATFORM_X64static const int  PAGESIZE = 96;#elsestatic const int  PAGESIZE = 192;#endifstatic int num_obj[3];//int  output_to = 0;int  output_to = 1;#if defined (_VXWORKS)  char xml_name[] = "/tgtsvr/output.xml";#elif defined (_WIN32_WCE)  char xml_name[] = "output.xml";#else  char xml_name[] = "output.xml";#endifconst int MAP_ADDRESS =  0x20000000;/************************************************************/void _SH_(void) {	char text[] = {		"\nThis samples demonstartes eXtremeDB XML export\n"	};	char text1[] = {		"Copyright (c) 2001-2006 McObject LLC. All Right Reserved.\n\n"	};	printf("\nUsage: xml [-f]\n");	printf("%s\neXtremeDB runtime version %d.%d, build %d\n%s\n",		text, MCO_COMP_VER_MAJOR, MCO_COMP_VER_MINOR, MCO_COMP_BUILD_NUM,text1);	if (output_to)		printf("\nOutput to file \"%s\"\n\nPress Enter to start", xml_name);	else		printf("\nConsole output\n\nPress Enter to start");	getchar();}/************************************************************/void showStat( mco_db_h db, uint2 class_code ) {	MCO_RET               rc = 0;	mco_trans_h           t;	mco_class_stat_t    stat;	mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );	rc = mco_class_stat_get( t, class_code, &stat );	mco_trans_commit( t );	if ( rc == MCO_S_OK ) {		printf("\n\tStatistics for the class with code %d:\n"			"\tNumber of objects:\t%ld\n"			"\tTotal core pages used:\t%ld\n"			"\tTotal blob pages used:\t%ld\n"			"\tTotal core space used:\t%ld\n",			class_code,			stat.objects_num,			stat.core_pages,			stat.blob_pages,			stat.core_space);		num_obj[class_code-1] = stat.objects_num;	}}void showMem( mco_db_h db ) {	mco_puint totalpg, freepg;	mco_db_free_pages( db, &freepg );	mco_db_total_pages( db, &totalpg );	printf("\n\tMemory Report:"		"\n\ttotal pages=%d (%dK)"		"\n\t free pages=%d (%dK)"		"\n\t used %dK\n",		totalpg, totalpg * PAGESIZE / 1024,		freepg,  freepg * PAGESIZE / 1024,		(totalpg - freepg) * PAGESIZE / 1024);}/************************************************************/static int erase(mco_db_h db) {	mco_cursor_t  csr;	mco_trans_h   t;	Person        p_obj;	Children      c_obj;	Dog           d_obj;	int           n;	for ( n=0; n < num_obj[Dog_code-1]; n++ ) {		mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );		Dog_list_cursor( t, &csr );		mco_cursor_first(t, &csr);		Dog_from_cursor( t, &csr, &d_obj );		Dog_delete( &d_obj );		mco_trans_commit( t );	}	for ( n=0; n < num_obj[Children_code-1]; n++ ) {		mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );		Children_list_cursor( t, &csr );		mco_cursor_first(t, &csr);		Children_from_cursor( t, &csr, &c_obj );		Children_delete( &c_obj );		mco_trans_commit( t );	}	for ( n=0; n < num_obj[Person_code-1]; n++ ) {		mco_trans_start( db, MCO_READ_WRITE, MCO_TRANS_FOREGROUND, &t );		Person_list_cursor( t, &csr );		mco_cursor_first(t, &csr);		Person_from_cursor( t, &csr, &p_obj );		Person_delete( &p_obj );		mco_trans_commit( t );	}	return 0;}int do_print(void *stream_handle,const void * from, unsigned nbytes) {	if (!stream_handle) {		unsigned i;		stream_handle = 0;		for ( i=0; i < nbytes; i++ ) printf("%c", ((char*)from)[i]);	}else	{		FILE * f = (FILE*)stream_handle;		unsigned i;		for ( i=0; i < nbytes; i++ ) {			char c = ((char*)from)[i];			if(c==0)				c = c;			fprintf(f, "%c", c);		}	}	return 0;}static int insert(mco_db_h db) {	MCO_RET     rc;	mco_trans_h t;	Person      p_obj;	Children    c_obj;	Dog         d_obj;	Residence res;	Address   adr;	Country   cnt;	Date      dat;	Phone     pho;	Office    off;	rc = mco_trans_start(db,MCO_READ_WRITE,MCO_TRANS_FOREGROUND,&t);	if(rc) return rc;#include "XMLpers1.c"#include "XMLpers2.c"#include "XMLpers3.c"	{											  /* Child # 1 */		XMLtestDB_oid fat = {			"XXIV-CE",			MCO_OID(123456789ul, 87654321ul)		};		XMLtestDB_oid mot = {			"XX-ABCD",			MCO_OID(88888888ul, 99999999ul)		};		rc = Children_new(t, &c_obj);		if(rc) goto err;		Children_father_put(&c_obj, &fat);		Children_mother_put(&c_obj, &mot);		Children_name_put(&c_obj, "Leny", 4);		Children_height_put(&c_obj, (float)1.67);		Children_weight_put(&c_obj, 67.5);		Children_age_put(&c_obj, 18);	}	{											  /* Child # 2 */		XMLtestDB_oid fat = {			"12345",			MCO_OID(123454321ul, 87654322ul)		};		XMLtestDB_oid mot = {			"XX-ABCD",			MCO_OID(88888888ul,99999999ul)		};		rc = Children_new(t, &c_obj);		if(rc) goto err;		Children_father_put(&c_obj, &fat);		Children_mother_put(&c_obj, &mot);		Children_name_put(&c_obj, "Elias", 5);		Children_height_put(&c_obj, (float)1.82);		Children_weight_put(&c_obj, 87.5);		Children_age_put(&c_obj, 27);	}	{		XMLtestDB_oid own = {			"XX-SX",			MCO_OID(123456789ul, 87654323ul)		};		{										  /* Dog # 1 */			rc = Dog_new(t, &d_obj);			if(rc) goto err;			Dog_name_put(&d_obj, "Misty", 5);			Dog_owner_put(&d_obj, &own);		}		{										  /* Dog # 2 */			XMLtestDB_oid own = {				"XX-SX",				MCO_OID(123456789ul, 87654323ul)			};			rc = Dog_new(t, &d_obj);			if(rc) goto err;			Dog_name_put(&d_obj, "Grrrr", 5);			Dog_owner_put(&d_obj, &own);		}		{										  /* Dog # 3 */			XMLtestDB_oid own = {				"XX-ABCD",				MCO_OID(88888888ul, 99999999ul)			};			rc = Dog_new(t, &d_obj);			if(rc) goto err;			Dog_name_put(&d_obj, "Clumzy", 6);			Dog_owner_put(&d_obj, &own);		}		{										  /* Dog # 4 */			XMLtestDB_oid own = {				"XXIV-AB",				MCO_OID(123456789ul, 87654321ul)			};			rc = Dog_new(t, &d_obj);			if(rc) goto err;			Dog_name_put(&d_obj, "Bibo", 4);			Dog_owner_put(&d_obj, &own);		}		{										  /* Dog # 5 */			XMLtestDB_oid own = {				"XXIV-AB",				MCO_OID(123456789ul, 87654321ul)			};			rc = Dog_new(t, &d_obj);			if(rc) goto err;			Dog_name_put(&d_obj, "Tank", 4);			Dog_owner_put(&d_obj, &own);		}	}	rc = mco_trans_commit(t);	return rc;	err:	rc = mco_trans_rollback(t);	return rc;}/************************************************************//* fatal error handler */static void errhandler( int n ) {	printf( "\neXtremeDB runtime fatal error: %d", n );	getchar();	exit( -1 );}/************************************************************/#include "mcoxml.h"static const char xml_header1[] ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<data>\n";static const char xml_header2[] = "</data>";MCO_RET output_schema (mco_db_h db ) {	mco_trans_h t;	FILE * f = 0;	MCO_RET rc;	{		printf("\n********* Class \"Person\" xml schema: ********* \n\n");		mco_trans_start(db, MCO_READ_ONLY,MCO_TRANS_FOREGROUND, &t);		if (output_to)			f = fopen("person.xsd", "w");		Person_xml_schema( t, f, &do_print );		if (output_to) fclose(f);		rc = mco_trans_commit(t);		if (rc) return rc;	}	mco_trans_start(db, MCO_READ_ONLY,MCO_TRANS_FOREGROUND, &t);	{		printf("\n\n********* Class \"Children\" xml schema:********* \n\n");		if (output_to)			f = fopen("children.xsd", "w");		Children_xml_schema( t, f, &do_print );		if (output_to) fclose(f);		rc = mco_trans_commit(t);		if(rc) return rc;	}	{		printf("\n\n********* Class \"Dog\" xml schema:********* \n\n");		mco_trans_start(db, MCO_READ_ONLY,MCO_TRANS_FOREGROUND, &t);		if (output_to)			f = fopen("dog.xsd", "w");		Dog_xml_schema( t, f, &do_print );		if (output_to) fclose(f);		rc = mco_trans_commit(t);		if (rc) return rc;	}	return 0;}MCO_RET output_data (mco_db_h db ) {	mco_trans_h t;	Person p_obj;	Children c_obj;	Dog      d_obj;	MCO_RET rc;	mco_cursor_t  c;	FILE * f = 0;	rc = mco_trans_start(db, MCO_READ_ONLY,MCO_TRANS_FOREGROUND, &t);	if(rc) return rc;	if (output_to)		f = fopen(xml_name,"w");	if (!f) output_to = 0;	do_print(f, xml_header1, strlen(xml_header1));	rc = Person_list_cursor(t, &c);	if(rc) return rc;	rc = mco_cursor_first(t, &c);	if(rc) return rc;	for(;;) {		rc = Person_from_cursor ( t, &c, &p_obj);		if(rc) return rc;		rc = Person_xml_get(&p_obj, f, &do_print);		if(rc) return rc;		if ( mco_cursor_next(t, &c) != MCO_S_OK ) break;	}	rc = Children_list_cursor(t, &c);	if(rc) return rc;	rc = mco_cursor_first(t, &c);	if(rc) return rc;	for(;;) {		rc = Children_from_cursor ( t, &c, &c_obj);		if(rc) return rc;		rc = Children_xml_get(&c_obj, f, &do_print);		if(rc) return rc;		if ( mco_cursor_next(t, &c) != MCO_S_OK ) break;	}	rc = Dog_list_cursor(t, &c);	if(rc) return rc;	rc = mco_cursor_first(t, &c);	if(rc) return rc;	for(;;) {		rc = Dog_from_cursor ( t, &c, &d_obj);		if(rc) return rc;		rc = Dog_xml_get(&d_obj, f, &do_print);		if(rc) return rc;		if ( mco_cursor_next(t, &c) != MCO_S_OK ) break;	}	do_print(f, xml_header2, strlen(xml_header2));	if (f) fclose(f);	rc = mco_trans_commit(t);	return rc;}/************************************************************/int main( int argc, char **argv ) {	MCO_RET       rc;	mco_db_h  db = 0;	char *p;	int i;	char    * start_mem;	mco_trans_h   t;	mco_xml_policy_t policy;	mco_runtime_info_t info;	if (argc > 1) {		for (i = 1; i < argc; i++) {			p = argv[i];			printf("%s\n",p);			start:			switch (*p) {				case (' '):					p++;					goto start;				case ('/'):				case ('-'):					switch( (*++p) ) {						case ('F'):						case ('f'):							output_to = 1;							break;						default:							break;					}					break;				default:					break;			}		}	}	_SH_();	mco_get_runtime_info( &info);	if ( info.mco_shm_supported ) {		start_mem = (char*)MAP_ADDRESS;	}	else {		start_mem = (char*)malloc(SEGSZ);		if (!start_mem) {			printf("Couldn't allocated memory\n");			exit (1);		}	};	/* set fatal error handler */	mco_error_set_handler( &errhandler );	rc = mco_runtime_start();	rc = mco_db_open( dbname, XMLtestDB_get_dictionary(), start_mem, SEGSZ, (uint2) PAGESIZE );	if ( rc ) {		printf( "\nerror creating database" );		if ( !info.mco_shm_supported )			free( start_mem );		exit( 1 );	}	/* connect to the database, obtain a database handle */	mco_db_connect( dbname, &db );	rc = mco_trans_start(db,MCO_READ_WRITE,MCO_TRANS_FOREGROUND,&t);	if(rc) {		goto end;	};	if (MCO_E_UNSUPPORTED == (rc=mco_xml_get_policy(t, &policy))) {		printf("\nXML is not supported!\n\n");		goto end;	}	policy.text_coding = MCO_TEXT_ASCII;		  //BASE64;	policy.blob_coding = MCO_TEXT_ASCII;		  //BASE64;	policy.ignore_field = MCO_YES;	mco_xml_set_policy(t, &policy);	rc = mco_trans_commit(t);	if(rc) goto end;	rc = insert(db);	if(rc) goto end;	rc = output_data(db);	if(rc) goto end;	rc = output_schema(db);	if(rc) goto end;	rc = erase(db);	end:	/* disconnect from the database, db is no longer valid */	mco_db_disconnect( db );	/* destroy the db */	mco_db_close( dbname );	if ( !info.mco_shm_supported )		free( start_mem );  printf("\nPress Enter to finish\n");	getchar();  PROG_EXIT(0);;}

⌨️ 快捷键说明

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