The ParserSQL-backed SET walker (algorithm 3) was round-tripping RHS values
through the Emitter, which normalises whitespace (adds ", " between function
call args) and drops delimiter quotes on identifiers (NODE_IDENTIFIER
emits its content without re-quoting). Both behaviours diverged from the
regex-based parsers used in algorithms 0-2.
The function-call drift cascaded across set_testing-t because the wrong
`sql_mode = concat(@@sql_mode, ',X')` value (with extra space) persisted on
the connection and tripped every subsequent variable comparison until reset.
The delimited-ident drift caused pgsql-set_parameter_validation_test-t to
treat `"MixedCase"` as `mixedcase` and `"$user"` as the current-user
substitution token (rather than the literal identifier the user wrote).
Walker fixes:
- NODE_FUNCTION_CALL -> paren-match in original query buffer from
value_ptr, return the verbatim substring.
- NODE_IDENTIFIER/NODE_COLUMN_REF with FLAG_IDENT_DELIMITED -> splice the
surrounding quote chars back in from value_ptr-1 / value_ptr+value_len.
Both helpers are no-ops when value_ptr is outside the query buffer (defensive
fallback to the existing emit_node_text path).
Tests: adds two strict (byte-exact) regression suites in
setparser_parsersql_test.cpp -- the existing normalize_value() collapses
whitespace and quote-style differences, which is what hid the bugs in the
first place. The new TestStrictFunctionCall and TestStrictPgsqlIdent
helpers compare verbatim so any future re-introduction is caught.
Local: 288/288 unit tests pass.