You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by ma...@apache.org on 2025/01/02 10:21:58 UTC
(cloudberry) 04/15: Patch handling of composite type returning TVF that evaluates to const (#14283)
This is an automated email from the ASF dual-hosted git repository.
maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 85d7ba83f87335b2a45f1652da743552dd3b30bf
Author: THANATOSLAVA <99...@users.noreply.github.com>
AuthorDate: Wed Oct 19 11:00:24 2022 -0700
Patch handling of composite type returning TVF that evaluates to const (#14283)
Issue:
Regression in GPDB compatibility with PostGIS. Exception hit by NULL Datum pointer.
Root cause:
While implementing support for composite type returning TVF, we didn't factor in unsupported PostGIS functions.
Solution:
Patch 394c058. While translating query to DXL, check if the const value of TVF is NULL. If so, fall back on planner.
Implementation:
[CTranslatorQueryToDXL] -- Raise exception if the const value of TVF cannot be populated
Co-authored-by: Jingyu Wang <wj...@vmware.com>
---
src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
index 3045ed6d35..58dedc3ca9 100644
--- a/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
+++ b/src/backend/gpopt/translate/CTranslatorQueryToDXL.cpp
@@ -3696,6 +3696,16 @@ CTranslatorQueryToDXL::TranslateTVFToDXL(const RangeTblEntry *rte,
// funcexpr evaluates to const and returns composite type
if (IsA(rtfunc->funcexpr, Const))
{
+ // If the const is NULL, the const value cannot be populated
+ // Raise exception
+ // This happens to PostGIS functions, which aren't supported
+ const Const *constant = (Const *) rtfunc->funcexpr;
+ if (constant->constisnull)
+ {
+ GPOS_RAISE(gpdxl::ExmaDXL, gpdxl::ExmiQuery2DXLUnsupportedFeature,
+ GPOS_WSZ_LIT("Row-type variable"));
+ }
+
CDXLNode *constValue = m_scalar_translator->TranslateScalarToDXL(
(Expr *) (rtfunc->funcexpr), m_var_to_colid_map);
tvf_dxlnode->AddChild(constValue);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org