Browse Source

MDEV-36454 MDEV-35452 Fix spider view protocol test failures caused by tampering of order by items

With view protocol, a SELECT statement is transformed into two
statements:

1. CREATE OR REPLACE VIEW mysqltest_tmp_v AS SELECT ...
2. SELECT * FROM mysqltest_tmp_v

The first statement reconstructed the query, which is executed in the
second statement.

The reconstruction often replaces aliases in ORDER BY by the original
item.

For example, in the test spider/bugfix.mdev_29008 the query

SELECT MIN(t2.a) AS f1, t1.b AS f2 FROM tbl_a AS t1 JOIN tbl_a AS t2 GROUP BY f2 ORDER BY f1, f2;

is transformed to

"select min(`t2`.`a`) AS `f1`,`t1`.`b` AS `f2` from (`auto_test_local`.`tbl_a` `t1` join `auto_test_local`.`tbl_a` `t2`) group by `t1`.`b` order by min(`t2`.`a`),`t1`.`b`"

In such cases, spider constructs different queries to execute at the
data node. So we disable view protocol for such queries.
bb-10.5-MDEV-31477
Yuchen Pei 6 months ago
parent
commit
b6392c292e
No known key found for this signature in database GPG Key ID: 3DD1B35105743563
  1. 2
      storage/spider/mysql-test/spider/bugfix/t/group_by_order_by_limit.test
  2. 2
      storage/spider/mysql-test/spider/bugfix/t/mdev_29008.test
  3. 2
      storage/spider/mysql-test/spider/regression/e112122/t/group_by_order_by_limit_ok.test

2
storage/spider/mysql-test/spider/bugfix/t/group_by_order_by_limit.test

@ -71,7 +71,9 @@ TRUNCATE TABLE mysql.general_log;
set @old_spider_direct_aggregate=@@session.spider_direct_aggregate;
set spider_direct_aggregate=1;
SHOW STATUS LIKE 'Spider_direct_aggregate';
--disable_view_protocol
SELECT skey, count(*) cnt FROM tbl_a GROUP BY skey ORDER BY cnt DESC, skey DESC LIMIT 5;
--enable_view_protocol
SHOW STATUS LIKE 'Spider_direct_aggregate';
set spider_direct_aggregate=@old_spider_direct_aggregate;

2
storage/spider/mysql-test/spider/bugfix/t/mdev_29008.test

@ -31,8 +31,10 @@ eval CREATE TABLE tbl_a (
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"';
--disable_ps2_protocol
--disable_view_protocol
SELECT MIN(t2.a) AS f1, t1.b AS f2 FROM tbl_a AS t1 JOIN tbl_a AS t2 GROUP BY f2 ORDER BY f1, f2;
SELECT MIN(t2.a) AS f1, t1.b AS f2 FROM tbl_a AS t1 JOIN tbl_a AS t2 GROUP BY f2 ORDER BY MIN(t2.a), MAX(t2.a), f2;
--enable_view_protocol
--enable_ps2_protocol
--connection master_1

2
storage/spider/mysql-test/spider/regression/e112122/t/group_by_order_by_limit_ok.test

@ -71,7 +71,9 @@ TRUNCATE TABLE mysql.general_log;
set @old_spider_direct_aggregate=@@session.spider_direct_aggregate;
set spider_direct_aggregate=1;
SHOW STATUS LIKE 'Spider_direct_aggregate';
--disable_view_protocol
SELECT skey, count(*) cnt FROM tbl_a GROUP BY skey ORDER BY cnt DESC, skey DESC LIMIT 5;
--enable_view_protocol
SHOW STATUS LIKE 'Spider_direct_aggregate';
set spider_direct_aggregate=@old_spider_direct_aggregate;

Loading…
Cancel
Save