File tree Expand file tree Collapse file tree 2 files changed +56
-1
lines changed
logictest/testdata/logic_test Expand file tree Collapse file tree 2 files changed +56
-1
lines changed Original file line number Diff line number Diff line change @@ -6,3 +6,47 @@ PREPARE p AS SELECT $1::INT
66
77statement error pgcode 0A000 cannot evaluate function in this context
88EXECUTE p(f())
9+
10+ statement ok
11+ DEALLOCATE p;
12+
13+ # Ensure that stable folding does not affect plans stored in the plan cache.
14+ subtest regression_147186
15+
16+ statement ok
17+ CREATE FUNCTION f147186() RETURNS INT LANGUAGE SQL AS $$ SELECT CAST(current_setting('foo.bar') AS INT) $$;
18+
19+ statement ok
20+ CREATE TABLE t147186 (a INT, b INT DEFAULT f147186());
21+
22+ statement ok
23+ PREPARE p AS INSERT INTO t147186 (a) VALUES ($1);
24+
25+ statement ok
26+ SET foo.bar = '100';
27+
28+ statement ok
29+ EXECUTE p(1);
30+
31+ query II rowsort
32+ SELECT a, b FROM t147186;
33+ ----
34+ 1 100
35+
36+ statement ok
37+ SET foo.bar = '200';
38+
39+ statement ok
40+ EXECUTE p(2);
41+
42+ # The second row should reflect the custom var change.
43+ query II rowsort
44+ SELECT a, b FROM t147186;
45+ ----
46+ 1 100
47+ 2 200
48+
49+ statement ok
50+ DEALLOCATE p;
51+
52+ subtest end
Original file line number Diff line number Diff line change @@ -382,9 +382,20 @@ func (f *Factory) AssignPlaceholders(from *memo.Memo) (err error) {
382382 }
383383 recursiveRoutines [t .Def ] = struct {}{}
384384 }
385+ // Copy the arguments, if any.
386+ var newArgs memo.ScalarListExpr
387+ if t .Args != nil {
388+ copiedArgs := f .CopyAndReplaceDefault (& t .Args , replaceFn ).(* memo.ScalarListExpr )
389+ newArgs = * copiedArgs
390+ }
391+ // Make sure to copy the slice that stores the body statements, rather
392+ // than mutating the original.
393+ newDef := * t .Def
394+ newDef .Body = make ([]memo.RelExpr , len (t .Def .Body ))
385395 for i := range t .Def .Body {
386- t . Def .Body [i ] = f .CopyAndReplaceDefault (t .Def .Body [i ], replaceFn ).(memo.RelExpr )
396+ newDef .Body [i ] = f .CopyAndReplaceDefault (t .Def .Body [i ], replaceFn ).(memo.RelExpr )
387397 }
398+ return f .ConstructUDFCall (newArgs , & memo.UDFCallPrivate {Def : & newDef })
388399 case * memo.RecursiveCTEExpr :
389400 // A recursive CTE may have the stats change on its Initial expression
390401 // after placeholder assignment, if that happens we need to
You can’t perform that action at this time.
0 commit comments