mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
MDEV-41171 SQL_SELECT_LIMIT and FOUND_ROWS() on the I_S.TABLES fast path
Set limit_found_rows from matching rows sent on the fast path so FOUND_ROWS() matches the fallback path when SQL_CALC_FOUND_ROWS is not used.
This commit is contained in:
committed by
Jan Lindström
parent
b372c80a84
commit
74b0c78409
@@ -841,3 +841,25 @@ LIMIT 1;
|
||||
TABLE_NAME
|
||||
tb3
|
||||
DROP DATABASE mdev41167;
|
||||
#
|
||||
# MDEV-41171: @@sql_select_limit and FOUND_ROWS() on the fast path
|
||||
#
|
||||
CREATE DATABASE mdev41171;
|
||||
CREATE TABLE mdev41171.t1(i INT);
|
||||
CREATE TABLE mdev41171.t2(i INT);
|
||||
CREATE TABLE mdev41171.t3(i INT);
|
||||
SET @@session.sql_select_limit=2;
|
||||
SELECT TABLE_CATALOG FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mdev41171';
|
||||
SET @@session.sql_select_limit=DEFAULT;
|
||||
SELECT 1;
|
||||
1
|
||||
1
|
||||
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mdev41171';
|
||||
TABLE_NAME
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
SELECT FOUND_ROWS();
|
||||
FOUND_ROWS()
|
||||
3
|
||||
DROP DATABASE mdev41171;
|
||||
|
||||
@@ -323,3 +323,38 @@ SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA='mdev41167' AND (TABLE_NAME='tb3' OR TABLE_CATALOG='nope')
|
||||
LIMIT 1;
|
||||
DROP DATABASE mdev41167;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-41171: @@sql_select_limit and FOUND_ROWS() on the fast path
|
||||
--echo #
|
||||
CREATE DATABASE mdev41171;
|
||||
CREATE TABLE mdev41171.t1(i INT);
|
||||
CREATE TABLE mdev41171.t2(i INT);
|
||||
CREATE TABLE mdev41171.t3(i INT);
|
||||
SET @@session.sql_select_limit=2;
|
||||
# CALL (used by --sp-protocol) sets sql_select_limit=HA_POS_ERROR, so
|
||||
# do not compare the row list. Capture FOUND_ROWS() immediately.
|
||||
--disable_result_log
|
||||
SELECT TABLE_CATALOG FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mdev41171';
|
||||
--enable_result_log
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
let $n= query_get_value(SELECT FOUND_ROWS(), FOUND_ROWS(), 1);
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
if (`SELECT $SP_PROTOCOL = 0`)
|
||||
{
|
||||
if ($n != 2)
|
||||
{
|
||||
--echo # sql_select_limit=2 returned $n rows
|
||||
--die
|
||||
}
|
||||
}
|
||||
SET @@session.sql_select_limit=DEFAULT;
|
||||
SELECT 1;
|
||||
--sorted_result
|
||||
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mdev41171';
|
||||
--disable_ps_protocol
|
||||
SELECT FOUND_ROWS();
|
||||
--enable_ps_protocol
|
||||
DROP DATABASE mdev41171;
|
||||
|
||||
@@ -10295,6 +10295,8 @@ bool get_schema_tables_result(JOIN *join,
|
||||
}
|
||||
plan->fp_state= IS_table_read_plan::FP_STREAMING;
|
||||
}
|
||||
/* FOUND_ROWS() without SQL_CALC_FOUND_ROWS is rows sent. */
|
||||
thd->limit_found_rows= plan->sent_rows;
|
||||
my_eof(thd);
|
||||
result= 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user