Ordered and Unordered expressions

Figure 51. OrderedExpr

OrderedExpr

Figure 52. UnorderedExpr

UnorderedExpr

By default, the order in which a for clause binds its items is important.

This behaviour can be relaxed in order give the optimizer more leeway. An unordered expression relaxes ordering by for clauses within its operand scope:

Example 132. An unordered expression.

unordered {
  for $captain in collection("captains")
  where $captain.century eq 24
  return $captain
}
      

Result (run with Zorba): { "name" : "Jean-Luc Picard", "series" : [ "The next generation" ], "century" : 24 } { "name" : "Benjamin Sisko", "series" : [ "The next generation", "Deep Space 9" ], "century" : 24 } { "name" : "Kathryn Janeway", "series" : [ "The next generation", "Voyager" ], "century" : 24 } { "codename" : "Emergency Command Hologram", "surname" : "The Doctor", "series" : [ "Voyager" ], "century" : 24 }


An ordered expression can be used to reactivate ordering behaviour in a subscope.

Example 133. An ordered expression.

unordered {
  for $captain in collection("captains")
  where ordered { exists(for $movie at $i in collection("movies")
                         where $i eq 5
                         where $movie.captain eq $captain.name
                         return $movie) }
  return $captain
}
      

Result (run with Zorba): { "name" : "James T. Kirk", "series" : [ "The original series" ], "century" : 23 }