executor: refine maxOneRow (#22194)
Signed-off-by: wjhuang2016 <huangwenjun1997@gmail.com>
This commit is contained in:
@ -491,6 +491,11 @@ error = '''
|
||||
Deadlock found when trying to get lock; try restarting transaction
|
||||
'''
|
||||
|
||||
["executor:1242"]
|
||||
error = '''
|
||||
Subquery returns more than 1 row
|
||||
'''
|
||||
|
||||
["executor:1295"]
|
||||
error = '''
|
||||
This command is not supported in the prepared statement protocol yet
|
||||
|
||||
@ -20,14 +20,15 @@ import (
|
||||
|
||||
// Error instances.
|
||||
var (
|
||||
ErrGetStartTS = dbterror.ClassExecutor.NewStd(mysql.ErrGetStartTS)
|
||||
ErrUnknownPlan = dbterror.ClassExecutor.NewStd(mysql.ErrUnknownPlan)
|
||||
ErrPrepareMulti = dbterror.ClassExecutor.NewStd(mysql.ErrPrepareMulti)
|
||||
ErrPrepareDDL = dbterror.ClassExecutor.NewStd(mysql.ErrPrepareDDL)
|
||||
ErrResultIsEmpty = dbterror.ClassExecutor.NewStd(mysql.ErrResultIsEmpty)
|
||||
ErrBuildExecutor = dbterror.ClassExecutor.NewStd(mysql.ErrBuildExecutor)
|
||||
ErrBatchInsertFail = dbterror.ClassExecutor.NewStd(mysql.ErrBatchInsertFail)
|
||||
ErrUnsupportedPs = dbterror.ClassExecutor.NewStd(mysql.ErrUnsupportedPs)
|
||||
ErrGetStartTS = dbterror.ClassExecutor.NewStd(mysql.ErrGetStartTS)
|
||||
ErrUnknownPlan = dbterror.ClassExecutor.NewStd(mysql.ErrUnknownPlan)
|
||||
ErrPrepareMulti = dbterror.ClassExecutor.NewStd(mysql.ErrPrepareMulti)
|
||||
ErrPrepareDDL = dbterror.ClassExecutor.NewStd(mysql.ErrPrepareDDL)
|
||||
ErrResultIsEmpty = dbterror.ClassExecutor.NewStd(mysql.ErrResultIsEmpty)
|
||||
ErrBuildExecutor = dbterror.ClassExecutor.NewStd(mysql.ErrBuildExecutor)
|
||||
ErrBatchInsertFail = dbterror.ClassExecutor.NewStd(mysql.ErrBatchInsertFail)
|
||||
ErrUnsupportedPs = dbterror.ClassExecutor.NewStd(mysql.ErrUnsupportedPs)
|
||||
ErrSubqueryMoreThan1Row = dbterror.ClassExecutor.NewStd(mysql.ErrSubqueryNo1Row)
|
||||
|
||||
ErrCantCreateUserWithGrant = dbterror.ClassExecutor.NewStd(mysql.ErrCantCreateUserWithGrant)
|
||||
ErrPasswordNoMatch = dbterror.ClassExecutor.NewStd(mysql.ErrPasswordNoMatch)
|
||||
|
||||
@ -1152,17 +1152,16 @@ func init() {
|
||||
return nil, err
|
||||
}
|
||||
chk := newFirstChunk(exec)
|
||||
for {
|
||||
err = Next(ctx, exec, chk)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if chk.NumRows() == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
row := chk.GetRow(0).GetDatumRow(retTypes(exec))
|
||||
return row, err
|
||||
|
||||
err = Next(ctx, exec, chk)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if chk.NumRows() == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
row := chk.GetRow(0).GetDatumRow(retTypes(exec))
|
||||
return row, err
|
||||
}
|
||||
}
|
||||
|
||||
@ -1393,7 +1392,7 @@ func (e *MaxOneRowExec) Next(ctx context.Context, req *chunk.Chunk) error {
|
||||
}
|
||||
return nil
|
||||
} else if num != 1 {
|
||||
return errors.New("subquery returns more than 1 row")
|
||||
return ErrSubqueryMoreThan1Row
|
||||
}
|
||||
|
||||
childChunk := newFirstChunk(e.children[0])
|
||||
@ -1402,7 +1401,7 @@ func (e *MaxOneRowExec) Next(ctx context.Context, req *chunk.Chunk) error {
|
||||
return err
|
||||
}
|
||||
if childChunk.NumRows() != 0 {
|
||||
return errors.New("subquery returns more than 1 row")
|
||||
return ErrSubqueryMoreThan1Row
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
@ -4150,7 +4150,7 @@ func (s *testSuite3) TestMaxOneRow(c *C) {
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
err = rs.Next(context.TODO(), rs.NewChunk())
|
||||
c.Assert(err.Error(), Equals, "subquery returns more than 1 row")
|
||||
c.Assert(err.Error(), Equals, "[executor:1242]Subquery returns more than 1 row")
|
||||
|
||||
err = rs.Close()
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
Reference in New Issue
Block a user