exasol / exasol-virtual-schema

Virtual Schema from Exasol to Exasol
MIT License
1 stars 2 forks source link

Something is wrong with ODRER BY clause in JOIN #43

Closed AnastasiiaSergienko closed 3 years ago

AnastasiiaSergienko commented 3 years ago

Problem

I run across a strange issue - the same query returns the result rows in a different order when executing against Exasol Schema and Virtual schema. Looks like something is wrong with GROUP BY mapping. We need to investigate it.

How to reproduce

OPEN SCHEMA SOURCE_SCHEMA; CREATE OR REPLACE TABLE TL("L1" VARCHAR(5), "L2" VARCHAR(5)); CREATE OR REPLACE TABLE TR("R1" VARCHAR(5), "R2" VARCHAR(5), "R3" VARCHAR(5)); INSERT INTO TL VALUES('ON', 'L2_1'); INSERT INTO TL VALUES('ON', 'L2_2');

INSERT INTO TR VALUES('ON', 'R2_1', 'R3_1'); INSERT INTO TR VALUES('ON', 'R2_2', 'R3_2');

SELECT FROM TR JOIN TL ON TL.L1 = TR.R1 ORDER BY R2; SELECT FROM TL JOIN TR ON TL.L1 = TR.R1 ORDER BY L2; SELECT FROM (SELECT FROM TR JOIN TL ON TL.L1 = TR.R1 ORDER BY L2) nested JOIN TM ON TM.M1 = nested.R1 ORDER BY R2;

-- Virtual Schema

CREATE VIRTUAL SCHEMA MY_VIRTUAL_SCHEMA USING ADAPTER_SCHEMA.EXASOL_ADAPTER WITH CONNECTION_NAME = 'JDBC_CONNECTION' SCHEMA_NAME = 'SOURCE_SCHEMA';

OPEN SCHEMA VIRTUAL_SCHEMA_WITHOUT_SELECT_LIST_PROJECTION_CAPABILITY; SELECT FROM (SELECT FROM TR JOIN TL ON TL.L1 = TR.R1 ORDER BY L2) nested JOIN TM ON TM.M1 = nested.R1 ORDER BY R2; EXPLAIN VIRTUAL SELECT FROM (SELECT FROM TR INNER JOIN TL ON TL.L1 = TR.R1 ORDER BY L2) nested INNER JOIN TM ON TM.M1 = nested.R1 ORDER BY R2;

Result against Exasol Schema: Against Exasol

Result against Virtual SChema Against Virtual Schema

EXPLAIN VIRTUAL:

AnastasiiaSergienko commented 3 years ago

Inner ORDER BY case is dropped intentionally according to the SQL standards, so this is expected behavior.