jsonsql
Advanced tools
Comparing version 0.0.1 to 0.0.2
61
index.js
@@ -19,3 +19,3 @@ var AND = '&&' | ||
} | ||
, lexicalities = {} | ||
, AST = {} | ||
, options = {}; | ||
@@ -49,3 +49,3 @@ | ||
} | ||
LogicalGrouping(lexicalities, where); | ||
LogicalGrouping(AST, where); | ||
} | ||
@@ -77,3 +77,3 @@ function LogicalGrouping(current, where) { | ||
current.or = [where]; | ||
ExtractExpression(lexicalities.or ? lexicalities.or : lexicalities.and) | ||
ExtractExpression(AST.or ? AST.or : AST.and) | ||
} | ||
@@ -160,9 +160,9 @@ } | ||
} | ||
function FilterOR(lexicality, row) { | ||
function FilterOR(ASTNode, row) { | ||
var res = false; | ||
for (var k in lexicality) { | ||
for (var k in ASTNode) { | ||
var filterFunc = (k === AND_STR ? FilterAND : (k === OR_STR ? FilterOR : Filter)); | ||
res = res || filterFunc(lexicality[k], row); | ||
res = res || filterFunc(ASTNode[k], row); | ||
if(options.trace) | ||
console.log(synopsis.step, '======((( or', lexicality[k], res); | ||
console.log(synopsis.step, '======((( or', ASTNode[k], res); | ||
if (res) return res; | ||
@@ -172,9 +172,9 @@ } | ||
} | ||
function FilterAND(lexicality, row) { | ||
function FilterAND(ASTNode, row) { | ||
var res = true; | ||
for (var k in lexicality) { | ||
for (var k in ASTNode) { | ||
var filterFunc = (k === AND_STR ? FilterAND : (k === OR_STR ? FilterOR : Filter)); | ||
res = res && filterFunc(lexicality[k], row); | ||
res = res && filterFunc(ASTNode[k], row); | ||
if(options.trace) | ||
console.log(synopsis.step, '======((( and', lexicality[k], res); | ||
console.log(synopsis.step, '======((( and', ASTNode[k], res); | ||
if (!res) return res; | ||
@@ -184,26 +184,25 @@ } | ||
} | ||
function Filter(lexicality, row) { | ||
function Filter(ASTNode, row) { | ||
synopsis.step += 1; | ||
//console.log(synopsis.level, 'lexicality', lexicality); | ||
if (lexicality.or) { | ||
var res = FilterOR(lexicality.or, row); | ||
if (ASTNode.or) { | ||
var res = FilterOR(ASTNode.or, row); | ||
if(options.trace) | ||
console.log(synopsis.step, 'OR', lexicality, res); | ||
console.log(synopsis.step, 'OR', ASTNode, res); | ||
return res; | ||
} else if (lexicality.and) { | ||
var res = FilterAND(lexicality.and, row); | ||
} else if (ASTNode.and) { | ||
var res = FilterAND(ASTNode.and, row); | ||
if(options.trace) | ||
console.log(synopsis.step, 'AND', lexicality, res); | ||
console.log(synopsis.step, 'AND', ASTNode, res); | ||
return res; | ||
} else if (typeof lexicality === 'object') { | ||
if (lexicality.eq) { // = | ||
return __hierarchize(row, lexicality.eq[0]) === lexicality.eq[1]; | ||
} else if (lexicality.ne) { // != | ||
return __hierarchize(row, lexicality.ne[0]) !== lexicality.ne[1]; | ||
} else if (lexicality.req) { // ~ | ||
return __contains(__hierarchize(row, lexicality.req[0]), lexicality.req[1]); | ||
} else if (lexicality.nreq) { // ~ | ||
return !__contains(__hierarchize(row, lexicality.nreq[0]), lexicality.nreq[1]); | ||
} else if (typeof ASTNode === 'object') { | ||
if (ASTNode.eq) { // = | ||
return __hierarchize(row, ASTNode.eq[0]) === ASTNode.eq[1]; | ||
} else if (ASTNode.ne) { // != | ||
return __hierarchize(row, ASTNode.ne[0]) !== ASTNode.ne[1]; | ||
} else if (ASTNode.req) { // ~ | ||
return __contains(__hierarchize(row, ASTNode.req[0]), ASTNode.req[1]); | ||
} else if (ASTNode.nreq) { // ~ | ||
return !__contains(__hierarchize(row, ASTNode.nreq[0]), ASTNode.nreq[1]); | ||
} else { | ||
return Filter(lexicality, row); | ||
return Filter(ASTNode, row); | ||
} | ||
@@ -215,3 +214,3 @@ } | ||
for (var k in dataSource) | ||
if (Filter(lexicalities, dataSource[k])) | ||
if (Filter(AST, dataSource[k])) | ||
result.push(dataSource[k]); | ||
@@ -234,3 +233,3 @@ return result; | ||
}; | ||
lexicalities = {}; | ||
AST = {}; | ||
opts = opts || { | ||
@@ -237,0 +236,0 @@ trace :false |
{ | ||
"name": "jsonsql", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description" : "A SQL-like query language for JSON objects.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
16881
433