You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-30 19:23:07 +03:00
Merge pull request #2670 from denis0x0D/MCOL-5195
MCOL-5195 Correlated subquery with equi/non-equi scalar filter and join condition
This commit is contained in:
@ -275,34 +275,6 @@ execplan::ParseTree* ScalarSub::buildParseTree(PredicateOperator* op)
|
|||||||
|
|
||||||
fGwip.subselectList.push_back(csep);
|
fGwip.subselectList.push_back(csep);
|
||||||
|
|
||||||
// error out non-support case for now: comparison out of semi join tables.
|
|
||||||
// only check for simplecolumn
|
|
||||||
if (!gwi.correlatedTbNameVec.empty())
|
|
||||||
{
|
|
||||||
for (uint32_t i = 0; i < cols.size(); i++)
|
|
||||||
{
|
|
||||||
SimpleColumn* sc = dynamic_cast<SimpleColumn*>(cols[i].get());
|
|
||||||
|
|
||||||
if (sc)
|
|
||||||
{
|
|
||||||
CalpontSystemCatalog::TableAliasName tan =
|
|
||||||
make_aliastable(sc->schemaName(), sc->tableName(), sc->tableAlias());
|
|
||||||
uint32_t j = 0;
|
|
||||||
|
|
||||||
for (; j < gwi.correlatedTbNameVec.size(); j++)
|
|
||||||
if (tan == gwi.correlatedTbNameVec[j])
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (j == gwi.correlatedTbNameVec.size())
|
|
||||||
{
|
|
||||||
fGwip.fatalParseError = true;
|
|
||||||
fGwip.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_SCALAR);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove outer query tables
|
// remove outer query tables
|
||||||
CalpontSelectExecutionPlan::TableList tblist;
|
CalpontSelectExecutionPlan::TableList tblist;
|
||||||
|
|
||||||
|
58
mysql-test/columnstore/basic/r/mcol-5195.result
Normal file
58
mysql-test/columnstore/basic/r/mcol-5195.result
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
DROP DATABASE IF EXISTS mcol5195;
|
||||||
|
CREATE DATABASE mcol5195;
|
||||||
|
USE mcol5195;
|
||||||
|
create table t1 (a int, b int) engine=columnstore;
|
||||||
|
create table t2 (a int, b int) engine=columnstore;
|
||||||
|
insert into t1 values (1, 2), (1, 3), (1, 4), (2, 5), (2, 6), (2, 7);
|
||||||
|
insert into t2 values (1, 2), (1, 2), (1, 4), (2, 5), (2, 6), (2, 8);
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b = (select max(b) from t2 where t1.a = t2.a) order by t2.b;
|
||||||
|
a b a b
|
||||||
|
1 4 1 4
|
||||||
|
1 2 1 4
|
||||||
|
1 3 1 4
|
||||||
|
2 7 2 8
|
||||||
|
2 5 2 8
|
||||||
|
2 6 2 8
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b < (select max(b) from t2 where t1.a = t2.a) order by t2.b;
|
||||||
|
a b a b
|
||||||
|
1 3 1 2
|
||||||
|
1 4 1 2
|
||||||
|
1 2 1 2
|
||||||
|
1 4 1 2
|
||||||
|
1 2 1 2
|
||||||
|
1 3 1 2
|
||||||
|
2 6 2 5
|
||||||
|
2 5 2 5
|
||||||
|
2 7 2 5
|
||||||
|
2 5 2 6
|
||||||
|
2 6 2 6
|
||||||
|
2 7 2 6
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b > (select max(b) from t2 where t1.a = t2.a) order by t2.b;
|
||||||
|
a b a b
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t1.b = (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t2.b;
|
||||||
|
a b a b
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b < (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t2.b;
|
||||||
|
a b a b
|
||||||
|
1 3 1 2
|
||||||
|
1 4 1 2
|
||||||
|
1 2 1 2
|
||||||
|
1 4 1 2
|
||||||
|
1 2 1 2
|
||||||
|
1 3 1 2
|
||||||
|
2 6 2 5
|
||||||
|
2 5 2 5
|
||||||
|
2 7 2 5
|
||||||
|
2 5 2 6
|
||||||
|
2 6 2 6
|
||||||
|
2 7 2 6
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b > (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t2.b;
|
||||||
|
a b a b
|
||||||
|
1 4 1 4
|
||||||
|
1 2 1 4
|
||||||
|
1 3 1 4
|
||||||
|
2 7 2 8
|
||||||
|
2 5 2 8
|
||||||
|
2 6 2 8
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
DROP DATABASE mcol5195;
|
28
mysql-test/columnstore/basic/t/mcol-5195.test
Normal file
28
mysql-test/columnstore/basic/t/mcol-5195.test
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
#-- source ../include/have_innodb.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP DATABASE IF EXISTS mcol5195;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
CREATE DATABASE mcol5195;
|
||||||
|
|
||||||
|
USE mcol5195;
|
||||||
|
|
||||||
|
create table t1 (a int, b int) engine=columnstore;
|
||||||
|
create table t2 (a int, b int) engine=columnstore;
|
||||||
|
|
||||||
|
insert into t1 values (1, 2), (1, 3), (1, 4), (2, 5), (2, 6), (2, 7);
|
||||||
|
insert into t2 values (1, 2), (1, 2), (1, 4), (2, 5), (2, 6), (2, 8);
|
||||||
|
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b = (select max(b) from t2 where t1.a = t2.a) order by t2.b;
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b < (select max(b) from t2 where t1.a = t2.a) order by t2.b;
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b > (select max(b) from t2 where t1.a = t2.a) order by t2.b;
|
||||||
|
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t1.b = (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t2.b;
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b < (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t2.b;
|
||||||
|
select * from t1, t2 where t1.a = t2.a and t2.b > (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t2.b;
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
DROP DATABASE mcol5195;
|
Reference in New Issue
Block a user