Vortex SQL Expression Parser Improvements - Caveat

In (syntax) version 8 and later, various idiosyncrasies in the way Vortex parses SQL expressions (as used in some assignments, <if> statements, etc.) have been fixed, and some enhancements added. Examples include:

  • SQL functions can be called with a shorthand of <(someSqlFunc($arg))>, i.e. without needing to explicitly do an assignment (and with no effect on $ret).

  • An embedded dollar sign is consistently special - i.e. it refers to a variable, or must be escaped by doubling it - regardless of whether the statement is using a complex SQL expression or a simple $operand$ $op$ $operand$ expression. Caveat: this may affect the parsing of e.g. $rank or $$rank in SQL statements.

  • Quotes in SQL expressions are less HTML-strict, i.e. they generally need not balance at the start and end of the HTML "attribute" they appear in. E.g. <if stringformat("foo" ) = "foo"> (no space between open-parenthesis and first double-quote, but space between second double-quote and close-parenthesis) no longer causes an error.

  • Quotes within (as opposed to surrounding) HTML "attributes" sometimes were not translated correctly; e.g. statements like "<$x=(stringformat("/foo"))>" (no spaces) could cause an error in earlier (syntax) versions.

  • All expressions (e.g. for <if>/<while>) - even simple $operand$ $op$ $operand$ ones - are evaluated by SQL (not Vortex), and <sqlcp arrayconvert> always applies (to those expressions too). Caveat: this may affect the behavior of simple expressions that use multi-value variables, since in previous (syntax) versions simple expressions were evaluated by Vortex directly, and arrayconvert did not take effect.

  • A SQL expression may be given to <switch>, and arrayconvert applies to both it and <case> (caveat).

See the syntaxversion pragma (here) for more details. Also consider turning <sqlcp arrayconvertwarnifv8change> to loose (here) for a time in code that has been converted from version 7 to 8, to catch an additional possible behavior change only noticed at run time.

Copyright © Thunderstone Software     Last updated: Jun 15 2022
Copyright © 2022 Thunderstone Software LLC. All rights reserved.