# A Warning about Side-Effects

XSLT does not guarantee the order of execution of instructions. In principle, the `sql:close` instruction could be evaluated before the `sql:query` instruction, which would obviously be disastrous.

In practice, Saxon's order of execution for XSLT instructions is reasonably predictable unless you use variables, or unless you invoke stylesheet functions from within an XPath expression. Using the SQL extension instructions within templates that are directly invoked is thus fairly safe, but it is not a good idea to invoke them as a side-effect of computing a variable or invoking a function. The exceptions are `sql:connect` and `sql:query`: if you use these instructions to evaluate the content of a variable, then of course they will be executed before any instruction that uses the value of the variable.

Expand |