This is an automated email from the ASF dual-hosted git repository.

gfphoenix78 pushed a commit to branch sync-with-upstream
in repository https://gitbox.apache.org/repos/asf/cloudberry-gpbackup.git


The following commit(s) were added to refs/heads/sync-with-upstream by this 
push:
     new a0ff77b7 fix(test): adapt procedural language test for Cloudberry 
behavior (#24)
a0ff77b7 is described below

commit a0ff77b7d2dc06f712df4518c0ac5c09fb9eaf6d
Author: Robert Mu <db...@hotmail.com>
AuthorDate: Thu Aug 28 20:30:48 2025 +0800

    fix(test): adapt procedural language test for Cloudberry behavior (#24)
    
    The integration test for procedural languages was failing on Cloudberry
    due to differences in dependency handling compared to GPDB 7.
    
    In Cloudberry (based on PostgreSQL 14), extension-created languages are
    marked as "core extension members" and are correctly filtered out by the
    existing GetProceduralLanguages() function to avoid backup duplication.
    
    This commit updates the test to:
    1. Create the extension first in Cloudberry to make handlers available
    2. Use appropriate cleanup strategy (DROP EXTENSION vs DROP LANGUAGE)
    3. Expect length 0 for Cloudberry (filtered) vs length 1 for GPDB
    
    The changes ensure test compatibility while confirming that the backup
    logic correctly handles different PostgreSQL dependency models.
    
    Fixes: Integration test failure in predata_functions_create_test.go
---
 integration/predata_functions_create_test.go | 41 ++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 6 deletions(-)

diff --git a/integration/predata_functions_create_test.go 
b/integration/predata_functions_create_test.go
index 8efd9eeb..a0614f29 100644
--- a/integration/predata_functions_create_test.go
+++ b/integration/predata_functions_create_test.go
@@ -533,6 +533,15 @@ var _ = Describe("backup integration create statement 
tests", func() {
                                plpythonString = "plpython3"
                        }
 
+                       // For Cloudberry (based on PostgreSQL 14), the 
pg_pltemplate system table
+                       // has been deprecated since PostgreSQL 13. This means 
that procedural language
+                       // handler functions (like plpython3_call_handler) are 
no longer available by default.
+                       // We must first create the extension to install these 
handler functions before
+                       // we can test the manual creation of procedural 
languages.
+                       if connectionPool.Version.IsCBDB() {
+                               testhelper.AssertQueryRuns(connectionPool, 
fmt.Sprintf("CREATE EXTENSION IF NOT EXISTS %su", plpythonString))
+                       }
+
                        funcInfoMap := map[uint32]backup.FunctionInfo{
                                1: {QualifiedName: 
fmt.Sprintf("pg_catalog.%s_call_handler", plpythonString), Arguments: 
sql.NullString{String: "", Valid: true}, IsInternal: true},
                                2: {QualifiedName: 
fmt.Sprintf("pg_catalog.%s_inline_handler", plpythonString), Arguments: 
sql.NullString{String: "internal", Valid: true}, IsInternal: true},
@@ -547,16 +556,36 @@ var _ = Describe("backup integration create statement 
tests", func() {
                        backup.PrintCreateLanguageStatements(backupfile, 
tocfile, procLangs, funcInfoMap, langMetadataMap)
 
                        testhelper.AssertQueryRuns(connectionPool, 
buffer.String())
-                       defer testhelper.AssertQueryRuns(connectionPool, 
fmt.Sprintf("DROP LANGUAGE %su", plpythonString))
+
+                       // Different cleanup strategies for different database 
versions
+                       if connectionPool.Version.IsCBDB() {
+                               // In Cloudberry, the language is tied to the 
extension and cannot be dropped separately.
+                               // We need to drop the entire extension instead.
+                               defer 
testhelper.AssertQueryRuns(connectionPool, fmt.Sprintf("DROP EXTENSION IF 
EXISTS %su CASCADE", plpythonString))
+                       } else {
+                               // In GPDB and other versions, we can drop the 
language directly
+                               defer 
testhelper.AssertQueryRuns(connectionPool, fmt.Sprintf("DROP LANGUAGE %su", 
plpythonString))
+                       }
 
                        resultProcLangs := 
backup.GetProceduralLanguages(connectionPool)
                        resultMetadataMap := 
backup.GetMetadataForObjectType(connectionPool, backup.TYPE_PROC_LANGUAGE)
 
-                       plpythonInfo.Oid = 
testutils.OidFromObjectName(connectionPool, "", fmt.Sprintf("%su", 
plpythonString), backup.TYPE_PROC_LANGUAGE)
-                       Expect(resultProcLangs).To(HaveLen(1))
-                       resultMetadata := 
resultMetadataMap[plpythonInfo.GetUniqueID()]
-                       
structmatcher.ExpectStructsToMatchIncluding(&plpythonInfo, &resultProcLangs[0], 
"Name", "IsPl", "PlTrusted")
-                       structmatcher.ExpectStructsToMatch(&langMetadata, 
&resultMetadata)
+                       if connectionPool.Version.IsCBDB() {
+                               // In Cloudberry (PostgreSQL 14), languages 
created by extensions are considered
+                               // "core extension members" with dependency 
type 'e' (DEPENDENCY_EXTENSION).
+                               // The GetProceduralLanguages() function 
correctly filters out these
+                               // core extension members to avoid duplicate 
backup entries, since they will be
+                               // recreated automatically when the extension 
is restored via CREATE EXTENSION.
+                               Expect(resultProcLangs).To(HaveLen(0))
+                       } else {
+                               // In GPDB 7 and older PostgreSQL versions, 
manually created languages
+                               // are properly detected and should be included 
in backup operations.
+                               plpythonInfo.Oid = 
testutils.OidFromObjectName(connectionPool, "", fmt.Sprintf("%su", 
plpythonString), backup.TYPE_PROC_LANGUAGE)
+                               Expect(resultProcLangs).To(HaveLen(1))
+                               resultMetadata := 
resultMetadataMap[plpythonInfo.GetUniqueID()]
+                               
structmatcher.ExpectStructsToMatchIncluding(&plpythonInfo, &resultProcLangs[0], 
"Name", "IsPl", "PlTrusted")
+                               
structmatcher.ExpectStructsToMatch(&langMetadata, &resultMetadata)
+                       }
                })
        })
        Describe("PrintCreateExtensions", func() {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cloudberry.apache.org
For additional commands, e-mail: commits-h...@cloudberry.apache.org

Reply via email to