diff --git a/resources/puppetlabs/puppetdb/pql/pql-grammar.ebnf b/resources/puppetlabs/puppetdb/pql/pql-grammar.ebnf index 4b8bb94fc2..4148f0fb0b 100644 --- a/resources/puppetlabs/puppetdb/pql/pql-grammar.ebnf +++ b/resources/puppetlabs/puppetdb/pql/pql-grammar.ebnf @@ -55,7 +55,7 @@ extract = , [], [extractfields], [], , or, , expr-or }; expr-and = expr-not { , and, , expr-and }; expr-not = ( not, [], expr-not ) | expr-rest; - = ( , [], expression, [], ) | condexpression | condexpnull | subquery; + = ( , [], expression, [], ) | condexpression | condexpnull | subquery | jsonbexpr; (* Implicit subqueries *) subquery = entity, [], where; @@ -85,6 +85,10 @@ groupedarglist = , [], [arglist], [], = (field | string), [ [], <','>, [], stringlist ]; = string , [ [], <','>, [], stringlist ]; +(* jsonb_typeof part *) +jsonbexpr = jsonb, , [], field, [], , [], condmatch, [], string; + = 'jsonb_typeof'; + (* Represents a field from an entity *) field = #'[a-zA-Z0-9_]+\??' | (dottedfield, fieldpath); = <'.'>, (quotedfield | standardfield | matchfield) , [fieldpath]; diff --git a/src/puppetlabs/puppetdb/pql/transform.clj b/src/puppetlabs/puppetdb/pql/transform.clj index ef321471e7..4646a22b71 100644 --- a/src/puppetlabs/puppetdb/pql/transform.clj +++ b/src/puppetlabs/puppetdb/pql/transform.clj @@ -52,6 +52,10 @@ [entity args] (vec (concat ["function" entity] args))) +(defn transform-jsonb-typeof + [func-name field eq-operator type] + [eq-operator ["function" func-name field] type]) + (defn transform-condexpression [a b c] (case b @@ -145,6 +149,7 @@ :expr-and transform-expr-and :expr-not transform-expr-not :function transform-function + :jsonbexpr transform-jsonb-typeof :condexpression transform-condexpression :condexpnull transform-condexpnull :groupedarglist transform-groupedlist