Here is an HTTP JSON data object with a valid datetime:
{
"query":"query getTasksDue($dueBefore:string) { getTasksDue(func:lt(Task.due,$dueBefore)) {id:uid } }",
"variables":{
"$date":"2019-01-01T00:00:00Z"
}
}
Here are some with invalid datetime types:
{
"query":"query getTasksDue($dueBefore:string) { getTasksDue(func:lt(Task.due,$dueBefore)) {id:uid } }",
"variables":{
"$date":"2017-13-01T00:00:00Z"
}
}
{
"query":"query getTasksDue($dueBefore:string) { getTasksDue(func:lt(Task.due,$dueBefore)) {id:uid } }",
"variables":{
"$date":"1483228800"
}
}
These will return the errors:
: Got error: parsing time "2017-13-01T00:00:00Z": month out of range while running: name:"lt" args:"2017-13-01T00:00:00Z"
: Got error: parsing time "1483228800" as "2006-01-02": cannot parse "228800" as "-" while running: name:"lt" args:"1483228800"
But this bug I guess is a feature in a weird kind of way…
I can search for partial dates, so all of these formats will be valid a YYYY
, YYYY-MM
, YYYY-MM-dd
, YYYY-MM-ddThh:mm:ss``, or
YYYY-MM-ddThh:mm:ssZ`.
But, for completeness I cannot use the format S
(Epoch seconds),YYYY-MM-ddT
, YYYY-MM-ddThh
, or YYYY-MM-ddThh:mm
What I was expecting is more along the lines of this error if I try to provide something instead of a string (except null)
Error parsing JSON at line 5, character 1: json: cannot unmarshal [number|bool] into Go struct field .variables of type string\n"
EDIT: Why is this important? I may be wrong, but I believe that the type catches are caught BEFORE query execution and the parsing date is caught DURING queryexecution. If caught before query execution then none of the query blocks will be ran and an immediate error will be triggered. But if there are a dozen query blocks then the error will only be caught on the one with the parsing error and the rest will still be ran utilizing resources not needed because the type was invalid.
I may be wrong in the thought process above because I do not receive any of the extensions to know how many uids were touched if any.