на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Реализация высокоуровнего интерфейса вокруг базы данных Berclee DB
p align="left">#include "../hblib/utils.hh"

#include "../hblib/hdb.hh"

#include "tbmain.hh"

#include "dbmain.hh"

//#include <stdio.h>

//#include <stdlib.h>

//#include <time.h>

//#include <string.h>

//#include <stdarg.h>

//#include <pthread.h>

//#include <unistd.h>

//#include <dirent.h>

//#include <ctype.h>

//#include <sys/types.h>

//#include "../hibase/consts.hh"

//#include "../hibase/ll.hh"

//#include "../hibase/hdb.hh"

//#include "myconst.hh"

//#include "dbmain.hh"

namespace hb{};

using namespace hb;

namespace hb{};

using namespace hb;

#define NUMDB 2

enum maindbNames{

dbnsupplier = 0,dbnthing};

static hbInit tblIndexes[]={

{ "supplier::name","supplier.i","name",DB_HASH,0,0,0,&qsupplier::idx_name, 0, 0 },

{ "thing::name","thing.i","name",DB_HASH,0,0,0,&qthing::idx_name, 0, 0 }

};

static hbInit tblInits[]={

{"supplier","supplier.q",0,DB_QUEUE,0,1, tblIndexes + 0 , 0, &qsupplier::GetRef_supplier, 0},

{"thing","thing.q",0,DB_QUEUE,0,1, tblIndexes + 1 , 0, &qthing::GetRef_thing, 1}

};

envInit mainEnvInit={

NUMDB,

"$Id: tblproc.pm,v 1.35 2004/01/10 23:57:48 bora Exp $"

};

qsupplier::qsupplier(mainEnv& env): hbTable<supplierKey,supplierVal>(env,tblInits[dbnsupplier]), menv(env)

{}

void qsupplier::RefInit()

{

}

void qsupplier::GetRef_supplier(uint num, char* key,char* val, db_recno_t*& refs, uint& ref_count)

{

supplierKey *key1 = (supplierKey*)key;

supplierVal *val1 = (supplierVal*)val;

}

void supplierKey::Export(FILE* f)

{

fprintf(f,"%d",key);

}

void supplierKey::Import(char* buf, uint len)

{

int j,num, i = 0;

char temp;

buf[i]=='')break;}

temp = buf[i];buf[i] = '\0';sscanf(buf+j,"%d",&key);

buf[i] = temp;

i++;

}

supplierKey::supplierKey(const db_recno_t& key_temp)

{

memset(this,0,sizeof(*this));

key = key_temp;

}

void supplierVal::Export(FILE* f)

{

fprintf(f,"{");

CharArrInToStr(f,name,12);

fprintf(f,"}");

fprintf(f,",");

fprintf(f,"{");

CharArrInToStr(f,desc,40);

fprintf(f,"}");

}

void supplierVal::Import(char* buf, uint len)

{

int j,num, i = 0;

char temp;

if(buf[i++] !='{')

throw hbExcp(3,LL_CRITICAL,0,"Ошибка импорта: +указатель на таблицу = 0.");

j = i;

for(;i<len;i++)

{

if (buf[i] == '}' && buf[i-1]!='\\')

break;

}

StrToCharArr(buf+j,i-j,name,12);

i+= 2;

if(buf[i++] !='{')

throw hbExcp(3,LL_CRITICAL,0,"Ошибка импорта: +указатель на таблицу = 0.");

j = i;

for(;i<len;i++)

{

if (buf[i] == '}' && buf[i-1]!='\\')

break;

}

StrToCharArr(buf+j,i-j,desc,40);

i+= 2;

}

supplierVal::supplierVal(char* name_temp,char* desc_temp)

{

memset(this,0,sizeof(*this));

strncpy(name,name_temp, sizeof(name));

strncpy(desc,desc_temp, sizeof(desc));

}

isupplier_name::isupplier_name(char* name_temp)

{

memcpy(name,name_temp,sizeof(name));

}

int qsupplier::idx_name(Db *db,const Dbt* pk,const Dbt* pv,Dbt* fv)

{

supplierVal *v= (supplierVal*)(pv->get_data());

fv->set_data(v->name);

fv->set_size(sizeof(isupplier_name));

return 0;

}

//------------------------------------------------------------------------------

qthing::qthing(mainEnv& env): hbTable<thingKey,thingVal>(env,tblInits[dbnthing]), menv(env)

{}

void qthing::RefInit()

{

ref.reftables[0].type = '+';

ref.reftables[0].reftable = &menv.tsupplier;

}

void qthing::GetRef_thing(uint num, char* key,char* val, db_recno_t*& refs, uint& ref_count)

{

thingKey *key1 = (thingKey*)key;

thingVal *val1 = (thingVal*)val;

if(num==0)

{

refs = &val1->tsupplier; ref_count = 1;

}

}

void thingKey::Export(FILE* f)

{

fprintf(f,"%d",key);

}

void thingKey::Import(char* buf, uint len)

{

int j,num, i = 0;

char temp;

')break;}

temp = buf[i];buf[i] = '\0';sscanf(buf+j,"%d",&key);

buf[i] = temp;

i++;

}

thingKey::thingKey(const db_recno_t& key_temp)

{

memset(this,0,sizeof(*this));

key = key_temp;

}

void thingVal::Export(FILE* f)

{

fprintf(f,"%d",tsupplier);

fprintf(f,",");

fprintf(f,"{");

CharArrInToStr(f,name,12);

fprintf(f,"}");

fprintf(f,",");

fprintf(f,"{");

CharArrInToStr(f,desc,40);

fprintf(f,"}");

}

void thingVal::Import(char* buf, uint len)

{

int j,num, i = 0;

char temp;

buf[i]=='')break;}

temp = buf[i];buf[i] = '\0';sscanf(buf+j,"%d",&tsupplier);

buf[i] = temp;

if(tsupplier == 0) throw hbExcp(3,LL_CRITICAL,0," Ошибка импорта: +указатель на таблицу = 0. ");

i++;

if(buf[i++] !='{')

throw hbExcp(3,LL_CRITICAL,0," Ошибка импорта: не могу распарсить строку.");

j = i;

for(;i<len;i++)

{

if (buf[i] == '}' && buf[i-1]!='\\')

break;

}

StrToCharArr(buf+j,i-j,name,12);

i+= 2;

if(buf[i++] !='{')

throw hbExcp(3,LL_CRITICAL,0," Ошибка импорта: не могу распарсить строку. ");

j = i;

for(;i<len;i++)

{

if (buf[i] == '}' && buf[i-1]!='\\')

break;

}

StrToCharArr(buf+j,i-j,desc,40);

i+= 2;

}

thingVal::thingVal(const db_recno_t& tsupplier_temp,char* name_temp,char* desc_temp)

{

memset(this,0,sizeof(*this));

tsupplier = tsupplier_temp;

strncpy(name,name_temp, sizeof(name));

strncpy(desc,desc_temp, sizeof(desc));

}

ithing_name::ithing_name(char* name_temp)

{

memcpy(name,name_temp,sizeof(name));

}

int qthing::idx_name(Db *db,const Dbt* pk,const Dbt* pv,Dbt* fv)

{

thingVal *v= (thingVal*)(pv->get_data());

fv->set_data(v->name);

fv->set_size(sizeof(ithing_name));

return 0;

}

//------------------------------------------------------------------------------

mainEnv::mainEnv(const char *path,ushort flt, Log* LogObj1):hbEnv(path,mainEnvInit,flt,LogObj1),

tsupplier(* (new qsupplier(*this))),

tthing(* (new qthing(*this)))

{

dbs[dbnsupplier] = &tsupplier;tsupplier.RefInit();

dbs[dbnthing] = &tthing;tthing.RefInit();

}

Файл пример описан так

int main(void)

{

mainEnv env ("./DataBase/");

//создаем базу, то есть формируем необходимые файлы для всех таблиц

env.Init(bexcp(16,"main","example.cc",3,LL_DEBUG));

env.Close(bexcp(16,"main","example.cc",3,LL_DEBUG));

env.ImportDB(bexcp(16,"main","example.cc",3,LL_DEBUG),"./Export1.ex");

env.ExportDB(bexcp(16,"main","example.cc",3,LL_DEBUG),"./Export.ex");

// проверяем на индексную целостность

env.CheckForIdx(bexcp(16,"main","example.cc",3,LL_DEBUG));

// проверяем на ссылочную целостность

env.CheckForRef(bexcp(16,"main","example.cc",3,LL_DEBUG));

env.OpenTDSMode(); //открываем ее в нормальном транзакционном режиме

try

{

hbTxn tx(env);

tx.Start();

supplierKey key = {1} ;

supplierVal val = {"Boris","Boss"};

env.tsupplier.Put(&tx,&key,&val);

thingKey key = {1} ;

thingVal val = {1,"Computer","best"};

env.tthing.Put(&tx,&key,&val);

tx.commit();

}

catch(hbExcp& excp)

{

cout<<excp.what();

}

env.Close();

return 0;

}

7.Заключение

На сегодняшний день навигационно-сетевые базы вновь приобрели свою актуальность. Это обуславливается, главным образом, их очень высокой скоростью работы, даже, несмотря на сложность понимания для неквалифицированного специалиста. Чтобы облегчить работу программисту с такой базой средствами BerkeleyDB к ней был введен генератор объектно-ориентированного интерфейса. Это позволило качественно улучшить скорость разработки на С++ и повысить уровень абстракции работы с ней.

8.Список используемой литературы:

1) http://www.sleepycat.com - официальный сайт компании -разработчика BerkeleyDB

2) The Object Data Standard ODMG 3.0. New York, MK, 2002.

3) Gamma E., Helm R., Johnson R., Vlissides J. Design Patterns: Elements of reusable object-oriented software, Reading, MA: Addison-Westley, 1995.

4) Герберт Шилдт. Полный справочник по С. М., Вильямс, 2002.

Страницы: 1, 2, 3, 4, 5, 6



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.