forked from alibaba/nquery
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwhere.js
57 lines (45 loc) · 1.28 KB
/
where.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// (C) 2011-2012 Alibaba Group Holding Limited.
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// version 2 as published by the Free Software Foundation.
// Author :windyrobin <[email protected]>
var Engine = require('../lib/engine');
var AstHelper = require('../lib/ast_helper');
var runExpr = Engine.run;
var fillExprOnRow = AstHelper.fillExprOnRow;
module.exports = filter;
function debug(str) {
//console.log(str);
}
function inspect(obj) {
//console.log(require('util').inspect(obj, false, 10, true));
}
function filter(dc, e) {
var cols = dc.columns;
var rows = dc.data;
//debug('before where filter:');
//inspect(dc);
var res = [];
var refCols = AstHelper.getRefColumns(e);
var refPos = AstHelper.getRefColPos(refCols, cols);
//debug('resPos:')
//inspect(refPos);
var rbackup = AstHelper.backupRefCols(refCols);
var i, r;
for (i = 0; i < rows.length; i++) {
r = rows[i];
//debug('row : ' + i);
fillExprOnRow(r, refCols, refPos);
//var ret;
if (runExpr(e)) {
res.push(r);
}
}
AstHelper.restoreRefCols(refCols, rbackup);
//debug('after filter');
//inspect(refCols);
return {
columns : cols,
data : res
}
}