diff --git a/pkg/sql/logictest/testdata/logic_test/cursor b/pkg/sql/logictest/testdata/logic_test/cursor index cb720f04468d..c3cd322e8e04 100644 --- a/pkg/sql/logictest/testdata/logic_test/cursor +++ b/pkg/sql/logictest/testdata/logic_test/cursor @@ -1,3 +1,6 @@ +statement ok +CLOSE ALL + statement ok CREATE TABLE a (a INT PRIMARY KEY, b INT); INSERT INTO a VALUES (1, 2), (2, 3) @@ -46,6 +49,38 @@ CLOSE foo statement ok COMMIT; +BEGIN; +DECLARE foo CURSOR FOR SELECT * FROM a ORDER BY a + +query II +FETCH 1 foo +---- +1 2 + +statement ok +CLOSE foo + +statement error cursor \"foo\" does not exist +FETCH 2 foo + +statement ok +ROLLBACK; +BEGIN; +DECLARE foo CURSOR FOR SELECT * FROM a ORDER BY a + +query II +FETCH 1 foo +---- +1 2 + +statement ok +CLOSE ALL + +statement error cursor \"foo\" does not exist +FETCH 2 foo + +statement ok +ROLLBACK; statement error cursor \"foo\" does not exist BEGIN; diff --git a/pkg/sql/sql_cursor.go b/pkg/sql/sql_cursor.go index d663aca72945..395c4a97f1c8 100644 --- a/pkg/sql/sql_cursor.go +++ b/pkg/sql/sql_cursor.go @@ -240,6 +240,10 @@ func (p *planner) CloseCursor(ctx context.Context, n *tree.CloseCursor) (planNod return &delayedNode{ name: n.String(), constructor: func(ctx context.Context, p *planner) (planNode, error) { + if n.All { + p.sqlCursors.closeAll() + return newZeroNode(nil /* columns */), nil + } return newZeroNode(nil /* columns */), p.sqlCursors.closeCursor(n.Name) }, }, nil