On 08/30/18 15:35, Robert Haas wrote: > On Tue, Aug 28, 2018 at 6:30 AM, Peter Eisentraut > <peter.eisentr...@2ndquadrant.com> wrote: >> CALL compatible with the SQL standard. For example, if you have a >> function f1(IN a int, OUT b int), you would call it as SELECT f1(x) >> and the "b" would somehow be the return value. But a procedure call >> would be CALL p1(x, y), where x and y could be, say, PL/pgSQL >> variables.
I suppose the key question for most driver writers is going to be, what does that difference look like at the fe-be protocol level? PL/pgSQL might be an unrepresentative example for that question, as it lives in the backend and could have some other way of retrieving b to store in y. For any remote client, the result still needs to get back there before the client can apply any "this result gets assigned to my y variable" semantics, and is there any material difference between the protocol message sequences that return these results select foo(1,2); select * from foo(1,2); call bar(1,2); to the client? And, in the parallel universe where functions got implemented according to the standard, what in that picture would be different? -Chap