From 2a3233b3193e4246d17bb28d9161a3477671afb4 Mon Sep 17 00:00:00 2001 From: Nathan Wallace Date: Sun, 16 Nov 2025 11:13:18 -0500 Subject: [PATCH] executeQueries nil Client check closes #4797 (#4841) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add test for #4797: executeQueries doesn't check for nil Client This test demonstrates that executeQueries panics with a nil pointer dereference when Client is nil. The test currently fails with: panic: runtime error: invalid memory address or nil pointer dereference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * Fix #4797: Add nil check for Client in executeQueries Added a nil check at the start of executeQueries to prevent nil pointer panics when Client is not initialized. Now returns an error message and counts all queries as failures instead of crashing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --------- Co-authored-by: Claude --- pkg/query/queryexecute/execute.go | 6 ++++++ pkg/query/queryexecute/execute_test.go | 30 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/pkg/query/queryexecute/execute.go b/pkg/query/queryexecute/execute.go index c64fb436a..3095b28d5 100644 --- a/pkg/query/queryexecute/execute.go +++ b/pkg/query/queryexecute/execute.go @@ -99,6 +99,12 @@ func executeQueries(ctx context.Context, initData *query.InitData) int { utils.LogTime("queryexecute.executeQueries start") defer utils.LogTime("queryexecute.executeQueries end") + // Check if Client is nil - this can happen if initialization failed + if initData.Client == nil { + error_helpers.ShowWarning("cannot execute queries: database client is not initialized") + return len(initData.Queries) + } + // failures return the number of queries that failed and also the number of rows that // returned errors failures := 0 diff --git a/pkg/query/queryexecute/execute_test.go b/pkg/query/queryexecute/execute_test.go index a42e102e9..2dbe7fb6f 100644 --- a/pkg/query/queryexecute/execute_test.go +++ b/pkg/query/queryexecute/execute_test.go @@ -222,6 +222,36 @@ func TestExecuteQueries_EmptyQueriesList(t *testing.T) { assert.Equal(t, 0, failures, "Should return 0 failures for empty queries list") } +// TestExecuteQueries_NilClient tests that executeQueries handles nil Client gracefully +// Related to issue #4797 +func TestExecuteQueries_NilClient(t *testing.T) { + ctx := context.Background() + + // Create initData with nil Client but with queries + // This simulates a scenario where initialization failed but queries were still provided + initData := &query.InitData{ + InitData: *initialisation.NewInitData(), + Queries: []*modconfig.ResolvedQuery{ + { + Name: "test_query", + ExecuteSQL: "SELECT 1", + RawSQL: "SELECT 1", + }, + }, + } + // Explicitly set Client to nil to test the nil case + initData.Client = nil + + // This should not panic - it should handle nil Client gracefully + // Currently this will panic with nil pointer dereference + failures := executeQueries(ctx, initData) + + // We expect 1 failure (the query should fail gracefully, not panic) + if failures != 1 { + t.Errorf("Expected 1 failure with nil client, got %d", failures) + } +} + // Test Suite: Context and Cancellation func TestRunBatchSession_CancelHandlerSetup(t *testing.T) {