fix: bugs with ISTree and KVstore;

virtual functions not matched in ISTree;
unsigned type matching error in KVstore;

both fixed, by zengli
This commit is contained in:
bookug 2017-05-18 14:42:48 +08:00
parent f3202ada40
commit 405bb21a9a
7 changed files with 38 additions and 26 deletions

View File

@ -82,6 +82,7 @@ ISLeafNode::getValue(int _index) const
int num = this->getNum();
if (_index < 0 || _index >= num)
{
//cout<<"null in getValue: "<<_index<<endl;
//print(string("error in getValue: Invalid index ") + Util::int2string(_index));
return NULL;
}
@ -131,7 +132,7 @@ ISLeafNode::setValue(char* _str, unsigned _len, int _index, bool ifcopy)
int num = this->getNum();
if (_index < 0 || _index >= num)
{
print(string("error in setValue: Invalid index ") + Util::int2string(_index));
//print(string("error in setValue: Invalid index ") + Util::int2string(_index));
return false;
}
this->values[_index].release(); //NOTICE: only used in modify
@ -146,9 +147,12 @@ bool
ISLeafNode::addValue(char* _str, unsigned _len, int _index, bool ifcopy)
{
int num = this->getNum();
//cout<<"addValue: "<<num<<" "<<_index<<endl;
if (_index < 0 || _index > num)
{
print(string("error in addValue: Invalid index ") + Util::int2string(_index));
//print(string("error in addValue: Invalid index ") + Util::int2string(_index));
//cout<<"error in addValue: "<<_index<<" "<<num<<endl;
return false;
}
int i;
@ -157,6 +161,7 @@ ISLeafNode::addValue(char* _str, unsigned _len, int _index, bool ifcopy)
this->values[_index].setStr(_str);
this->values[_index].setLen(_len);
//cout<<"show: "<<this->values[_index].getLen()<<" "<<this->values[_index].getStr()[0]<<endl;
return true;
}
@ -167,7 +172,7 @@ ISLeafNode::subValue(int _index, bool ifdel)
int num = this->getNum();
if (_index < 0 || _index >= num)
{
print(string("error in subValue: Invalid index ") + Util::int2string(_index));
//print(string("error in subValue: Invalid index ") + Util::int2string(_index));
return false;
}
int i;
@ -319,8 +324,8 @@ ISLeafNode::coalesce(ISNode* _father, int _index)
p->subNum();
break;
default:
print("error in coalesce: Invalid case!");
//printf("error in coalesce: Invalid case!");
//print("error in coalesce: Invalid case!");
cout<<"error in coalesce: Invalid case!"<<endl;
}
_father->setDirty();
p->setDirty();

View File

@ -88,8 +88,8 @@ public:
virtual void setPrev(ISNode* _prev) {};
virtual void setNext(ISNode* _next) {};
virtual bool setValue(const char* _str, unsigned _len, int _index, bool ifcopy = false) { return true; };
virtual bool addValue(const char* _str, unsigned _len, int _index, bool ifcopy = false) { return true; };
virtual bool setValue(char* _str, unsigned _len, int _index, bool ifcopy = false) { return true; };
virtual bool addValue(char* _str, unsigned _len, int _index, bool ifcopy = false) { return true; };
//pure virtual function
virtual void Virtual() = 0;

View File

@ -401,10 +401,10 @@ ISStorage::writeNode(ISNode* _np)
for (i = 0; i < num; ++i)
{
this->writeBstr(_np->getValue(i), &blocknum, SpecialBlock);
if(_np->getKey(0) == 0)
{
cout<<"the 0th value: "<<_np->getValue(i)->getStr()[0]<<endl;
}
//if(_np->getKey(0) == 0)
//{
//cout<<"the 0th value: "<<_np->getValue(i)->getStr()[0]<<endl;
//}
}
}
fseek(treefp, Address(blocknum), SEEK_SET);

View File

@ -218,8 +218,9 @@ KVstore::getSubjectPredicateDegree(TYPE_ENTITY_LITERAL_ID _subid, TYPE_PREDICATE
int ret = 0;
if(_get)
{
int _result = KVstore::binarySearch(_preid, _tmp + 3, _tmp[1], 2);
if (_result != -1)
unsigned _result = KVstore::binarySearch(_preid, _tmp + 3, _tmp[1], 2);
//if (_result != -1)
if (_result != INVALID)
{
int _offset = _tmp[4 + 2 * _result];
int _offset_next;
@ -257,8 +258,9 @@ KVstore::getObjectPredicateDegree(TYPE_ENTITY_LITERAL_ID _objid, TYPE_PREDICATE_
int ret = 0;
if (_get)
{
int _result = KVstore::binarySearch(_preid, _tmp + 2, _tmp[1], 2);
if (_result != -1)
unsigned _result = KVstore::binarySearch(_preid, _tmp + 2, _tmp[1], 2);
//if (_result != -1)
if (_result != INVALID)
{
int _offset = _tmp[3 + 2 * _result];
int _offset_next;
@ -709,7 +711,8 @@ KVstore::updateInsert_o2values(TYPE_ENTITY_LITERAL_ID _sub_id, TYPE_PREDICATE_ID
unsigned _position = KVstore::binarySearch(_pre_id, _tmp + 2, _tmp[1], 2);
//preID doesn't exist
if (_position == -1) {
if (_position == INVALID)
{
_values_len = _len / sizeof(unsigned) + 3;
_values = new unsigned[_values_len];
_values[0] = _tmp[0] + 1;
@ -1632,6 +1635,7 @@ KVstore::getobjIDlistBysubIDpreID(TYPE_ENTITY_LITERAL_ID _subid, TYPE_PREDICATE_
_list_len = 0;
return false;
}
//cout<<"check "<<_subid<<" "<<_preid<<endl;
unsigned _result = KVstore::binarySearch(_preid, _tmp + 3, _tmp[1], 2);
//if (_result == -1)
if (_result == INVALID)
@ -2202,7 +2206,8 @@ KVstore::getpreIDlistBysubIDobjID(TYPE_ENTITY_LITERAL_ID _subid, TYPE_ENTITY_LIT
}
if (_result == _tmp[1]) {
for (unsigned j = i; j < len; j++) {
list[j] = -1;
//list[j] = -1;
list[j] = INVALID;
_list_len--;
}
break;
@ -2215,8 +2220,8 @@ KVstore::getpreIDlistBysubIDobjID(TYPE_ENTITY_LITERAL_ID _subid, TYPE_ENTITY_LIT
else {
_offset_next = _tmp[6 + 2 * _result];
}
if (KVstore::binarySearch(_objid, _tmp + _offset, _offset_next - _offset) == -1) {
list[i] = -1;
if (KVstore::binarySearch(_objid, _tmp + _offset, _offset_next - _offset) == INVALID) {
list[i] = INVALID;
_list_len--;
}
}
@ -2236,7 +2241,8 @@ KVstore::getpreIDlistBysubIDobjID(TYPE_ENTITY_LITERAL_ID _subid, TYPE_ENTITY_LIT
_preidlist = new unsigned[_list_len];
unsigned i = 0, j = 0;
while (i < len) {
if (list[i] != -1) {
if (list[i] != INVALID)
{
_preidlist[j] = list[i];
i++;
j++;
@ -2451,11 +2457,12 @@ KVstore::intersect(const unsigned* _list1, const unsigned* _list2, unsigned _len
unsigned
KVstore::binarySearch(unsigned _key, const unsigned* _list, unsigned _list_len, int _step)
{
unsigned _left = 0;
unsigned _right = _list_len - 1;
unsigned _mid;
long long _left = 0;
long long _right = _list_len - 1;
long long _mid;
while (_left <= _right) {
_mid = (_right - _left) / 2 + _left;
cout<<"check "<<_step<<" "<<_mid<<" "<<_step*_mid<<" "<<_list_len<<endl;
if (_key == _list[_step * _mid]) {
return _mid;
}

View File

@ -87,7 +87,7 @@ in the sparql query can point to the same node in data graph)
//#define DEBUG_JOIN
//#define DEBUG_STREAM
//#define DEBUG_PRECISE 1 all information
#define DEBUG_KVSTORE 1 //in KVstore
//#define DEBUG_KVSTORE 1 //in KVstore
//#define DEBUG_VSTREE 1 //in Database
//#define DEBUG_LRUCACHE 1
//#define DEBUG_DATABASE 1 //in Database

View File

@ -36,7 +36,7 @@ class VList
public:
//NOTICE:the border is 10^6, but the block is larger, 1M
static const unsigned LENGTH_BORDER = 1000000;
//static const unsigned LENGTH_BORDER = 1000;
//static const unsigned LENGTH_BORDER = 100;
static const unsigned BLOCK_SIZE = 1 << 20; //fixed size of disk-block
static const unsigned MAX_BLOCK_NUM = 1 << 23; //max block-num
//below two constants: must can be exactly divided by 8

View File

@ -934,7 +934,7 @@ VSTree::split(VNode* _p_node_being_split, const SigEntry& _insert_entry, VNode*
bool is_leaf = oldNodePtr->isLeaf();
// then create a new node to act as BEntryIndex's father.
VNode* newNodePtr = this->createNode(is_leaf);
#ifdef DEBUG
#ifdef DEBUG_VSTREE
cout<<"new node file line: "<<newNodePtr->getFileLine()<<endl;
#endif