summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <[email protected]>2022-03-22 23:53:21 +0300
committervvvv <[email protected]>2022-03-22 23:53:21 +0300
commit0453c1d9bee8dd457e0553fc37d442e64c9ab3c7 (patch)
tree7902c40c4abbb29ac0ede3c434e2c6ab9acf16cb
parent16b7176916707a6bc2a2fb771d1764d19a20bb2d (diff)
YQL-13710 support of aliasing returned datum with argument
ref:5ff41f5ceaa7cb7a4e2d95b0b51f751bf3d71595
-rw-r--r--ydb/library/yql/parser/pg_wrapper/comp_factory.cpp14
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();
{