planner: fix some window specific check bug for window function. (#12394)
This commit is contained in:
committed by
pingcap-github-bot
parent
ebce1f06c0
commit
fbcee673c0
@ -3541,7 +3541,10 @@ func (b *PlanBuilder) checkOriginWindowSpecs(funcs []*ast.WindowFuncExpr, orderB
|
||||
if end.Type == ast.Preceding && end.UnBounded {
|
||||
return ErrWindowFrameEndIllegal.GenWithStackByArgs(getWindowName(spec.Name.O))
|
||||
}
|
||||
if start.Type == ast.Following && end.Type == ast.Preceding {
|
||||
if start.Type == ast.Following && (end.Type == ast.Preceding || end.Type == ast.CurrentRow) {
|
||||
return ErrWindowFrameIllegal.GenWithStackByArgs(getWindowName(spec.Name.O))
|
||||
}
|
||||
if (start.Type == ast.Following || start.Type == ast.CurrentRow) && end.Type == ast.Preceding {
|
||||
return ErrWindowFrameIllegal.GenWithStackByArgs(getWindowName(spec.Name.O))
|
||||
}
|
||||
|
||||
|
||||
@ -2520,6 +2520,18 @@ func (s *testPlanSuite) TestWindowFunction(c *C) {
|
||||
sql: "SELECT NTH_VALUE(fieldA, -1) OVER (w1 PARTITION BY fieldB ORDER BY fieldB , fieldA ) AS 'ntile', fieldA, fieldB FROM ( SELECT a AS fieldA, b AS fieldB FROM t ) as temp WINDOW w1 AS ( ORDER BY fieldB ASC, fieldA DESC )",
|
||||
result: "[planner:1210]Incorrect arguments to nth_value",
|
||||
},
|
||||
{
|
||||
sql: "SELECT SUM(a) OVER w AS 'sum' FROM t WINDOW w AS (ROWS BETWEEN 1 FOLLOWING AND CURRENT ROW )",
|
||||
result: "[planner:3586]Window 'w': frame start or end is negative, NULL or of non-integral type",
|
||||
},
|
||||
{
|
||||
sql: "SELECT SUM(a) OVER w AS 'sum' FROM t WINDOW w AS (ROWS BETWEEN CURRENT ROW AND 1 PRECEDING )",
|
||||
result: "[planner:3586]Window 'w': frame start or end is negative, NULL or of non-integral type",
|
||||
},
|
||||
{
|
||||
sql: "SELECT SUM(a) OVER w AS 'sum' FROM t WINDOW w AS (ROWS BETWEEN 1 FOLLOWING AND 1 PRECEDING )",
|
||||
result: "[planner:3586]Window 'w': frame start or end is negative, NULL or of non-integral type",
|
||||
},
|
||||
// Test issue 11943
|
||||
{
|
||||
sql: "SELECT ROW_NUMBER() OVER (partition by b) + a FROM t",
|
||||
|
||||
Reference in New Issue
Block a user