čt 28. 4. 2022 v 23:52 odesílatel Tom Lane <tgl@sss.pgh.pa.us> napsal:
I happened to notice that there are a couple of places in plpgsql that will let you assign a new value to a variable that's marked CONSTANT:
* We don't complain if an output parameter in a CALL statement is constant.
* We don't complain if a refcursor variable is constant, even though OPEN may assign a new value to it.
The attached quick-hack patch closes both of these oversights.
Perhaps the OPEN change is a little too aggressive, since if you give the refcursor variable some non-null initial value, OPEN won't change it; in that usage a CONSTANT marking could be allowed. But I really seriously doubt that anybody out there is marking such variables as constants, so I thought throwing the error at compile time was better than postponing it to runtime so we could handle that.
Regardless of which way we handle that point, I'm inclined to change this only in HEAD. Probably people wouldn't thank us for making the back branches more strict.
+1
I can implement these checks in plpgsql_check. So possible issues can be detected and fixed on older versions by using plpgsql_check.
Regards
Pavel
regards, tom lane
PS: I didn't do it here, but I'm kind of tempted to pull out all the cursor-related tests in plpgsql.sql and move them to a new test file under src/pl/plpgsql/src/sql/. They look pretty self-contained, and I doubt they're worth keeping in the core tests.