[MDEV-31645] Spider doesn't recognize semi JOIN Created: 2023-07-07  Updated: 2023-11-22  Resolved: 2023-11-17

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - Spider
Affects Version/s: 10.5.11, 10.4, 10.5.19, 10.5, 10.6, 10.9, 10.10, 10.11, 11.0
Fix Version/s: 10.4.33, 10.5.24, 10.6.17, 10.11.7, 11.0.5, 11.1.4, 11.2.3

Type: Bug Priority: Major
Reporter: Rob G Assignee: Yuchen Pei
Resolution: Fixed Votes: 0
Labels: spider-gbh
Environment:

Windows x64


Attachments: File SpiderSemiJoin-1.sql    
Issue Links:
Blocks
is blocked by MDEV-26247 Spider: Valid LEFT JOIN results in ER... Closed
PartOf
is part of MDEV-26247 Spider: Valid LEFT JOIN results in ER... Closed
Relates
relates to MDEV-32238 Add a switch to disable spider group ... Closed

 Description   

Have to disable semijoin optimizer switch due to Spider not recognizing the optimized query



 Comments   
Comment by Alice Sherepa [ 2023-07-19 ]

Thank you for the report! I repeated on 10.4-11.0:

set password for 'root'@localhost='';
INSTALL SONAME "ha_spider";
 
CREATE DATABASE spidertesta;
 
CREATE TABLE spidertesta.testtable ( testnum bigint(20) NOT NULL, readvalue bigint(20) DEFAULT 0, PRIMARY KEY (testnum)) engine=myisam;
CREATE SERVER localspider FOREIGN DATA WRAPPER mysql OPTIONS( HOST '127.0.0.1', DATABASE 'spidertesta',USER 'root', PASSWORD '',PORT 16000 );
 
CREATE DATABASE spidertestb;
SET @@spider_same_server_link=1;
 
CREATE TABLE spidertestb.testtable ( testnum bigint(20) NOT NULL, readvalue bigint(20) DEFAULT 0, PRIMARY KEY (testnum)) ENGINE=SPIDER COMMENT='srv "localspider"';
 
SET SESSION optimizer_switch='semijoin=off';
 
SELECT * FROM spidertestb.testtable
WHERE TestNum BETWEEN 0 AND 10 AND ReadValue IN(SELECT ReadValue FROM spidertestb.testtable WHERE TestNum BETWEEN 11 AND 20);
 
SET SESSION optimizer_switch='semijoin=on';
 
SELECT * FROM spidertestb.testtable
WHERE TestNum BETWEEN 0 AND 10 AND ReadValue IN(SELECT ReadValue FROM spidertestb.testtable WHERE TestNum BETWEEN 11 AND 20);

second select fails:

query 'SELECT * FROM spidertestb.testtable
WHERE TestNum BETWEEN 0 AND 10 AND ReadValue IN(SELECT ReadValue FROM spidertestb.testtable WHERE TestNum BETWEEN 11 AND 20)' failed: ER_PARSE_ERROR (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '`spidertesta`.`testtable` t1 where ((t1.`readvalue` = t0.`readvalue`) and (t0...' at line 1

Comment by Yuchen Pei [ 2023-09-22 ]

mtr case

--disable_query_log
--disable_result_log
--source ../../t/test_init.inc
--enable_result_log
--enable_query_log
 
evalp CREATE SERVER srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
 
CREATE TABLE t1 ( a bigint(20) NOT NULL, b bigint(20) DEFAULT 0, PRIMARY KEY (a));
CREATE TABLE t2 ( a bigint(20) NOT NULL, b bigint(20) DEFAULT 0, PRIMARY KEY (a)) ENGINE=SPIDER COMMENT='srv "srv", WRAPPER "mysql", TABLE "t1"';
 
SET SESSION optimizer_switch='semijoin=off';
SELECT * FROM t2
WHERE A BETWEEN 0 AND 10 AND B IN(SELECT B FROM t2 WHERE A BETWEEN 11 AND 20);
 
SET SESSION optimizer_switch='semijoin=on';
 
SELECT * FROM t2
WHERE A BETWEEN 0 AND 10 AND B IN(SELECT B FROM t2 WHERE A BETWEEN 11 AND 20);
drop table t1, t2;
drop server srv;
--disable_query_log
--disable_result_log
--source ../../t/test_deinit.inc
--enable_result_log
--enable_query_log

Comment by Yuchen Pei [ 2023-11-17 ]

fixed by MDEV-26247

Generated at Thu Feb 08 10:25:25 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.