Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SET statements for local variables are unreliable #19

Open
EnchoMishinevQC opened this issue Apr 13, 2022 · 0 comments
Open

SET statements for local variables are unreliable #19

EnchoMishinevQC opened this issue Apr 13, 2022 · 0 comments
Labels
bug Something isn't working

Comments

@EnchoMishinevQC
Copy link
Contributor

With the current design of the library, SET statements have a rather weird behavior. In short, before every top-level statement all local variables are redeclared with their initial value. This is a behavior hidden from the user and is potentially dangerous.

Examples

To illustrate the current behavior, here are some examples:

  • Top-level SET

    DECLARE @A INT = 10
    SET @A = 5
    PRINT @A
    

    Will print 10. The SET is actually executed but has no effect since the variable is lost after batch execution and then redeclared with its initial value before the PRINT.

  • SET in control flow

    DECLARE @A INT = 10
    IF 1 = 1
      BEGIN
        SET @A = 5
        PRINT @A
      END
    

    Will print 5 since the whole IF is executed as a single statement.

  • And a mixed example that shows the inconsistent behavior

    DECLARE @A INT = 10
    IF 1 = 1
      BEGIN
        SET @A = 5
        PRINT @A
      END
    PRINT @A
    

    Will produce 5 followed by a 10, combining the behavior of the previous two examples.

Solution

It's unfortunately not easy to fix this in general, but it would be nice to at least add a warning log whenever SET statements are parsed in a script.

Note that simply banning SET statements at top level is not sufficient, because of cases like the third example - hence it is not trivial to statically determine which scripts would work as expected.

@EnchoMishinevQC EnchoMishinevQC added the bug Something isn't working label Apr 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant