Now takes changed function of Index::Update() into account - queries on

non-indexed attributes now finally work as they should.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3330 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2003-05-26 01:47:06 +00:00
parent ab47860c37
commit e1d37632bb
+12 -11
View File
@@ -733,7 +733,7 @@ Inode::WriteAttribute(Transaction *transaction, const char *name, int32 type, of
if (attribute->ReadAt(0, oldBuffer, &oldLength) == B_OK) if (attribute->ReadAt(0, oldBuffer, &oldLength) == B_OK)
oldData = oldBuffer; oldData = oldBuffer;
} }
// ToDo: check if the data fits in the inode now and delete the file if so // ToDo: check if the data fits in the inode now and delete the attribute file if so
status = attribute->WriteAt(transaction, pos, buffer, _length); status = attribute->WriteAt(transaction, pos, buffer, _length);
attribute->Lock().UnlockWrite(); attribute->Lock().UnlockWrite();
@@ -743,17 +743,18 @@ Inode::WriteAttribute(Transaction *transaction, const char *name, int32 type, of
ReleaseAttribute(attribute); ReleaseAttribute(attribute);
} }
if (status == B_OK) { // ToDo: find a better way than this "pos" thing (the begin of the old key
// ToDo: find a better way for that "pos" thing... // must be copied to the start of the new one for a comparison)
// Update index if (status == B_OK && pos == 0) {
if (hasIndex && pos == 0) { // index only the first BPLUSTREE_MAX_KEY_LENGTH bytes
// index only the first BPLUSTREE_MAX_KEY_LENGTH bytes uint16 length = *_length;
uint16 length = *_length; if (length > BPLUSTREE_MAX_KEY_LENGTH)
if (length > BPLUSTREE_MAX_KEY_LENGTH) length = BPLUSTREE_MAX_KEY_LENGTH;
length = BPLUSTREE_MAX_KEY_LENGTH;
index.Update(transaction, name, 0, oldData, oldLength, buffer, length, this); // Update index. Note, Index::Update() may be called even if initializing
} // the index failed - it will just update the live queries in this case
if (pos < length || pos < oldLength)
index.Update(transaction, name, type, oldData, oldLength, buffer, length, this);
} }
return status; return status;
} }