Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions sql/plan/drop_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion sql/rowexec/ddl.go
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,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) {
Expand Down
32 changes: 32 additions & 0 deletions sql/rowexec/drop_view_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package rowexec

import (
"io"
"testing"

"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -148,3 +149,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))
}