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