Signatures
|
jobs:schedule($query as xs:string) as xs:string
jobs:schedule($query as xs:string, $bindings as map(*)?) as xs:string
jobs:schedule($query as xs:string, $bindings as map(*)?, $options as map(xs:string, xs:string)) as xs:string
|
Summary
|
Schedules the execution of the supplied $query and returns a query id. The query will be queued, and the result will optionally be cached. Queries may be updating. Variables and context items can be declared via $bindings (see xquery:eval for more details). The $options parameter contains evaluation options:
cache : indicates if the query result will be cached or ignored (default: false ):
- The result will be cached in main-memory until it is fetched via jobs:result, or until
CACHETIMEOUT is exceeded.
- If the query raises an error, it will be cached instead.
- If the result will not be cached, the query id will immediately be discarded after query execution.
start : a dayTimeDuration, time or dateTime can be specified to delay the execution of the query:
- If a dayTimeDuration is specified, the query will be queued after the specified duration has passed. Examples for valid values are:
P1D (1 day), PT5M (5 minutes), PT0.1S (100 ms). An error will be raised if a negative value is specified.
- If a time is specified, the query will be queued at this time. Examples for valid times are:
02:00:00 (2am), 12:00:00 (noon). If the time lies in the past, the query will be executed next day.
- If a dateTime is specified, the query will be queued at this date. Examples for valid values are:
2018-12-31T23:59:59 (New Year's Eve 2018, close to midnight). An error will be raised if the specified time lies in the past.
interval : a dayTimeDuration string can be specified to execute the query periodically. An error is raised if the specified interval is less than one second (PT1S ). If the next scheduled call is due, and if a query with the same id is still running, it will be skipped.
base-uri : set base-uri property for the query. This URI will be used when resolving relative URIs by functions such as fn:doc (default: empty string).
|
Errors
|
overflow : Too many queries or query results are queued. CACHETIMEOUT can be decreased if the default setting is too restrictive.
range : A specified time or duration is out of range.
|
Examples
|
jobs:schedule("1+3", (), map { 'cache': true() }) returns a query id, e.g. Job-123 . The result can be retrieved via a second query in the same BaseX context: jobs:result("Job-123")
- The following RESTXQ function will return the id of the query thread, which evaluates the query that has been specified in the body of a POST request:
declare %rest:POST("{$query}") %rest:path('/eval') function local:schedule($query) {
jobs:schedule($query)
};
- A maintenance function will be called at 2am every day:
jobs:schedule("import module namespace m='maintain'; m:cleanup()",
(), map { 'start': '02:00:00', 'interval': 'P1D' })}}
- Query execution is scheduled for every second. As the query itself will take 1.5 seconds, it will only be executed every second time:
jobs:schedule("prof:sleep(1500)", (), map { 'interval': 'PT1S' })
|