This commit adds support for evaluating jsonpath conditionals.
Conditionals have the structure of $ ? (predicate)
, and will filter
the current json objects based on whether they satisfy the predicate
expression. Additionally, this commit introduces @
, which represents
the current json object so filters can be used to reference the object
being evaluated.
Informs: #142610
Epic: None
Release note (sql change): Add jsonpath filters, which take on the form
$ ? (predicate)
, allowing results to be filtered.
unwrap
parameter to jsonpath.eval
Previously, jsonpath conditionals/filters would unwrap infinitely. For
example, SELECT jsonb_path_query('{"a": [[[[{"b": 1}]]]]}', '$.a ? (@.b == 1)');
would return an entry, when postgres would not. This commit adds an
unwrap boolean parameter to eval
, which allows for control over when
to stop unwrapping json arrays. Additionally, this commit updates
eval
to take in a json.JSON
rather than a []json.JSON
, simplifying
the evaluation logic.
Epic: None
Release note: None
13 files13 files | ⊥ | r1 | r2 | r3 | r4 | ||
---|---|---|---|---|---|---|---|
Commits | ⊥ | r1 | r2 | r3 | r4 | ||
pkg/pkg/ | |||||||
sql/scanner/pkg/sql/scanner/ | |||||||
jsonpath_scan.go | ⊥ | r1 | r2 | r3 | r4 | ||
util/jsonpath/pkg/util/jsonpath/ | |||||||
expr.go | ⊥ | r1 | r2 | r3 | r4 | ||
eval/pkg/util/jsonpath/eval/ | |||||||
array.go | ⊥ | r2 | r3 | r4 | |||
BUILD.bazel | ⊥ | r1 | r2 | r3 | r4 | ||
eval.go | ⊥ | r1 | r2 | r3 | r4 | ||
filter.go | ⊥ | r1 | r2 | r3 | r4 | ||
key.go | ⊥ | r2 | r3 | r4 | |||
operation.go | ⊥ | r1 | r2 | r3 | r4 | ||
scalar.go | ⊥ | r2 | r3 | r4 | |||
parser/pkg/util/jsonpath/parser/ | |||||||
jsonpath.y | ⊥ | r1 | r2 | r3 | r4 | ||
Test Data | |||||||
pkg/pkg/ | |||||||
sql/logictest/testdata/logic_test/pkg/sql/logictest/testdata/logic_test/ | |||||||
jsonb_path_query | ⊥ | r1 | r2 | r3 | r4 | ||
util/jsonpath/parser/testdata/pkg/util/jsonpath/parser/testdata/ | |||||||
jsonpath | ⊥ | r1 | r2 | r3 | r4 |
+41 | ||
---|---|---|
+41 | ||
±0% | ||
bors — Waiting for status to be reported 1 week ago
Next diffs to review (file selection:
Show other diffs: All changes Unreviewed by…
Commits | ⊥ | r1 | r2 | r3 | r4 |
…pkg/sql/scanner/jsonpath_scan.go | ⊥ | r1 | r2 | r3 | r4 |
…pkg/util/jsonpath/expr.go | ⊥ | r1 | r2 | r3 | r4 |
…pkg/util/jsonpath/eval/array.go | ⊥ | r2 | r3 | r4 |
…pkg/util/jsonpath/eval/BUILD.bazel | ⊥ | r1 | r2 | r3 | r4 |
…pkg/util/jsonpath/eval/eval.go | ⊥ | r1 | r2 | r3 | r4 |
…pkg/util/jsonpath/eval/filter.go | ⊥ | r1 | r2 | r3 | r4 |
…pkg/util/jsonpath/eval/key.go | ⊥ | r2 | r3 | r4 |
…pkg/util/jsonpath/eval/operation.go | ⊥ | r1 | r2 | r3 | r4 |
…pkg/util/jsonpath/eval/scalar.go | ⊥ | r2 | r3 | r4 |
…pkg/util/jsonpath/parser/jsonpath.y | ⊥ | r1 | r2 | r3 | r4 |
…pkg/sql/logictest/testdata/logic_test/jsonb_path_query | ⊥ | r1 | r2 | r3 | r4 |
…pkg/util/jsonpath/parser/testdata/jsonpath | ⊥ | r1 | r2 | r3 | r4 |
Very nice! I only have a handful of nits.
Thanks!
TFTR!
bors r+
Build succeeded: