From 381da60316262b499e66d30f95ad3f4dec1bb8f2 Mon Sep 17 00:00:00 2001 From: Tim Sehn Date: Tue, 6 Jan 2026 16:11:54 -0800 Subject: [PATCH 1/2] Fix query ok message for drop view --- sql/rowexec/ddl.go | 2 +- sql/rowexec/drop_view_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/sql/rowexec/ddl.go b/sql/rowexec/ddl.go index 73406041ce..5e7909e6f9 100644 --- a/sql/rowexec/ddl.go +++ b/sql/rowexec/ddl.go @@ -516,7 +516,7 @@ func (b *BaseBuilder) buildDropView(ctx *sql.Context, n *plan.DropView, row sql. } } - return sql.RowsToRowIter(), nil + return rowIterWithOkResultWithZeroRowsAffected(), nil } func (b *BaseBuilder) buildAlterUser(ctx *sql.Context, a *plan.AlterUser, _ sql.Row) (sql.RowIter, error) { diff --git a/sql/rowexec/drop_view_test.go b/sql/rowexec/drop_view_test.go index 12c0308b4a..2b1a01e97a 100644 --- a/sql/rowexec/drop_view_test.go +++ b/sql/rowexec/drop_view_test.go @@ -16,6 +16,7 @@ package rowexec import ( "context" + "io" "testing" "github.com/stretchr/testify/require" @@ -149,3 +150,34 @@ func TestDropNonExistingViewNative(t *testing.T) { require.Error(t, err) require.True(t, sql.ErrViewDoesNotExist.Is(err)) } + +// Tests that DROP VIEW returns an OkResult (not empty set) +func TestDropViewReturnsOkResult(t *testing.T) { + db := memory.NewDatabase("mydb") + ctx, view := setupView(t, db) + + singleDropView := plan.NewSingleDropView(db, view.Name()) + dropView := plan.NewDropView([]sql.Node{singleDropView}, false) + + iter, err := DefaultBuilder.Build(ctx, dropView, nil) + require.NoError(t, err) + + // Verify we can read the result and it contains an OkResult with 0 rows affected + row, err := iter.Next(ctx) + if err != nil { + t.Logf("iter.Next returned error: %v", err) + } + require.NoError(t, err, "Expected to get a row with OkResult, but got error: %v", err) + require.NotNil(t, row) + require.Equal(t, 1, len(row), "Expected 1 column in result, got %d", len(row)) + + okResult, ok := row[0].(types.OkResult) + require.True(t, ok, "Expected OkResult, got %T: %v", row[0], row[0]) + require.Equal(t, uint64(0), okResult.RowsAffected) + + // Verify no more rows (iterator should return io.EOF) + _, err = iter.Next(ctx) + require.Equal(t, io.EOF, err) + + require.NoError(t, iter.Close(ctx)) +} From 905826e19ca61530087f3b9b7d8c0ea838790d9f Mon Sep 17 00:00:00 2001 From: Tim Sehn Date: Tue, 6 Jan 2026 16:47:23 -0800 Subject: [PATCH 2/2] Fix doltgres --- sql/plan/drop_view.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sql/plan/drop_view.go b/sql/plan/drop_view.go index d334a04c4b..9137eb3b19 100644 --- a/sql/plan/drop_view.go +++ b/sql/plan/drop_view.go @@ -17,9 +17,9 @@ package plan import ( errors "gopkg.in/src-d/go-errors.v1" - "github.com/dolthub/go-mysql-server/sql/mysql_db" - "github.com/dolthub/go-mysql-server/sql" + "github.com/dolthub/go-mysql-server/sql/mysql_db" + "github.com/dolthub/go-mysql-server/sql/types" ) var ErrDropViewChild = errors.NewKind("any child of DropView must be of type SingleDropView") @@ -56,8 +56,8 @@ func (dv *SingleDropView) IsReadOnly() bool { return false } -// Schema implements the Node interface. It always returns nil. -func (dv *SingleDropView) Schema() sql.Schema { return nil } +// Schema implements the Node interface. It always returns Query OK result. +func (dv *SingleDropView) Schema() sql.Schema { return types.OkResultSchema } // String implements the fmt.Stringer interface, using sql.TreePrinter to // generate the string. @@ -133,8 +133,8 @@ func (dvs *DropView) Resolved() bool { return true } -// Schema implements the Node interface. It always returns nil. -func (dvs *DropView) Schema() sql.Schema { return nil } +// Schema implements the Node interface. It always returns Query OK result. +func (dvs *DropView) Schema() sql.Schema { return types.OkResultSchema } // String implements the fmt.Stringer interface, using sql.TreePrinter to // generate the string.