Using a UDF with EMITS can cause wrong column names in the result set

Details

Detail name Value
Changelog Number 8227
Type Bug
Status Resolved
Affected Versions EXASOL 6.0.0, Exasol 6.1.0, Exasol 7.0.0, Exasol 6.2.rc1
Fix Versions Exasol 7.0.1
Resolution Date 2020-09-23

Description:

 When calling an emitting UDF, the name of the result set column(s) may show the incorrect name

How to reproduce:

CREATE SCHEMA STEST;

CREATE OR REPLACE TABLE STEST.T AS SELECT 'SOME VALUE' AS A_NAME;

--/
CREATE OR REPLACE PYTHON SCALAR SCRIPT STEST.TEST1 (...) EMITS(...) AS
def run(ctx):
   ctx.emit('result 1')
/



-- FIRST COLUMN HEADER SHOULD BE A_NEW_NAME NOT A_NAME
WITH
CTE AS(
SELECT
A_NAME AS A_NEW_NAME
FROM
STEST.T
)
SELECT
CTE.A_NEW_NAME
,STEST.TEST1() EMITS(SOME_VALUE VARCHAR(100))
FROM
CTE
;

-- NOTE, THAT THE NEW NAME IS RESOLVED CORRECTLY:
WITH
CTE AS(
SELECT
A_NAME AS A_NEW_NAME
FROM
STEST.T
)
SELECT A_NEW_NAME FROM (SELECT
                        CTE.A_NEW_NAME
                        ,STEST.TEST1() EMITS(SOME_VALUE VARCHAR(100))
                        FROM
                        CTE)
;

-- WHEN REMOVING THE UDF, THE NAME IN THE RESULT SET IS CORRECT:
WITH
CTE AS(
SELECT
A_NAME AS A_NEW_NAME
FROM
STEST.T
)
SELECT
CTE.A_NEW_NAME
FROM
CTE
;

Workaround

When wrapping the query into a subquery like this, the problem disappears:

SELECT A_NEW_NAME, SOME_VALUE FROM
WITH
CTE AS(
SELECT
A_NAME AS A_NEW_NAME
FROM
STEST.T
)
SELECT
CTE.A_NEW_NAME
,STEST.TEST1() EMITS(SOME_VALUE VARCHAR(100))
FROM
CTE
;

Fix

The columns in the resultset will match the names specified in the query