📄 main.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 + -