select_found.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #
  2. # Testing of found_rows()
  3. #
  4. --disable_warnings
  5. drop table if exists t1,t2;
  6. --enable_warnings
  7. create table t1 (a int not null auto_increment, b int not null, primary key(a));
  8. insert into t1 (b) values (2),(3),(5),(5),(5),(6),(7),(9);
  9. select SQL_CALC_FOUND_ROWS * from t1;
  10. select found_rows();
  11. select SQL_CALC_FOUND_ROWS * from t1 limit 1;
  12. select found_rows();
  13. select SQL_BUFFER_RESULT SQL_CALC_FOUND_ROWS * from t1 limit 1;
  14. select found_rows();
  15. select SQL_CALC_FOUND_ROWS * from t1 order by b desc limit 1;
  16. select found_rows();
  17. select SQL_CALC_FOUND_ROWS distinct b from t1 limit 1;
  18. select found_rows();
  19. select SQL_CALC_FOUND_ROWS b,count(*) as c from t1 group by b order by c desc limit 1;
  20. select found_rows();
  21. select SQL_CALC_FOUND_ROWS * from t1 left join t1 as t2 on (t1.b=t2.a) limit 2,1;
  22. select found_rows(); 
  23. drop table t1;
  24. #
  25. # Test SQL_CALC_FOUND_ROWS optimization when used with one table and filesort
  26. #
  27. create table t1 (a int not null primary key);
  28. insert into t1 values (1),(2),(3),(4),(5);
  29. select sql_calc_found_rows a from t1 where a in (1,2,3) order by a desc limit 0,2;
  30. select FOUND_ROWS();
  31. select sql_calc_found_rows a from t1 where a in (1,2,3) order by a+2 desc limit 0,2;
  32. select FOUND_ROWS();
  33. drop table t1;
  34. #
  35. # Test of SQL_CALC_FOUND_ROWS with DISTINCT
  36. #
  37. CREATE TABLE t1 (
  38. `id` smallint(5) unsigned NOT NULL auto_increment,
  39. `kid` smallint(5) unsigned NOT NULL default '0',
  40. PRIMARY KEY (`id`),
  41. KEY `kid` (`kid`)
  42. );
  43. CREATE TABLE t2 (
  44.   id smallint(5) unsigned NOT NULL auto_increment,
  45.   name varchar(50) NOT NULL default '',
  46.   email varchar(50) NOT NULL default '',
  47.   PRIMARY KEY  (id),
  48.   UNIQUE KEY e_n (email,name)
  49. );
  50. disable_query_log;
  51. let $1=200;
  52. let $2=0;
  53. while ($1) 
  54. {
  55.   inc $2;
  56.   eval INSERT INTO t2 VALUES ($2,'name$2','email$2');
  57.   dec $1;
  58. }
  59. enable_query_log;
  60. EXPLAIN SELECT SQL_CALC_FOUND_ROWS DISTINCT email FROM t2 LEFT JOIN t1  ON kid = t2.id WHERE t1.id IS NULL LIMIT 10;
  61. SELECT SQL_CALC_FOUND_ROWS DISTINCT email FROM t2 LEFT JOIN t1  ON kid = t2.id WHERE t1.id IS NULL LIMIT 10;
  62. SELECT FOUND_ROWS();
  63. SELECT SQL_CALC_FOUND_ROWS DISTINCT email FROM t2 LEFT JOIN t1  ON kid = t2.id WHERE t1.id IS NULL order by email LIMIT 10;
  64. SELECT FOUND_ROWS();
  65. SELECT DISTINCT email FROM t2 LEFT JOIN t1  ON kid = t2.id WHERE t1.id IS NULL LIMIT 10;
  66. SELECT DISTINCT email FROM t2 LEFT JOIN t1  ON kid = t2.id WHERE t1.id IS NULL ORDER BY email LIMIT 10;
  67. INSERT INTO `t1` (`id`, `kid`) VALUES ('0', '150');
  68. SELECT SQL_CALC_FOUND_ROWS DISTINCT email FROM t2 LEFT JOIN t1  ON kid = t2.id WHERE t1.id IS NULL LIMIT 10;
  69. SELECT FOUND_ROWS();
  70. drop table t1,t2;
  71. #
  72. # Test bug when using range optimization
  73. #
  74. CREATE TABLE `t1` (
  75.   `titre` char(80) NOT NULL default '',
  76.   `numeropost` mediumint(8) unsigned NOT NULL auto_increment,
  77.   `maxnumrep` int(10) unsigned NOT NULL default '0',
  78.   PRIMARY KEY  (`numeropost`),
  79.   KEY `maxnumrep` (`maxnumrep`)
  80. ) ENGINE=MyISAM ROW_FORMAT=FIXED;
  81. INSERT INTO t1 (titre,maxnumrep) VALUES
  82. ('test1','1'),('test2','2'),('test3','3');
  83. SELECT SQL_CALC_FOUND_ROWS titre,numeropost,maxnumrep FROM t1 WHERE numeropost IN (1,2) ORDER BY maxnumrep DESC LIMIT 0, 1;
  84. SELECT FOUND_ROWS();
  85. SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) as a LIMIT 0;
  86. SELECT FOUND_ROWS();
  87. SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE numeropost > 1  LIMIT 0;
  88. SELECT FOUND_ROWS();
  89. SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 0;
  90. SELECT FOUND_ROWS();
  91. SELECT SQL_CALC_FOUND_ROWS * FROM t1 ORDER BY numeropost  LIMIT 0;
  92. SELECT FOUND_ROWS();
  93. drop table t1;
  94. #
  95. # Test problem with impossible WHERE (Bug #1468)
  96. #
  97. create table t1 (id int, primary key (id));
  98. insert into t1 values (1), (2), (3), (4), (5);
  99. select SQL_CALC_FOUND_ROWS * from t1 where id > 3 limit 0, 1;
  100. select FOUND_ROWS();
  101. select SQL_CALC_FOUND_ROWS * from t1 where id > 3 AND 1=2 limit 0, 1;
  102. select FOUND_ROWS();
  103. select SQL_CALC_FOUND_ROWS * from t1 where id > 6 limit 0, 1;
  104. select FOUND_ROWS();
  105. drop table t1;
  106. #
  107. # Other bugs with range optimization
  108. #
  109. # bug #2448
  110. CREATE TABLE t1 ( a int not null, b int not null, KEY ab(a,b) );
  111. INSERT INTO t1 VALUES ( 47,    1  );
  112. INSERT INTO t1 VALUES ( 70,    1  );
  113. SELECT * FROM t1
  114. WHERE
  115. (
  116.  ( b =1 AND a BETWEEN 14 AND 21 ) OR
  117.  ( b =2 AND a BETWEEN 16 AND 18 ) OR
  118.  ( b =3 AND a BETWEEN 15 AND 19 )
  119. );
  120. DROP TABLE t1;
  121. # bug #2698
  122. CREATE TABLE t1 ( a integer, u varchar(15), r integer, key uao_idx( r, a, u));
  123. DELETE  FROM t1
  124. WHERE (  r = 1 AND a IN ( 1, 2    ) AND ( u = 'w'   OR u LIKE 'w/%'   ) )
  125.    OR (  r = 1 AND a IN (       3 ) AND ( u = 'w/U' OR u LIKE 'w/U/%' ) )
  126.    OR (  r = 1 AND a IN ( 1, 2, 3 ) AND ( u = 'w'                     ) );
  127. drop table t1;
  128. #
  129. # Bug #3738: we have a ref key
  130. #
  131. CREATE TABLE t1 (a VARCHAR(16), UNIQUE(a));
  132. INSERT INTO t1 VALUES ('1'), ('2'), ('3');
  133. SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a = '2' LIMIT 0, 1;
  134. SELECT FOUND_ROWS();
  135. DROP TABLE t1;
  136. #
  137. # Bug #3845: group by, having and empty result
  138. #
  139. CREATE TABLE t1 (a INT);
  140. INSERT INTO t1 VALUES (0), (0), (1), (2);
  141. SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a = 0 GROUP BY a HAVING a > 10;
  142. SELECT FOUND_ROWS();
  143. DROP TABLE t1;
  144. #
  145. # Bug #6089: queries which don't use any tables
  146. #
  147. SELECT 'foo';
  148. SELECT FOUND_ROWS();
  149. SELECT SQL_CALC_FOUND_ROWS 'foo';
  150. SELECT FOUND_ROWS();
  151. SELECT SQL_CALC_FOUND_ROWS 'foo' limit 0;
  152. SELECT FOUND_ROWS();
  153. SELECT FOUND_ROWS();
  154. SELECT SQL_CALC_FOUND_ROWS 'foo' UNION SELECT 'bar' LIMIT 0;
  155. SELECT FOUND_ROWS();
  156. #
  157. # Bug #7945: group by + distinct with constant expression + limit 
  158. #
  159. CREATE TABLE t1 (a int, b int);
  160. INSERT INTO t1 VALUES (1,2), (1,3), (1,4), (1,5);
  161. SELECT SQL_CALC_FOUND_ROWS DISTINCT 'a' FROM t1 GROUP BY b LIMIT 2;
  162. SELECT FOUND_ROWS();
  163. DROP TABLE t1;
  164. # End of 4.1 tests