mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-06-20 21:16:37 +00:00
Handle operations based on the hash, not key.
This commit is contained in:
parent
cf62db5534
commit
ac9af3ddb5
@ -29,7 +29,7 @@ class OperationsLog {
|
||||
let node, logHash;
|
||||
return this._log.add(entry)
|
||||
.then((op) => node = op)
|
||||
.then(() => this._padOperation(node))
|
||||
.then(() => Object.assign(node.payload, { hash: node.hash }))
|
||||
.then(() => Log.getIpfsHash(this._ipfs, this._log))
|
||||
.then((hash) => logHash = hash)
|
||||
.then(() => this._lastWrite = logHash)
|
||||
@ -56,8 +56,8 @@ class OperationsLog {
|
||||
.then((other) => this._log.join(other))
|
||||
.then((merged) => newItems = merged)
|
||||
.then(() => Cache.set(this.dbname, hash))
|
||||
.then(() => newItems.map((f) => this._padOperation(f)))
|
||||
.then((items) => items.map((f) => f.payload))
|
||||
.then(() => newItems.forEach((f) => Object.assign(f.payload, { hash: f.hash })))
|
||||
.then(() => newItems.map((f) => f.payload))
|
||||
}
|
||||
|
||||
delete() {
|
||||
@ -66,8 +66,6 @@ class OperationsLog {
|
||||
|
||||
_padOperation(node) {
|
||||
Object.assign(node.payload, { hash: node.hash });
|
||||
if(node.payload.key === null)
|
||||
Object.assign(node.payload, { key: node.hash });
|
||||
return node;
|
||||
}
|
||||
}
|
||||
|
@ -13,12 +13,12 @@ class EventIndex {
|
||||
let handled = [];
|
||||
|
||||
updated.forEach((item) => {
|
||||
if(handled.indexOf(item.key) === -1) {
|
||||
handled.push(item.key);
|
||||
if(handled.indexOf(item.hash) === -1) {
|
||||
handled.push(item.hash);
|
||||
if(item.op === 'ADD') {
|
||||
this._index[item.key] = item
|
||||
} else if(item.op === 'DELETE') {
|
||||
delete this._index[item.key];
|
||||
this._index[item.hash] = item
|
||||
} else if(item.op === 'DEL') {
|
||||
delete this._index[item.value];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -20,7 +20,7 @@ class EventStore extends Store {
|
||||
}
|
||||
|
||||
remove(hash) {
|
||||
return this._addOperation('DELETE', hash);
|
||||
return this._addOperation('DEL', null, hash);
|
||||
}
|
||||
|
||||
iterator(options) {
|
||||
@ -48,14 +48,15 @@ class EventStore extends Store {
|
||||
if(!opts) opts = {};
|
||||
|
||||
const amount = opts.limit ? (opts.limit > -1 ? opts.limit : this._index.get().length) : 1; // Return 1 if no limit is provided
|
||||
const operations = this._index.get();
|
||||
let result = [];
|
||||
|
||||
if(opts.gt || opts.gte) {
|
||||
// Greater than case
|
||||
result = this._read(this._index.get(), opts.gt ? opts.gt : opts.gte, amount, opts.gte ? true : false)
|
||||
result = this._read(operations, opts.gt ? opts.gt : opts.gte, amount, opts.gte ? true : false)
|
||||
} else {
|
||||
// Lower than and lastN case, search latest first by reversing the sequence
|
||||
result = this._read(this._index.get().reverse(), opts.lt ? opts.lt : opts.lte, amount, opts.lte || !opts.lt).reverse()
|
||||
result = this._read(operations.reverse(), opts.lt ? opts.lt : opts.lte, amount, opts.lte || !opts.lt).reverse()
|
||||
}
|
||||
|
||||
if(opts.reverse) result.reverse();
|
||||
@ -63,9 +64,9 @@ class EventStore extends Store {
|
||||
return result.toArray();
|
||||
}
|
||||
|
||||
_read(ops, key, amount, inclusive) {
|
||||
_read(ops, hash, amount, inclusive) {
|
||||
return Lazy(ops)
|
||||
.skipWhile((f) => key && f.key !== key)
|
||||
.skipWhile((f) => hash && f.hash !== hash)
|
||||
.drop(inclusive ? 0 : 1)
|
||||
.take(amount);
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ describe('Orbit Client', function() {
|
||||
await(db.add('hello3'));
|
||||
const items = db.iterator().collect();
|
||||
assert.equal(items.length, 1);
|
||||
assert.equal(items[0].key.startsWith('Qm'), true);
|
||||
assert.equal(items[0].key, null);
|
||||
assert.equal(items[0].hash.startsWith('Qm'), true);
|
||||
assert.equal(items[0].value, 'hello3');
|
||||
done();
|
||||
@ -250,10 +250,10 @@ describe('Orbit Client', function() {
|
||||
const iter = db.iterator();
|
||||
const next = iter.next().value;
|
||||
assert.notEqual(next, null);
|
||||
assert.notEqual(next.key, null);
|
||||
assert.equal(next.key.startsWith('Qm'), true);
|
||||
assert.equal(next.key, null);
|
||||
assert.equal(next.hash.startsWith('Qm'), true);
|
||||
assert.equal(next.value, 'hello4');
|
||||
assert.notEqual(next.meta.ts, null);
|
||||
done();
|
||||
}));
|
||||
|
||||
@ -272,7 +272,7 @@ describe('Orbit Client', function() {
|
||||
const iter = db.iterator();
|
||||
const first = iter.next().value;
|
||||
const second = iter.next().value;
|
||||
assert.equal(first.key, items[items.length - 1]);
|
||||
assert.equal(first.hash, items[items.length - 1]);
|
||||
assert.equal(second, null);
|
||||
assert.equal(first.value, 'hello4');
|
||||
done();
|
||||
@ -306,7 +306,7 @@ describe('Orbit Client', function() {
|
||||
const iter = db.iterator({ limit: 1 });
|
||||
const first = iter.next().value;
|
||||
const second = iter.next().value;
|
||||
assert.equal(first.key, _.last(items));
|
||||
assert.equal(first.hash, _.last(items));
|
||||
assert.equal(second, null);
|
||||
done();
|
||||
}));
|
||||
@ -315,7 +315,7 @@ describe('Orbit Client', function() {
|
||||
const iter = db.iterator({ limit: 1 });
|
||||
const first = iter.next().value;
|
||||
const second = iter.next().value;
|
||||
assert.equal(first.key, _.last(items));
|
||||
assert.equal(first.hash, _.last(items));
|
||||
assert.equal(second, null);
|
||||
done();
|
||||
}));
|
||||
@ -326,9 +326,9 @@ describe('Orbit Client', function() {
|
||||
const second = iter.next().value;
|
||||
const third = iter.next().value;
|
||||
const fourth = iter.next().value;
|
||||
assert.equal(first.key, items[items.length - 3]);
|
||||
assert.equal(second.key, items[items.length - 2]);
|
||||
assert.equal(third.key, items[items.length - 1]);
|
||||
assert.equal(first.hash, items[items.length - 3]);
|
||||
assert.equal(second.hash, items[items.length - 2]);
|
||||
assert.equal(third.hash, items[items.length - 1]);
|
||||
assert.equal(fourth, null);
|
||||
done();
|
||||
}));
|
||||
@ -336,7 +336,7 @@ describe('Orbit Client', function() {
|
||||
it('returns all items', async((done) => {
|
||||
const messages = db.iterator({ limit: -1 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
messages.reverse();
|
||||
assert.equal(messages.length, items.length);
|
||||
@ -347,7 +347,7 @@ describe('Orbit Client', function() {
|
||||
it('returns all items when limit is bigger than -1', async((done) => {
|
||||
const messages = db.iterator({ limit: -300 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, items.length);
|
||||
assert.equal(messages[0], items[0]);
|
||||
@ -357,7 +357,7 @@ describe('Orbit Client', function() {
|
||||
it('returns all items when limit is bigger than number of items', async((done) => {
|
||||
const messages = db.iterator({ limit: 300 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, items.length);
|
||||
assert.equal(messages[0], items[0]);
|
||||
@ -369,7 +369,7 @@ describe('Orbit Client', function() {
|
||||
it('returns all items reversed', async((done) => {
|
||||
const messages = db.iterator({ limit: -1, reverse: true })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, items.length);
|
||||
assert.equal(messages[0], items[0]);
|
||||
@ -382,7 +382,7 @@ describe('Orbit Client', function() {
|
||||
it('returns 1 item when gte is the head', async((done) => {
|
||||
const messages = db.iterator({ gte: _.last(items), limit: -1 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, 1);
|
||||
assert.equal(messages[0], _.last(items));
|
||||
@ -399,7 +399,7 @@ describe('Orbit Client', function() {
|
||||
const gte = items[items.length - 2];
|
||||
const messages = db.iterator({ gte: gte, limit: -1 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, 2);
|
||||
assert.equal(messages[0], items[items.length - 2]);
|
||||
@ -410,7 +410,7 @@ describe('Orbit Client', function() {
|
||||
it('returns all items when gte is the root item', async((done) => {
|
||||
const messages = db.iterator({ gte: items[0], limit: -1 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, items.length);
|
||||
assert.equal(messages[0], items[0]);
|
||||
@ -421,7 +421,7 @@ describe('Orbit Client', function() {
|
||||
it('returns items when gt is the root item', async((done) => {
|
||||
const messages = db.iterator({ gt: items[0], limit: -1 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, itemCount - 1);
|
||||
assert.equal(messages[0], items[1]);
|
||||
@ -432,13 +432,13 @@ describe('Orbit Client', function() {
|
||||
it('returns items when gt is defined', async((done) => {
|
||||
const messages = db.iterator({ limit: -1})
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
const gt = messages[2];
|
||||
|
||||
const messages2 = db.iterator({ gt: gt, limit: 100 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages2.length, 2);
|
||||
assert.equal(messages2[0], messages[messages.length - 2]);
|
||||
@ -451,7 +451,7 @@ describe('Orbit Client', function() {
|
||||
it('returns one item after head when lt is the head', async((done) => {
|
||||
const messages = db.iterator({ lt: _.last(items) })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, 1);
|
||||
assert.equal(messages[0], items[items.length - 2]);
|
||||
@ -461,7 +461,7 @@ describe('Orbit Client', function() {
|
||||
it('returns all items when lt is head and limit is -1', async((done) => {
|
||||
const messages = db.iterator({ lt: _.last(items), limit: -1 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, items.length - 1);
|
||||
assert.equal(messages[0], items[0]);
|
||||
@ -472,7 +472,7 @@ describe('Orbit Client', function() {
|
||||
it('returns 3 items when lt is head and limit is 3', async((done) => {
|
||||
const messages = db.iterator({ lt: _.last(items), limit: 3 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, 3);
|
||||
assert.equal(messages[0], items[items.length - 4]);
|
||||
@ -489,7 +489,7 @@ describe('Orbit Client', function() {
|
||||
it('returns one item when lte is the root item', async((done) => {
|
||||
const messages = db.iterator({ lte: items[0] })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, 1);
|
||||
assert.equal(messages[0], items[0]);
|
||||
@ -499,7 +499,7 @@ describe('Orbit Client', function() {
|
||||
it('returns all items when lte is the head', async((done) => {
|
||||
const messages = db.iterator({ lte: _.last(items), limit: -1 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, itemCount);
|
||||
assert.equal(messages[0], items[0]);
|
||||
@ -510,7 +510,7 @@ describe('Orbit Client', function() {
|
||||
it('returns 3 items when lte is the head', async((done) => {
|
||||
const messages = db.iterator({ lte: _.last(items), limit: 3 })
|
||||
.collect()
|
||||
.map((e) => e.key);
|
||||
.map((e) => e.hash);
|
||||
|
||||
assert.equal(messages.length, 3);
|
||||
assert.equal(messages[0], items[items.length - 3]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user