`SET` statements for local variables are unreliable
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 45/100
Research direction
No file or test is named in the issue. Reproduce the three SQL examples to observe the inconsistent SET behavior, then trace where SET statements are parsed and where parser warnings are emitted. Done means parsing a SET statement produces a warning log without banning SET in control flow.
Written by the indexing model from the issue text.
Description
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 @AWill 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 ENDWill 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 @AWill 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.
- Dominant language
- C++
- Stars
- 15
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Quantco/pytsql
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
-
Difficulty 4/5 3-5 days Newbie friendliness 20/100
-
Difficulty 3/5 1-2 days Newbie friendliness 30/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
Sensor initialization takes very long when `--initial-sim-time` is set to current UNIX timestamp Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
gazebosim/gz-sensors#662 · 1 comment ·
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
comp-datalake
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
ClickHouse/ClickHouse#121222 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
LadybirdBrowser/ladybird#12123 ·