[ 
https://issues.apache.org/jira/browse/IGNITE-5359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17632077#comment-17632077
 ] 

Sviridov Aleksey Konstantinovich commented on IGNITE-5359:
----------------------------------------------------------

Hi all! Faced this problem and for me its decision became critical. I studied 
the indexing module and found that subqueries are automatically converted to 
joins, but when checking the possibility of such a transformation, it always 
returned false.
In the GridSubqueryJoinOptimizer class, the private static boolean 
isUniqueIndexExists method checks whether all used fields are indexed, and also 
asks if the index is unique.
 First, the cols.containsAll(Arrays.asList(idx.getColumns()))) method didn't 
work properly and always returned false.
Second, I discovered that the unique field of the IndexType class is never set 
to true.
By redoing this method, I got the correct execution of nested queries in 
parallelism.

 

private static boolean isUniqueIndexExists(Collection<GridSqlColumn> gridCols, 
GridSqlTable tbl) {
Set<Column> cols = 
gridCols.stream().map(GridSqlColumn::column).collect(Collectors.toSet());
for (Index idx : tbl.dataTable().getIndexes()) {
int r = 0;
for (var col:cols) {
for (var idndex:idx.getColumns()) {
if (idndex.equals(col)) r++;
}
}
if (r == cols.size()) {
return true;
}
}

return false;
}

> Non-collocated SQL subqueries return wrong results.
> ---------------------------------------------------
>
>                 Key: IGNITE-5359
>                 URL: https://issues.apache.org/jira/browse/IGNITE-5359
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 2.0
>            Reporter: Andrey Mashenkov
>            Priority: Critical
>              Labels: sql-engine
>         Attachments: JoinWithAggr.java
>
>
> PFA repro attached.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to