|
| 1 | +--source include/have_sequence.inc |
1 | 2 | --enable_prepare_warnings |
2 | 3 | --disable_view_protocol # Since optimizer hints are not supported inside views |
3 | 4 | SET NAMES utf8mb4; |
@@ -467,14 +468,14 @@ SELECT /*+ QB_NAME(q1) NO_ICP(@q1 t1 PRIMARY) NO_ICP(@q1 t1 PRIMARY) */ * FROM t |
467 | 468 | DROP TABLE t1; |
468 | 469 |
|
469 | 470 | --echo # |
470 | | ---echo # Hints inside views are not supported |
| 471 | +--echo # Hints inside views are supported |
471 | 472 | --echo # |
472 | 473 | CREATE TABLE t1 (a INT, INDEX idx_a(a)); |
473 | 474 | INSERT INTO t1 VALUES (1),(2); |
474 | 475 |
|
475 | 476 | CREATE VIEW v1 AS SELECT /*+ NO_MRR(t1 idx_a) */ a FROM t1; |
476 | 477 | SELECT * FROM v1; |
477 | | ---echo # Make sure hints are not present inside the view definition: |
| 478 | +--echo # Make sure hints are present inside the view definition: |
478 | 479 | SHOW CREATE VIEW v1; |
479 | 480 | EXPLAIN EXTENDED SELECT * FROM v1; |
480 | 481 |
|
@@ -767,3 +768,289 @@ DROP TABLE t2; |
767 | 768 | --echo # |
768 | 769 | --echo # End of 12.0 tests |
769 | 770 | --echo # |
| 771 | + |
| 772 | +--echo # |
| 773 | +--echo # MDEV-37260 Hints addressed by implicit query block name |
| 774 | +--echo # |
| 775 | + |
| 776 | +--echo # Simple JOIN Query |
| 777 | +CREATE TABLE employees ( |
| 778 | + emp_id INT PRIMARY KEY, |
| 779 | + emp_name VARCHAR(100), |
| 780 | + department VARCHAR(50) |
| 781 | +); |
| 782 | +CREATE TABLE salaries ( |
| 783 | + emp_id INT, |
| 784 | + salary DECIMAL(10, 2), |
| 785 | + FOREIGN KEY (emp_id) REFERENCES employees(emp_id) |
| 786 | +); |
| 787 | +INSERT INTO employees (emp_id, emp_name, department) VALUES |
| 788 | + (101, 'Alice', 'Engineering'), |
| 789 | + (102, 'Bob', 'Engineering'), |
| 790 | + (103, 'Charlie', 'Sales'), |
| 791 | + (104, 'Diana', 'Sales'), |
| 792 | + (105, 'Eve', 'Engineering'); |
| 793 | +INSERT INTO salaries (emp_id, salary) VALUES |
| 794 | + (101, 120000.00), |
| 795 | + (102, 95000.00), |
| 796 | + (103, 110000.00), |
| 797 | + (104, 85000.00), |
| 798 | + (105, 130000.00); |
| 799 | + |
| 800 | +EXPLAIN |
| 801 | + SELECT /*+ NO_MERGE(s@`select#1`) */ e.emp_name, s.salary FROM employees e JOIN (select * from salaries) s ON e.emp_id = s.emp_id WHERE s.salary > (SELECT AVG(salary) FROM salaries); |
| 802 | + |
| 803 | +EXPLAIN |
| 804 | + SELECT /*+ MERGE(s@`select#1`) */ e.emp_name, s.salary FROM employees e JOIN (select * from salaries) s ON e.emp_id = s.emp_id WHERE s.salary > (SELECT AVG(salary) FROM salaries); |
| 805 | +--echo # End Simple JOIN Query |
| 806 | + |
| 807 | +--echo # JOIN_ORDER Example |
| 808 | +CREATE TABLE ten(a int); |
| 809 | +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); |
| 810 | +CREATE TABLE twenty(a int); |
| 811 | +INSERT INTO twenty SELECT a FROM ten; |
| 812 | +INSERT INTO twenty SELECT a+10 FROM ten; |
| 813 | +EXPLAIN SELECT /*+ JOIN_ORDER(@`select#2` twenty,ten) */ * FROM (SELECT ten.a AS a FROM (ten JOIN twenty) WHERE (ten.a = twenty.a) LIMIT 1000 ) T; |
| 814 | +EXPLAIN SELECT * FROM (SELECT ten.a AS a FROM (ten JOIN twenty) WHERE (ten.a = twenty.a) LIMIT 1000 ) T; |
| 815 | +--echo # End JOIN_ORDER Example |
| 816 | + |
| 817 | +--echo # CTE Example |
| 818 | +create table t1 (a int, b int, c int); |
| 819 | +create table t2 (a int, b int, c int, d decimal); |
| 820 | +insert into t1 values |
| 821 | + (1,21,345), (1,33,7), (8,33,114), (1,21,500), (1,19,107), (5,14,787), |
| 822 | + (8,33,123), (9,10,211), (5,16,207), (1,33,988), (5,27,132), (1,21,104), |
| 823 | + (6,20,309), (6,20,315), (1,21,101), (8,33,404), (9,10,800), (1,21,123), |
| 824 | + (7,11,708), (6,20,214); |
| 825 | +create index t1_a on t1 (a); |
| 826 | +insert into t2 values |
| 827 | + (2,3,207,207.0000), (1,21,909,12.0000), (7,13,312,406.0000), |
| 828 | + (8,64,248,107.0000), (6,20,315,279.3333), (1,19,203,107.0000), |
| 829 | + (8,80,800,314.0000), (3,12,231,190.0000), (6,23,303,909.0000); |
| 830 | +create view v1 as select a, b, max(c) as max_c, avg(c) as avg_c from t1 |
| 831 | + group by a,b having max_c < 707; |
| 832 | +create table t3 select 2*seq as a, 2*seq+1 as b from seq_0_to_1000; |
| 833 | +CREATE TABLE t4 (a INT, b INT); |
| 834 | +INSERT INTO t4 VALUES (1,2),(2,3),(3,4); |
| 835 | +create table t5 select seq as i, 10*seq as j from seq_1_to_10; |
| 836 | +create view v2 as select * from t5; |
| 837 | +create table t6 (a int primary key); |
| 838 | +insert into t6 select * from seq_1_to_50; |
| 839 | +create view v6 as select a from t6 where a mod 2 = 1; |
| 840 | + |
| 841 | +--source include/explain-no-costs.inc |
| 842 | +explain format=json with cte as ( |
| 843 | + select max_c, avg_c from v1,t2 where |
| 844 | + ((v1.max_c>300) and (v1.avg_c>t2.d) and (v1.b=t2.b)) or |
| 845 | + ((v1.max_c<135) and (v1.max_c<t2.c) and (v1.a=t2.a))) |
| 846 | +select /*+ NO_DERIVED_CONDITION_PUSHDOWN(v1@`select#2`) */ * from cte; |
| 847 | +--echo # End CTE Example |
| 848 | + |
| 849 | +--echo # Recursive CTE Example |
| 850 | +explain format=json with recursive cte as ( |
| 851 | + select max_c, avg_c from v1,t2 where |
| 852 | + ((v1.max_c>300) and (v1.avg_c>t2.d) and (v1.b=t2.b)) or |
| 853 | + ((v1.max_c<135) and (v1.max_c<t2.c) and (v1.a=t2.a)) |
| 854 | + union |
| 855 | + select * from cte where max_c < 100 |
| 856 | +) select /*+ NO_DERIVED_CONDITION_PUSHDOWN(@`select#2` v1) */ * from cte; |
| 857 | +--echo # End Recursive CTE Example |
| 858 | + |
| 859 | +--echo # Deeply nested query block example |
| 860 | +--source include/explain-no-costs.inc |
| 861 | +explain format=json |
| 862 | +select /*+ NO_DERIVED_CONDITION_PUSHDOWN(@`select#5` dv6) */ * from |
| 863 | + (select * from |
| 864 | + (select * from |
| 865 | + (select * from |
| 866 | + (select avg_a from |
| 867 | + (select avg(a) as avg_a from v6) dv6 |
| 868 | + ) dv4) dv3) dv2) dv1 where avg_a <> 0; |
| 869 | +--echo # End deeply nested query block example |
| 870 | + |
| 871 | +--echo # Stored procedure example |
| 872 | +DELIMITER |; |
| 873 | +CREATE PROCEDURE sp_test_implicit_hint() |
| 874 | +BEGIN |
| 875 | + EXPLAIN SELECT /*+ NO_MERGE(@`select#1` dt) */ * |
| 876 | + FROM (SELECT * FROM ten) dt; |
| 877 | +END| |
| 878 | +DELIMITER ;| |
| 879 | +CALL sp_test_implicit_hint(); |
| 880 | +DROP PROCEDURE sp_test_implicit_hint; |
| 881 | + |
| 882 | +DELIMITER |; |
| 883 | +CREATE PROCEDURE sp_test_implicit_hint() |
| 884 | +BEGIN |
| 885 | + EXPLAIN SELECT /*+ MERGE(@`select#1` dt) */ * |
| 886 | + FROM (SELECT * FROM ten) dt; |
| 887 | +END| |
| 888 | +DELIMITER ;| |
| 889 | +CALL sp_test_implicit_hint(); |
| 890 | +DROP PROCEDURE sp_test_implicit_hint; |
| 891 | +--echo # End stored procedure example |
| 892 | + |
| 893 | +--echo # Prepared statement example |
| 894 | +PREPARE stmt1 FROM 'EXPLAIN SELECT /*+ NO_MERGE(@`select#1` dt) */ * FROM (SELECT * FROM ten) dt;'; |
| 895 | +EXECUTE stmt1; |
| 896 | +DEALLOCATE PREPARE stmt1; |
| 897 | + |
| 898 | +PREPARE stmt1 FROM 'EXPLAIN SELECT /*+ MERGE(@`select#1` dt) */ * FROM (SELECT * FROM ten) dt;'; |
| 899 | +EXECUTE stmt1; |
| 900 | +DEALLOCATE PREPARE stmt1; |
| 901 | +--echo # End prepared statement example. |
| 902 | + |
| 903 | +--echo # INDEX/JOIN_INDEX example |
| 904 | +CREATE TABLE t7 (a INT, b INT, c INT, d INT, |
| 905 | + KEY i_a(a), KEY i_b(b), |
| 906 | + KEY i_ab(a,b), KEY i_c(c), KEY i_d(d)); |
| 907 | +INSERT INTO t7 VALUES |
| 908 | +(1,1,1,1),(2,2,2,1),(3,3,3,1),(4,4,4,1), |
| 909 | +(5,5,5,1),(6,6,6,1),(7,7,7,1),(8,8,8,1); |
| 910 | +INSERT INTO t7 SELECT a,b, c + 10, d FROM t7; |
| 911 | +INSERT INTO t7 SELECT a,b, c + 20, d FROM t7; |
| 912 | +INSERT INTO t7 SELECT a,b, c + 40, d FROM t7; |
| 913 | +INSERT INTO t7 SELECT a,b, c + 80, d FROM t7; |
| 914 | +INSERT INTO t7 SELECT a,b, c + 160, d FROM t7; |
| 915 | +ANALYZE TABLE t7; |
| 916 | +EXPLAIN SELECT /*+ NO_MERGE(@`select#1` dt) NO_INDEX(@`select#2` t7) */ * FROM (SELECT a FROM t7 WHERE a > 1 AND a < 3) dt WHERE dt.a = 2; |
| 917 | +--echo # End INDEX/JOIN_INDEX example |
| 918 | + |
| 919 | +DROP TABLE salaries, employees, ten, twenty, t1, t2, t3, t4, t5, t6, t7; |
| 920 | +DROP VIEW v1, v2, v6; |
| 921 | + |
| 922 | +--echo # |
| 923 | +--echo # MDEV-37260 Specifying hints in queries during CREATE VIEW AS |
| 924 | +--echo # |
| 925 | +CREATE TABLE ten(a int); |
| 926 | +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); |
| 927 | +CREATE TABLE twenty(a int); |
| 928 | +INSERT INTO twenty SELECT a FROM ten; |
| 929 | +INSERT INTO twenty SELECT a+10 FROM ten; |
| 930 | + |
| 931 | +--echo # `select#X` in a VIEW example will result in warning |
| 932 | +CREATE VIEW v2 AS SELECT /*+ JOIN_ORDER(@`select#3` twenty, ten) */ * FROM (SELECT ten.a AS a FROM (ten JOIN twenty) WHERE (ten.a = twenty.a) LIMIT 1000 ) t; |
| 933 | +EXPLAIN SELECT * FROM v2; |
| 934 | +SHOW CREATE VIEW v2; |
| 935 | +DROP VIEW v2; |
| 936 | +--echo # Creating a VIEW with hints otherwise will work |
| 937 | +CREATE VIEW v2 AS SELECT /*+ JOIN_ORDER(@qb2 twenty,ten) */ * FROM (SELECT /*+ QB_NAME(qb2) */ ten.a AS a FROM (ten JOIN twenty) WHERE (ten.a = twenty.a) LIMIT 1000 ) t; |
| 938 | +EXPLAIN SELECT * FROM v2; |
| 939 | +SHOW CREATE VIEW v2; |
| 940 | +--echo # This next CREATE VIEW statement should match the output of SHOW CREATE VIEW v2. The following EXPLAIN output should match EXPLAIN SELECT * FROM v2 as a way to demonstrate that the output of SHOW CREATE VIEW is correct. |
| 941 | +CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select /*+ JOIN_ORDER(@`qb2` `twenty`,`ten`) */ `t`.`a` AS `a` from (select /*+ QB_NAME(`qb2`) */ `ten`.`a` AS `a` from (`ten` join `twenty`) where `ten`.`a` = `twenty`.`a` limit 1000) `t`; |
| 942 | +EXPLAIN SELECT * FROM v3; |
| 943 | + |
| 944 | +--echo # Named hint example. |
| 945 | +CREATE TABLE t4 ( |
| 946 | + pk INT PRIMARY KEY, |
| 947 | + a INT, |
| 948 | + b INT, |
| 949 | + c INT, |
| 950 | + filler varchar(100), |
| 951 | + key(a,b,c) |
| 952 | +) engine=myisam; |
| 953 | + |
| 954 | +INSERT INTO t4 SELECT seq, seq, seq, seq, 'hello' FROM seq_1_to_10000; |
| 955 | +CREATE VIEW v5 AS SELECT /*+ NO_ICP(t4) */ * FROM t4 WHERE a < 10 AND (b+1>3); |
| 956 | +FLUSH STATUS; |
| 957 | +SELECT * FROM information_schema.session_status WHERE variable_name= 'handler_icp_match'; |
| 958 | +SELECT * FROM v5; |
| 959 | +SELECT * FROM information_schema.session_status WHERE variable_name= 'handler_icp_match'; |
| 960 | +EXPLAIN SELECT * from v5; |
| 961 | +--echo # End named hint example. |
| 962 | + |
| 963 | +--echo # JOIN of VIEW with table where the local hint in the VIEW specifies NO_ICP and is JOIN'd with the same table allowing ICP. |
| 964 | +EXPLAIN SELECT * FROM t4 x, t4 y WHERE x.a < 10 AND (x.b+1>3) AND y.a < 10 AND (y.b+1>3); |
| 965 | +EXPLAIN SELECT * FROM t4 x, v5 y WHERE x.a < 10 AND (x.b+1>3); |
| 966 | +EXPLAIN SELECT * FROM v5 x, t4 y WHERE y.a < 10 AND (y.b+1>3); |
| 967 | +EXPLAIN SELECT * FROM v5 x, v5 y; |
| 968 | +--echo # End of JOIN of VIEW with table where the local hint in the VIEW specifies NO_ICP and is JOIN'd with the same table allowing ICP. |
| 969 | + |
| 970 | +--echo # INDEX/JOIN_INDEX example |
| 971 | +CREATE TABLE t7 (a INT, b INT, c INT, d INT, |
| 972 | + KEY i_a(a), KEY i_b(b), |
| 973 | + KEY i_ab(a,b), KEY i_c(c), KEY i_d(d)); |
| 974 | +INSERT INTO t7 VALUES |
| 975 | +(1,1,1,1),(2,2,2,1),(3,3,3,1),(4,4,4,1), |
| 976 | +(5,5,5,1),(6,6,6,1),(7,7,7,1),(8,8,8,1); |
| 977 | +INSERT INTO t7 SELECT a,b, c + 10, d FROM t7; |
| 978 | +INSERT INTO t7 SELECT a,b, c + 20, d FROM t7; |
| 979 | +INSERT INTO t7 SELECT a,b, c + 40, d FROM t7; |
| 980 | +INSERT INTO t7 SELECT a,b, c + 80, d FROM t7; |
| 981 | +INSERT INTO t7 SELECT a,b, c + 160, d FROM t7; |
| 982 | +ANALYZE TABLE t7; |
| 983 | +CREATE VIEW v7 AS SELECT /*+ NO_MERGE(dt) NO_INDEX(@qb t7) */ * FROM (SELECT /*+ QB_NAME(qb) */ a FROM t7 WHERE a > 1 AND a < 3) dt WHERE dt.a = 2; |
| 984 | +EXPLAIN SELECT * FROM v7; |
| 985 | +SHOW CREATE VIEW v7; |
| 986 | +--echo # End INDEX/JOIN_INDEX example |
| 987 | + |
| 988 | +--echo # Example of many nested derived tables are not merged. |
| 989 | +EXPLAIN SELECT /*+ NO_MERGE(da) */ * FROM (SELECT /*+ NO_MERGE(db) */ * FROM (SELECT /*+ NO_MERGE(dc) */ * FROM (SELECT /*+ NO_MERGE(dd) */ * FROM (SELECT /*+ NO_MERGE(de) */ * FROM (SELECT /*+ NO_MERGE(df) */ * FROM (SELECT /*+ NO_MERGE(dg) */ * FROM (SELECT /*+ NO_MERGE(dh) */ * FROM (SELECT /*+ NO_MERGE(di) */ * FROM (SELECT /*+ NO_MERGE(dj) */ * FROM (SELECT /*+ NO_MERGE(dk) */ * FROM (SELECT /*+ NO_MERGE(dl) */ * FROM (SELECT * FROM ten) dl) dk) dj) di) dh) dg) df) de) dd) dc) db) da; |
| 990 | + |
| 991 | +EXPLAIN SELECT /*+ NO_MERGE(da@`select#1`) */ * FROM (SELECT /*+ NO_MERGE(db@`select#2`) */ * FROM (SELECT /*+ NO_MERGE(dc@`select#3`) */ * FROM (SELECT /*+ NO_MERGE(dd@`select#4`) */ * FROM (SELECT /*+ NO_MERGE(de@`select#5`) */ * FROM (SELECT /*+ NO_MERGE(df@`select#6`) */ * FROM (SELECT /*+ NO_MERGE(dg@`select#7`) */ * FROM (SELECT /*+ NO_MERGE(dh@`select#8`) */ * FROM (SELECT /*+ NO_MERGE(di@`select#9`) */ * FROM (SELECT /*+ NO_MERGE(dj@`select#10`) */ * FROM (SELECT /*+ NO_MERGE(dk@`select#11`) */ * FROM (SELECT /*+ NO_MERGE(dl@`select#12`) */ * FROM (SELECT * FROM ten) dl) dk) dj) di) dh) dg) df) de) dd) dc) db) da; |
| 992 | +--echo # End example of many nested derived tables are not merged. |
| 993 | + |
| 994 | +--echo # Example of VIEW hints displaying properly in warning note |
| 995 | +CREATE TABLE t1 ( a int, b int); |
| 996 | +INSERT INTO t1 SELECT seq, seq FROM seq_1_to_10; |
| 997 | +CREATE TABLE t2 AS SELECT * from t1; |
| 998 | +ALTER TABLE t2 ADD INDEX(a); |
| 999 | +CREATE VIEW v23 AS SELECT /*+ NO_INDEX(t2 a) */ * FROM t2 WHERE a<2; |
| 1000 | +SHOW CREATE VIEW v23; |
| 1001 | +EXPLAIN EXTENDED SELECT * FROM v23; |
| 1002 | +EXPLAIN EXTENDED SELECT /*+ NO_MERGE(du) */ * FROM (SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * from v23) dt) du; |
| 1003 | +--echo # merged view will retain v23 in note |
| 1004 | +EXPLAIN EXTENDED SELECT /*+ NO_MERGE(v23) */ * FROM v23; |
| 1005 | + |
| 1006 | +CREATE VIEW v24 AS SELECT /*+ INDEX(`t2` `a`) */ `t2`.`a` AS `a`,`t2`.`b` AS `b` from `t2` where `t2`.`a` < 2; |
| 1007 | +SHOW CREATE VIEW v24; |
| 1008 | +EXPLAIN EXTENDED SELECT * FROM v24; |
| 1009 | +EXPLAIN EXTENDED SELECT /*+ NO_MERGE(du) */ * FROM (SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * from v24) dt) du; |
| 1010 | +--echo # merged view will retain v24 in note |
| 1011 | +EXPLAIN EXTENDED SELECT /*+ NO_MERGE(dt) */ * FROM (SELECT * FROM v24) dt; |
| 1012 | +--echo # End example of VIEW hints displaying properly in warning note |
| 1013 | + |
| 1014 | +--echo # INSERT example without and with VIEW |
| 1015 | +EXPLAIN EXTENDED INSERT INTO ten SELECT /*+ NO_MERGE(dv) NO_BNL(@qb) */ 100*COUNT(dv.a) AS a FROM ( SELECT /*+ QB_NAME(qb) */ dt.a AS a FROM ten dt, ten du WHERE dt.a % 2 = 1 ) dv WHERE dv.a = 3; |
| 1016 | +CREATE VIEW v25 AS SELECT /*+ NO_MERGE(dv) NO_BNL(@qb) */ 100*COUNT(dv.a) AS a FROM ( SELECT /*+ QB_NAME(qb) */ dt.a AS a FROM ten dt, ten du WHERE dt.a % 2 = 1 ) dv WHERE dv.a = 3; |
| 1017 | +--echo # merged view will retail qb name reference in the note |
| 1018 | +EXPLAIN EXTENDED INSERT INTO ten SELECT * FROM v25; |
| 1019 | +--echo # End INSERT example without and with VIEW |
| 1020 | + |
| 1021 | +--echo # CTE JOIN'd with itself |
| 1022 | +EXPLAIN EXTENDED WITH cte1 AS (SELECT * FROM t7 WHERE a<10 AND b<10 LIMIT 10) SELECT /*+ NO_INDEX(t7@`select#2`) NO_INDEX(t7@`select#3`) */ * FROM cte1 AS tbl1, cte1 AS tbl2; |
| 1023 | +EXPLAIN EXTENDED WITH cte1 AS (SELECT * FROM t7 WHERE a<10 AND b<10 LIMIT 10) SELECT /*+ NO_INDEX(t7@`select#2`) INDEX(t7@`select#3`) */ * FROM cte1 AS tbl1, cte1 AS tbl2; |
| 1024 | +EXPLAIN EXTENDED WITH cte1 AS (SELECT * FROM t7 WHERE a<10 AND b<10 LIMIT 10) SELECT /*+ INDEX(t7@`select#2`) NO_INDEX(t7@`select#3`) */ * FROM cte1 AS tbl1, cte1 AS tbl2; |
| 1025 | +EXPLAIN EXTENDED WITH cte1 AS (SELECT * FROM t7 WHERE a<10 AND b<10 LIMIT 10) SELECT /*+ INDEX(t7@`select#2`) INDEX(t7@`select#3`) */ * FROM cte1 AS tbl1, cte1 AS tbl2; |
| 1026 | +--echo # End CTE JOIN'd with itself |
| 1027 | + |
| 1028 | +DROP TABLE ten, twenty, t1, t2, t4, t7; |
| 1029 | +DROP VIEW v2, v3, v5, v7, v23, v24, v25; |
| 1030 | + |
| 1031 | +--echo # Examples from QA |
| 1032 | +--echo # MAX_EXECUTION_TIME not allowed in VIEWs, allowed only at top level SELECT. |
| 1033 | +CREATE TABLE t1 (a INT, b VARCHAR(300)); |
| 1034 | +INSERT INTO t1 VALUES (1, 'string'); |
| 1035 | +SELECT /*+ MAX_EXECUTION_TIME(10) */* FROM t1 a, t1 b; |
| 1036 | +CREATE VIEW v1 AS SELECT /*+ MAX_EXECUTION_TIME(10) */ a.a, b.b FROM t1 a, t1 b; |
| 1037 | +DROP VIEW v1; |
| 1038 | +DROP TABLE t1; |
| 1039 | + |
| 1040 | +--echo # Hint within subquery not honored. |
| 1041 | +CREATE TABLE t1 (i int); |
| 1042 | +INSERT INTO t1 VALUES (1),(2); |
| 1043 | +EXPLAIN EXTENDED |
| 1044 | +SELECT * |
| 1045 | + FROM ( SELECT /*+ DERIVED_CONDITION_PUSHDOWN(sq1)*/* FROM ( SELECT MIN(i) as f FROM t1 ) sq1 ) AS sq2 |
| 1046 | + WHERE f = 1; |
| 1047 | +CREATE VIEW v1 AS SELECT * |
| 1048 | + FROM ( SELECT /*+ DERIVED_CONDITION_PUSHDOWN(sq1)*/* FROM ( SELECT MIN(i) as f FROM t1 ) sq1 ) AS sq2 |
| 1049 | + WHERE f = 1; |
| 1050 | +EXPLAIN EXTENDED SELECT * FROM v1; |
| 1051 | +SHOW CREATE VIEW v1; |
| 1052 | +DROP TABLE t1; |
| 1053 | +DROP VIEW v1; |
| 1054 | +--echo # End Examples from QA |
| 1055 | + |
| 1056 | +--echo # End of 12.2 tests |
0 commit comments