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
                      )

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"
le <- "<="
ge <- ">="
l <- "<"
g <- ">"
