diff options
author | Muh Muhten <muh.muhten@gmail.com> | 2019-02-26 05:54:58 -0500 |
---|---|---|
committer | Nico Williams <nico@cryptonector.com> | 2019-02-26 11:05:25 -0600 |
commit | 76e72a301db9883dc13073ac64187d48d4eade41 (patch) | |
tree | 18468d0b8a008922ed7d621c9685ffb87b34e432 | |
parent | a1626adb7ec90f19e57f24eafefb7b1bdb518e7d (diff) |
Simplify and optimize SQLish builtins
-rw-r--r-- | src/builtin.jq | 10 | ||||
-rw-r--r-- | tests/jq.test | 11 |
2 files changed, 14 insertions, 7 deletions
diff --git a/src/builtin.jq b/src/builtin.jq index 321358c6..ee780176 100644 --- a/src/builtin.jq +++ b/src/builtin.jq @@ -263,11 +263,7 @@ def walk(f): # SQL-ish operators here: def INDEX(stream; idx_expr): - reduce stream as $row ({}; - .[$row|idx_expr| - if type != "string" then tojson - else . - end] |= $row); + reduce stream as $row ({}; .[$row|idx_expr|tostring] = $row); def INDEX(idx_expr): INDEX(.[]; idx_expr); def JOIN($idx; idx_expr): [.[] | [., $idx[idx_expr]]]; @@ -275,5 +271,5 @@ def JOIN($idx; stream; idx_expr): stream | [., $idx[idx_expr]]; def JOIN($idx; stream; idx_expr; join_expr): stream | [., $idx[idx_expr]] | join_expr; -def IN(s): reduce (first(select(. == s)) | true) as $v (false; if . or $v then true else false end); -def IN(src; s): reduce (src|IN(s)) as $v (false; if . or $v then true else false end); +def IN(s): any(s == .; .); +def IN(src; s): any(src == s; .); diff --git a/tests/jq.test b/tests/jq.test index b85f897d..28b325f9 100644 --- a/tests/jq.test +++ b/tests/jq.test @@ -1575,6 +1575,17 @@ true true true +range(5;13)|IN(range(0;10;3)) +null +false +true +false +false +true +false +false +false + range(10;12)|IN(range(10)) null false |