mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00
Fix reverse boundary check
This commit is contained in:
parent
8b299a03e2
commit
972221972a
@ -17,10 +17,10 @@
|
||||
opt.jsonify = true;
|
||||
|
||||
|
||||
function ename(t){ return encodeURIComponent(t).replace(/\*/g, '%2A') }
|
||||
function ename(t){ return encodeURIComponent(t).replace(/\*/g, '%2A') } // TODO: Hash this also, but allow migration!
|
||||
function atomic(v){ return u !== v && (!v || 'object' != typeof v) }
|
||||
var timediate = (typeof setImmediate === "undefined")? setTimeout : setImmediate;
|
||||
var puff = setTimeout.puff || timediate;
|
||||
var timediate = (''+u === typeof setImmediate)? setTimeout : setImmediate;
|
||||
var puff = setTimeout.turn || timediate, u;
|
||||
var map = Radix.object;
|
||||
var ST = 0;
|
||||
|
||||
@ -37,6 +37,9 @@
|
||||
//opt.log("WARNING: `store.list` interface might be needed!");
|
||||
}
|
||||
|
||||
if(''+u != typeof require){ require('./yson') }
|
||||
var parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }
|
||||
var json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }
|
||||
/*
|
||||
Any and all storage adapters should...
|
||||
1. Because writing to disk takes time, we should batch data to disk. This improves performance, and reduces potential disk corruption.
|
||||
@ -286,8 +289,8 @@
|
||||
DBG && (DBG.rl = +new Date);
|
||||
if(!o.next){ o.more = 0 }
|
||||
if(o.next){
|
||||
if(!o.reverse && (key < o.next && 0 != o.next.indexOf(key)) || (u !== o.end && (o.end || '\uffff') < o.next)){ o.more = 0 }
|
||||
if(o.reverse && (key > o.next && 0 != key.indexOf(o.next)) || (u !== o.start && (o.start || '') > o.next)){ o.more = 0 }
|
||||
if(!o.reverse && ((key < o.next && 0 != o.next.indexOf(key)) || (u !== o.end && (o.end || '\uffff') < o.next))){ o.more = 0 }
|
||||
if(o.reverse && ((key > o.next && 0 != key.indexOf(o.next)) || ((u !== o.start && (o.start || '') > o.next && file <= o.start)))){ o.more = 0 }
|
||||
}
|
||||
if(!o.more){ cb(g.err, data, o); return }
|
||||
if(data){ cb(g.err, data, o) }
|
||||
@ -345,8 +348,11 @@
|
||||
p.read = function(err, data){ var tmp;
|
||||
DBG && (DBG.rpg = +new Date);
|
||||
console.STAT && console.STAT(S, +new Date - S, 'read disk', JSON.stringify(file), ++RPC, 'total all parses.');
|
||||
delete Q[file];
|
||||
if((p.err = err) || (p.not = !data)){ p.map(q, p.ack); return }
|
||||
if((p.err = err) || (p.not = !data)){
|
||||
delete Q[file];
|
||||
p.map(q, p.ack);
|
||||
return;
|
||||
}
|
||||
if('string' !== typeof data){
|
||||
try{
|
||||
if(opt.pack <= data.length){
|
||||
@ -355,30 +361,39 @@
|
||||
data = data.toString(); // If it crashes, it crashes here. How!?? We check size first!
|
||||
}
|
||||
}catch(e){ p.err = e }
|
||||
if(p.err){ p.map(q, p.ack); return }
|
||||
if(p.err){
|
||||
delete Q[file];
|
||||
p.map(q, p.ack);
|
||||
return;
|
||||
}
|
||||
}
|
||||
info.parsed = data.length;
|
||||
DBG && (DBG.rpl = info.parsed);
|
||||
DBG && (DBG.rpa = q.length);
|
||||
S = +new Date;
|
||||
if(opt.jsonify || '{' === data[0]){
|
||||
try{
|
||||
var json = JSON.parse(data); // TODO: this caused a out-of-memory crash!
|
||||
p.disk.$ = json;
|
||||
if(!(opt.jsonify || '{' === data[0])){
|
||||
p.radec(err, data);
|
||||
return;
|
||||
}
|
||||
parse(data, function(err, tree){
|
||||
if(!err){
|
||||
delete Q[file];
|
||||
p.disk.$ = tree;
|
||||
console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, 'rad parsed JSON');
|
||||
DBG && (DBG.rpd = +new Date);
|
||||
p.map(q, p.ack); // hmmm, v8 profiler can't see into this cause of try/catch?
|
||||
return;
|
||||
}catch(e){ tmp = e }
|
||||
}
|
||||
if('{' === data[0]){
|
||||
delete Q[file];
|
||||
p.err = tmp || "JSON error!";
|
||||
p.map(q, p.ack);
|
||||
return;
|
||||
}
|
||||
}
|
||||
p.radec(err, data);
|
||||
p.radec(err, data);
|
||||
});
|
||||
}
|
||||
p.map = function(){
|
||||
p.map = function(){ // switch to setTimeout.each now?
|
||||
if(!q || !q.length){ return }
|
||||
//var i = 0, l = q.length, ack;
|
||||
var S = +new Date;
|
||||
@ -398,6 +413,7 @@
|
||||
cb(u, p.disk, info);
|
||||
}
|
||||
p.radec = function(err, data){
|
||||
delete Q[file];
|
||||
S = +new Date;
|
||||
var tmp = p.split(data), pre = [], i, k, v;
|
||||
if(!tmp || 0 !== tmp[1]){
|
||||
|
@ -27,15 +27,7 @@ var Gun;
|
||||
;(function(){
|
||||
Gun = root.Gun
|
||||
|
||||
if(Gun.window && !Gun.window.RindexedDB){ return }
|
||||
|
||||
var opt = {};
|
||||
opt.file = 'radatatest';
|
||||
var Radisk = (Gun.window && Gun.window.Radisk) || require('../../lib/radisk');
|
||||
opt.store = ((Gun.window && Gun.window.RindexedDB) || require('../../lib/rfs'))(opt);
|
||||
opt.chunk = 1000;
|
||||
var Radix = Radisk.Radix;
|
||||
var rad = Radisk(opt), esc = String.fromCharCode(27);
|
||||
var Radix = (Gun.window && Gun.window.Radix) || require('../../lib/radix3');
|
||||
|
||||
describe('RAD', function(){
|
||||
|
||||
@ -157,6 +149,15 @@ var names = ["Adalard","Adora","Aia","Albertina","Alfie","Allyn","Amabil","Ammam
|
||||
});
|
||||
});
|
||||
|
||||
if(Gun.window && !Gun.window.RindexedDB){ return }
|
||||
|
||||
var opt = {};
|
||||
opt.file = 'radatatest';
|
||||
var Radisk = (Gun.window && Gun.window.Radisk) || require('../../lib/radisk');
|
||||
opt.store = ((Gun.window && Gun.window.RindexedDB) || require('../../lib/rfs'))(opt);
|
||||
opt.chunk = 1000;
|
||||
var rad = Radisk(opt), esc = String.fromCharCode(27);
|
||||
|
||||
describe('Radisk', function(){
|
||||
|
||||
/*it('parse', function(done){
|
||||
@ -184,24 +185,30 @@ var names = ["Adalard","Adora","Aia","Albertina","Alfie","Allyn","Amabil","Ammam
|
||||
})
|
||||
});
|
||||
|
||||
/*it('read contacts reverse', function(done){
|
||||
it('read contacts reverse', function(done){
|
||||
var opt = {};
|
||||
opt.reverse = true;
|
||||
opt.end = 'nothing';
|
||||
opt.start = 'marcy';
|
||||
opt.start = 'keeley';
|
||||
var first, last;
|
||||
var all = {}, start = opt.start.toLowerCase(), end = opt.end.toLowerCase();
|
||||
names.forEach(function(v,i){
|
||||
v = v.toLowerCase();
|
||||
if(v < start){ return }
|
||||
if(end < v){ return }
|
||||
//console.log(v, i);
|
||||
all[v] = v;
|
||||
//rad(v, i)
|
||||
});
|
||||
rad('', function(err, data){
|
||||
console.log("???", err, data);
|
||||
return;
|
||||
Radix.map(data, function(v,k){
|
||||
console.log(k, v);
|
||||
//delete all[find+k];
|
||||
//console.log(k, v);
|
||||
delete all[k];
|
||||
});
|
||||
//if(!Object.empty(all)){ return }
|
||||
//done();
|
||||
if(!Object.empty(all)){ return }
|
||||
done();
|
||||
}, opt);
|
||||
});
|
||||
console.log("UNDO THIS RETURN!!!");return;*/
|
||||
|
||||
it('read contacts start end', function(done){
|
||||
var opt = {};
|
||||
@ -277,13 +284,14 @@ var names = ["Adalard","Adora","Aia","Albertina","Alfie","Allyn","Amabil","Ammam
|
||||
});
|
||||
|
||||
});
|
||||
return;
|
||||
|
||||
var ntmp = names;
|
||||
describe('RAD + GUN', function(){
|
||||
var ochunk = 1000;
|
||||
var gun = Gun({chunk: ochunk});
|
||||
|
||||
it.only('write same', function(done){
|
||||
it('write same', function(done){
|
||||
var all = {}, to, start, tmp;
|
||||
var names = [], c = 285;
|
||||
while(--c){ names.push('bob') }
|
||||
|
Loading…
x
Reference in New Issue
Block a user