@@ -8353,6 +8353,53 @@ func TestVirtualExprPushDown(t *testing.T) {
8353
8353
tk .MustQuery ("explain select * from t where c2 > 1;" ).CheckAt ([]int {0 , 2 , 4 }, rows )
8354
8354
}
8355
8355
8356
+ func TestIssue46177 (t * testing.T ) {
8357
+ store := testkit .CreateMockStore (t )
8358
+ tk := testkit .NewTestKit (t , store )
8359
+ tk .MustExec (`use test` )
8360
+ tk .MustExec (` CREATE TABLE sbtest (
8361
+ id int(10) unsigned NOT NULL AUTO_INCREMENT,
8362
+ k int(10) unsigned NOT NULL DEFAULT '0',
8363
+ c char(120) NOT NULL DEFAULT '',
8364
+ pad char(60) NOT NULL DEFAULT '',
8365
+ PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
8366
+ KEY k (k)
8367
+ )` )
8368
+
8369
+ // cannot choose the best plan with RangeScan.
8370
+ tk .MustExec (`set @@tidb_opt_fix_control = '46177:OFF'` )
8371
+ tk .MustQuery (`explain format='brief' select row_number() over(order by a.k) from (select * from sbtest where id<10) a` ).Check (testkit .Rows (
8372
+ `Projection 10.00 root Column#6` ,
8373
+ `└─Window 10.00 root row_number()->Column#6 over(order by test.sbtest.k rows between current row and current row)` ,
8374
+ ` └─IndexReader 10.00 root index:Selection` ,
8375
+ ` └─Selection 10.00 cop[tikv] lt(test.sbtest.id, 10)` ,
8376
+ ` └─IndexFullScan 10000.00 cop[tikv] table:sbtest, index:k(k) keep order:true, stats:pseudo` ))
8377
+
8378
+ tk .MustExec (`set @@tidb_opt_fix_control = '46177:ON'` )
8379
+ tk .MustQuery (`explain format='brief' select row_number() over(order by a.k) from (select * from sbtest where id<10) a` ).Check (testkit .Rows (
8380
+ `Projection 10.00 root Column#6` ,
8381
+ `└─Window 10.00 root row_number()->Column#6 over(order by test.sbtest.k rows between current row and current row)` ,
8382
+ ` └─Sort 10.00 root test.sbtest.k` ,
8383
+ ` └─TableReader 10.00 root data:TableRangeScan` ,
8384
+ ` └─TableRangeScan 10.00 cop[tikv] table:sbtest range:[0,10), keep order:false, stats:pseudo` ))
8385
+
8386
+ // cannot choose the range scan plan.
8387
+ tk .MustExec (`set @@tidb_opt_fix_control = '46177:OFF'` )
8388
+ tk .MustQuery (`explain format='brief' select /*+ stream_agg() */ count(1) from sbtest where id<1 group by k` ).Check (testkit .Rows (
8389
+ `StreamAgg 1.00 root group by:test.sbtest.k, funcs:count(Column#6)->Column#5` ,
8390
+ `└─IndexReader 1.00 root index:StreamAgg` ,
8391
+ ` └─StreamAgg 1.00 cop[tikv] group by:test.sbtest.k, funcs:count(1)->Column#6` ,
8392
+ ` └─Selection 1.00 cop[tikv] lt(test.sbtest.id, 1)` ,
8393
+ ` └─IndexFullScan 10000.00 cop[tikv] table:sbtest, index:k(k) keep order:true, stats:pseudo` ))
8394
+
8395
+ tk .MustExec (`set @@tidb_opt_fix_control = '46177:ON'` )
8396
+ tk .MustQuery (`explain format='brief' select /*+ stream_agg() */ count(1) from sbtest where id<1 group by k` ).Check (testkit .Rows (
8397
+ `StreamAgg 1.00 root group by:test.sbtest.k, funcs:count(1)->Column#5` ,
8398
+ `└─Sort 1.00 root test.sbtest.k` ,
8399
+ ` └─TableReader 1.00 root data:TableRangeScan` ,
8400
+ ` └─TableRangeScan 1.00 cop[tikv] table:sbtest range:[0,1), keep order:false, stats:pseudo` ))
8401
+ }
8402
+
8356
8403
func TestIssue45044 (t * testing.T ) {
8357
8404
store := testkit .CreateMockStore (t )
8358
8405
tk := testkit .NewTestKit (t , store )
0 commit comments