mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-03 11:45:18 +00:00
## Issue: This PR adds an "EXISTS" condition to the event query grammar. It enables querying for the occurrence of an event without having to provide a condition for one of its attributes. As an example, someone interested in all slashing events might currently catch them with a query such as slash.power > 0. With this PR the event can be captured with slash.power EXISTS or just slash EXISTS to catch by event type. ## Examples: `slash EXISTS` ## Commits: * Add EXISTS condition to query grammar * Gofmt files * Move PEG instructions out of auto-generated file to prevent overwrite * Update libs/pubsub/query/query.go Co-Authored-By: Anton Kaliaev <anton.kalyaev@gmail.com> * Update changelog and add test case * Merge with other changes in PR #4070 * Add EXISTS to Conditions() func * Apply gofmt * Addressing PR comments
36 lines
1019 B
Plaintext
36 lines
1019 B
Plaintext
package query
|
|
|
|
type QueryParser Peg {
|
|
}
|
|
|
|
e <- '\"' condition ( ' '+ and ' '+ condition )* '\"' !.
|
|
|
|
condition <- tag ' '* (le ' '* (number / time / date)
|
|
/ ge ' '* (number / time / date)
|
|
/ l ' '* (number / time / date)
|
|
/ g ' '* (number / time / date)
|
|
/ equal ' '* (number / time / date / value)
|
|
/ contains ' '* value
|
|
/ exists
|
|
)
|
|
|
|
tag <- < (![ \t\n\r\\()"'=><] .)+ >
|
|
value <- < '\'' (!["'] .)* '\''>
|
|
number <- < ('0'
|
|
/ [1-9] digit* ('.' digit*)?) >
|
|
digit <- [0-9]
|
|
time <- "TIME " < year '-' month '-' day 'T' digit digit ':' digit digit ':' digit digit (('-' / '+') digit digit ':' digit digit / 'Z') >
|
|
date <- "DATE " < year '-' month '-' day >
|
|
year <- ('1' / '2') digit digit digit
|
|
month <- ('0' / '1') digit
|
|
day <- ('0' / '1' / '2' / '3') digit
|
|
and <- "AND"
|
|
|
|
equal <- "="
|
|
contains <- "CONTAINS"
|
|
exists <- "EXISTS"
|
|
le <- "<="
|
|
ge <- ">="
|
|
l <- "<"
|
|
g <- ">"
|