From b8144da5f076e2371261a886c6c64d2d5b4e7618 Mon Sep 17 00:00:00 2001 From: Elias <45232878+mapan0424@users.noreply.github.com> Date: Fri, 7 Aug 2026 13:44:44 +0800 Subject: [PATCH] fix(xugu): preserve invalid view status in object tree --- agents/drivers/xugu/main.go | 2 +- agents/drivers/xugu/main_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/agents/drivers/xugu/main.go b/agents/drivers/xugu/main.go index 239e76b8c..9b09ab797 100644 --- a/agents/drivers/xugu/main.go +++ b/agents/drivers/xugu/main.go @@ -2091,7 +2091,7 @@ JOIN ALL_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID WHERE s.DB_ID = CURRENT_DB_ID AND UPPER(s.SCHEMA_NAME) = UPPER(?)`}, {objectTypes: []string{"VIEW"}, sql: ` -SELECT v.VIEW_NAME AS OBJECT_NAME, 'VIEW' AS OBJECT_TYPE, v.COMMENTS, NULL AS VALID +SELECT v.VIEW_NAME AS OBJECT_NAME, 'VIEW' AS OBJECT_TYPE, v.COMMENTS, v.VALID FROM ALL_VIEWS v JOIN ALL_SCHEMAS s ON s.DB_ID = v.DB_ID AND s.SCHEMA_ID = v.SCHEMA_ID WHERE s.DB_ID = CURRENT_DB_ID diff --git a/agents/drivers/xugu/main_test.go b/agents/drivers/xugu/main_test.go index ebb236b4e..9f424d928 100644 --- a/agents/drivers/xugu/main_test.go +++ b/agents/drivers/xugu/main_test.go @@ -1020,6 +1020,20 @@ func TestXuguListObjectsQueryIncludesProgrammableObjects(t *testing.T) { assertArgs(t, query.Args, wantArgs) } +func TestXuguListObjectsQueryPreservesViewValidity(t *testing.T) { + query := xuguListObjectsQuery("APP", metadataListConstraints{ObjectTypes: []string{"VIEW"}}) + upper := strings.ToUpper(query.SQL) + if !strings.Contains(upper, "FROM ALL_VIEWS V") { + t.Fatalf("view lookup should query ALL_VIEWS: %s", query.SQL) + } + if !strings.Contains(upper, "V.VALID") { + t.Fatalf("view lookup must preserve the catalog validity flag: %s", query.SQL) + } + if strings.Contains(upper, "NULL AS VALID") { + t.Fatalf("view lookup must not discard the catalog validity flag: %s", query.SQL) + } +} + func TestXuguListObjectsQueryKeepsPublicSynonymsOutOfSchemaGroups(t *testing.T) { query := xuguListObjectsQuery("SYSDBA", metadataListConstraints{ObjectTypes: []string{"SYNONYM"}}) for _, want := range []string{"FROM ALL_SYNONYMS y", "y.IS_PUBLIC = FALSE", "OBJECT_TYPE IN (?)"} {