summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMuh Muhten <muh.muhten@gmail.com>2019-02-26 05:54:58 -0500
committerNico Williams <nico@cryptonector.com>2019-02-26 11:05:25 -0600
commit76e72a301db9883dc13073ac64187d48d4eade41 (patch)
tree18468d0b8a008922ed7d621c9685ffb87b34e432
parenta1626adb7ec90f19e57f24eafefb7b1bdb518e7d (diff)
Simplify and optimize SQLish builtins
-rw-r--r--src/builtin.jq10
-rw-r--r--tests/jq.test11
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