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