summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/ps.result2
-rw-r--r--mysql-test/r/select_found.result25
-rw-r--r--mysql-test/t/select_found.test15
-rw-r--r--sql/sql_class.cc1
-rw-r--r--sql/sql_select.cc4
5 files changed, 45 insertions, 2 deletions
diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result
index 6cad58282a2..8c55bb08249 100644
--- a/mysql-test/r/ps.result
+++ b/mysql-test/r/ps.result
@@ -135,7 +135,7 @@ FOUND_ROWS()
1
execute stmt1;
FOUND_ROWS()
-0
+1
deallocate prepare stmt1;
drop table t1;
create table t1
diff --git a/mysql-test/r/select_found.result b/mysql-test/r/select_found.result
index 00dbcb54d93..1eaa7033c99 100644
--- a/mysql-test/r/select_found.result
+++ b/mysql-test/r/select_found.result
@@ -246,3 +246,28 @@ SELECT FOUND_ROWS();
FOUND_ROWS()
0
DROP TABLE t1;
+SELECT 'foo';
+foo
+foo
+SELECT FOUND_ROWS();
+FOUND_ROWS()
+1
+SELECT SQL_CALC_FOUND_ROWS 'foo';
+foo
+foo
+SELECT FOUND_ROWS();
+FOUND_ROWS()
+1
+SELECT SQL_CALC_FOUND_ROWS 'foo' limit 0;
+foo
+SELECT FOUND_ROWS();
+FOUND_ROWS()
+1
+SELECT FOUND_ROWS();
+FOUND_ROWS()
+1
+SELECT SQL_CALC_FOUND_ROWS 'foo' UNION SELECT 'bar' LIMIT 0;
+foo
+SELECT FOUND_ROWS();
+FOUND_ROWS()
+2
diff --git a/mysql-test/t/select_found.test b/mysql-test/t/select_found.test
index 943174462e3..e51dd2442b9 100644
--- a/mysql-test/t/select_found.test
+++ b/mysql-test/t/select_found.test
@@ -166,3 +166,18 @@ INSERT INTO t1 VALUES (0), (0), (1), (2);
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a = 0 GROUP BY a HAVING a > 10;
SELECT FOUND_ROWS();
DROP TABLE t1;
+
+#
+# Bug #6089: queries which don't use any tables
+#
+
+SELECT 'foo';
+SELECT FOUND_ROWS();
+SELECT SQL_CALC_FOUND_ROWS 'foo';
+SELECT FOUND_ROWS();
+SELECT SQL_CALC_FOUND_ROWS 'foo' limit 0;
+SELECT FOUND_ROWS();
+SELECT FOUND_ROWS();
+
+SELECT SQL_CALC_FOUND_ROWS 'foo' UNION SELECT 'bar' LIMIT 0;
+SELECT FOUND_ROWS();
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index abe00027b07..b6fdac03526 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -177,6 +177,7 @@ THD::THD()
lock=locked_tables=0;
used_tables=0;
cuted_fields= sent_row_count= 0L;
+ limit_found_rows= 0;
statement_id_counter= 0UL;
// Must be reset to handle error with THD's created for init of mysqld
lex->current_select= 0;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index df74a946b5c..1610057f877 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -1067,7 +1067,9 @@ JOIN::exec()
else
error=(int) result->send_eof();
}
- thd->limit_found_rows= thd->examined_row_count= 0;
+ /* Single select (without union and limit) always returns 1 row */
+ thd->limit_found_rows= 1;
+ thd->examined_row_count= 0;
DBUG_VOID_RETURN;
}
thd->limit_found_rows= thd->examined_row_count= 0;