diff options
author | rucha174 <rucha.deodhar@mariadb.com> | 2020-06-09 01:35:39 +0530 |
---|---|---|
committer | rucha174 <rucha.deodhar@mariadb.com> | 2020-06-09 14:43:15 +0530 |
commit | 443391236d20cd0303fcc9957eb49a6aaf28316e (patch) | |
tree | f63f7c015578c8a3f7a9cc25bd9cc5e4d2b2e1f5 | |
parent | e1045a768b23ff3847e6ed96d51627b8529d3138 (diff) | |
download | mariadb-git-443391236d20cd0303fcc9957eb49a6aaf28316e.tar.gz |
MDEV-22830: SQL_CALC_FOUND_ROWS not working properly for single SELECT for DUAL
In case of SELECT without tables which returns either 0 or 1 rows,
JOIN::exec_inner() did not check if the flag representing SQL_CALC_FOUND_ROWS
is set or not and send_records was direclty assigned 0. So SELECT FOUND_ROWS()
was giving 0 in the output. Now it checks if the flag is set, if it is set
send_record=1 else 0. 1 is the number of rows that could have been sent
to the client if the SELECT query had SQL_CALC_FOUND_ROWS.
It is 0 when no rows were sent because the SELECT query did not have
SQL_CALC_FOUND_ROWS.
-rw-r--r-- | mysql-test/r/select_found.result | 5 | ||||
-rw-r--r-- | mysql-test/t/select_found.test | 7 | ||||
-rw-r--r-- | sql/sql_select.cc | 2 |
3 files changed, 13 insertions, 1 deletions
diff --git a/mysql-test/r/select_found.result b/mysql-test/r/select_found.result index 7b38515cf70..c281dc885ad 100644 --- a/mysql-test/r/select_found.result +++ b/mysql-test/r/select_found.result @@ -362,4 +362,9 @@ c1 select found_rows(); found_rows() 5 +SELECT SQL_CALC_FOUND_ROWS 1 FROM DUAL WHERE 0; +1 +SELECT FOUND_ROWS(); +FOUND_ROWS() +1 drop table t1; diff --git a/mysql-test/t/select_found.test b/mysql-test/t/select_found.test index 33613697722..092ffc00cdc 100644 --- a/mysql-test/t/select_found.test +++ b/mysql-test/t/select_found.test @@ -286,4 +286,11 @@ select * from t1 order by c1 limit 2,1; select found_rows(); select sql_calc_found_rows * from t1 order by c1 limit 2,1; select found_rows(); + +# +# MDEV-22830 SQL_CALC_FOUND_ROWS not working properly for single SELECT for DUAL +# +SELECT SQL_CALC_FOUND_ROWS 1 FROM DUAL WHERE 0; +SELECT FOUND_ROWS(); + drop table t1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 647dee80188..a9c12136497 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2647,7 +2647,7 @@ void JOIN::exec_inner() thd->get_sent_row_count()); } else - send_records= 0; + send_records= (select_options & OPTION_FOUND_ROWS) ? 1 : 0; if (!error) { join_free(); // Unlock all cursors |