Commit 6c415746 authored by lw's avatar lw

Implemented wb_vrepdb::object(pwr_tStatus *sts, wb_name &name)

parent 303b366b
......@@ -20,7 +20,7 @@
#if 1
int main( int argc, char *argv[])
{
//pwr_tStatus sts;
pwr_tStatus sts;
//dbs_sEnv env;
//dbs_sEnv *ep;
wb_erep *erep = new wb_erep();
......@@ -43,6 +43,8 @@ int main( int argc, char *argv[])
db.close();
wb_vrepdb vdb(erep, argv[2]);
wb_name n("VHX-NU4-KOM-EVELINA-Transar-W-cn254");
wb_orepdb *op = (wb_orepdb *)vdb.object(&sts, n);
wb_dbs adbs(vdbs);
adbs.setFileName("alasse.dbs");
......
......@@ -200,13 +200,15 @@ wb_db_name::wb_db_name(wb_db *db, wb_db_txn *txn, pwr_tOid poid, wb_name &name)
//{
//}
//wb_db_name::wb_db_name(wb_db *db, pwr_tOid poid, const char *name) :
// m_db(db), m_key(&m_k, sizeof(m_k)), m_data(&m_d, sizeof(m_d))
//{
// m_k.poid = poid();
// strcpy(m_k.normname, name);
// m_d.oid = ?;
//}
wb_db_name::wb_db_name(wb_db *db, pwr_tOid poid, const char *name) :
m_db(db), m_key(&m_k, sizeof(m_k)), m_data(&m_d, sizeof(m_d))
{
memset(&m_k, 0, sizeof(m_k));
memset(&m_d, 0, sizeof(m_d));
m_k.poid = poid;
strcpy(m_k.normname, name);
}
//wb_db_name::wb_db_name(wb_db *db, wb_db_txn *txn, pwr_tOid poid, wb_name name) :
// m_db(db), m_key(&m_k, sizeof(m_k)), m_data(&m_d, sizeof(m_d))
......@@ -214,6 +216,14 @@ wb_db_name::wb_db_name(wb_db *db, wb_db_txn *txn, pwr_tOid poid, wb_name &name)
//}
int wb_db_name::get(wb_db_txn *txn)
{
m_data.set_ulen(sizeof(m_d));
m_data.set_flags(DB_DBT_USERMEM);
int rc = m_db->m_t_name->get(txn, &m_key, &m_data, 0);
return rc;
}
int wb_db_name::put(wb_db_txn *txn)
{
return m_db->m_t_name->put(txn, &m_key, &m_data, DB_NOOVERWRITE);
......
......@@ -233,7 +233,7 @@ public:
wb_db_name(wb_db *db, wb_db_txn *txn);
wb_db_name(wb_db *db, wb_db_ohead &o);
wb_db_name(wb_db *db, pwr_tOid, char *name);
//wb_db_name(wb_db *db, pwr_tOid, char *name);
wb_db_name(wb_db *db, pwr_tOid poid, const char *name);
wb_db_name(wb_db *db, pwr_tOid oid, pwr_tOid poid, const char *name);
wb_db_name(wb_db *db, wb_db_txn *txn, pwr_tOid poid, wb_name &name);
......
#include <sys/stat.h>
#include <errno.h>
#include "co_cdh.h"
#include "wb_db.h"
#include "wb_vrepdb.h"
#include "wb_orepdb.h"
#include "wb_erep.h"
......@@ -76,20 +77,20 @@ wb_srep *wb_vrepdb::newSession()
void wb_vrepdb::objectName(pwr_tOid oid, char *name, int level)
{
if (cdh_ObjidIsNull(oid))
return;
wb_db_ohead o(m_db, m_db->m_txn, oid);
if (o.oix() == pwr_cNOix) {
strcpy(name, o.name());
strcat(name, ":");
} else {
objectName(o.poid(), name, level+1);
strcat(name, o.name());
if (level > 0)
strcat(name, "-");
}
if (cdh_ObjidIsNull(oid))
return;
wb_db_ohead o(m_db, m_db->m_txn, oid);
if (o.oix() == pwr_cNOix) {
strcpy(name, o.name());
strcat(name, ":");
} else {
objectName(o.poid(), name, level+1);
strcat(name, o.name());
if (level > 0)
strcat(name, "-");
}
}
wb_name wb_vrepdb::longName(pwr_tStatus *sts, const wb_orep *o)
......@@ -202,8 +203,29 @@ wb_orep* wb_vrepdb::object(pwr_tStatus *sts, pwr_tOid oid)
wb_orep* wb_vrepdb::object(pwr_tStatus *sts, wb_name &name)
{
*sts = LDH__NYI;
return 0;
*sts = LDH__SUCCESS;
//*sts = LDH__NYI;
// return 0;
pwr_tOid poid;
poid.vid = m_db->m_vid;
poid.oix = pwr_cNOix;
try {
for (int i = 0; name.hasSegment(i); i++) {
wb_db_name n(m_db, poid, name.normSegment(i));
int rc = n.get(m_db->m_txn);
poid = n.oid();
}
m_ohead.get(m_db->m_txn, poid);
return new (this) wb_orepdb(&m_ohead.m_o);
}
catch (DbException &e) {
*sts = LDH__NOSUCHOBJ;
printf("vrepdb: %s\n", e.what());
return 0;
}
}
wb_orep* wb_vrepdb::object(pwr_tStatus *sts, const wb_orep *parent, wb_name &name)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment