diff options
author | vvvv <[email protected]> | 2022-03-22 23:53:21 +0300 |
---|---|---|
committer | vvvv <[email protected]> | 2022-03-22 23:53:21 +0300 |
commit | 0453c1d9bee8dd457e0553fc37d442e64c9ab3c7 (patch) | |
tree | 7902c40c4abbb29ac0ede3c434e2c6ab9acf16cb | |
parent | 16b7176916707a6bc2a2fb771d1764d19a20bb2d (diff) |
YQL-13710 support of aliasing returned datum with argument
ref:5ff41f5ceaa7cb7a4e2d95b0b51f751bf3d71595
-rw-r--r-- | ydb/library/yql/parser/pg_wrapper/comp_factory.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp b/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp index f0f7c2acad4..248dbd92695 100644 --- a/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp +++ b/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp @@ -22,6 +22,7 @@ extern "C" { #include "catalog/pg_collation_d.h" #include "utils/fmgrprotos.h" #include "utils/builtins.h" +#include "utils/datum.h" #include "utils/memutils.h" #include "nodes/execnodes.h" #include "lib/stringinfo.h" @@ -377,7 +378,18 @@ public: return NUdf::TUnboxedValuePod(); } - return RetTypeDesc.PassByValue ? ScalarDatumToPod(ret) : PointerDatumToPod(ret); + if (RetTypeDesc.PassByValue) { + return ScalarDatumToPod(ret); + } + + for (ui32 i = 0; i < ArgNodes.size(); ++i) { + if (!ArgDesc[i].PassByValue && !callInfo.args[i].isnull && callInfo.args[i].value == ret) { + ret = datumCopy(ret, RetTypeDesc.PassByValue, RetTypeDesc.TypeLen); + break; + } + } + + return PointerDatumToPod(ret); } PG_CATCH(); { |