Possible Internal Server Error for Queries that combine With Clauses and Analytic Functions
Details
| Detail name | Value |
|---|---|
| Changelog Number | 6625 |
| Type | Bug |
| Status | Resolved |
| Affected Versions | EXASOL 6.0.0 |
| Fix Versions | Exasol 6.0.12 |
| Resolution Date | 2018-08-17 |
Background
To cause this rare internal server error, several preconditions have to be met:
- The query contains a WITH clause
- The WITH clause uses an analytical function within an expression
- The analytic function uses a pl/SQL function that resolves to a constant expression
This combination can lead to access of invalid memory which leads to the internal server error.
Example
CREATE SCHEMA TEST;
OPEN SCHEMA TEST;
CREATE TABLE LOOKUP(KEY_NAME VARCHAR(10), KEY_VALUE INT);
INSERT INTO LOOKUP VALUES('X', 5);
--/
-- the pl/sql function
CREATE FUNCTION LOOKUP_FUNCTION ()
RETURN TIMESTAMP
IS
RES TIMESTAMP;
BEGIN
RES :=
(
SELECT
ADD_HOURS(TRUNC(SYSDATE), KEY_VALUE) AS Y
FROM LOOKUP
WHERE KEY_NAME = 'X'
);
RETURN RES;
END LOOKUP_FUNCTION;
/
CREATE TABLE FACT(ID INT, MEASURE INT);
INSERT INTO FACT VALUES
(1,2)
,(2,3);
-- the view
CREATE OR REPLACE VIEW FACT_WEEK AS (
SELECT *
FROM FACT
WHERE NOW() < LOOKUP_FUNCTION() + 5
);
-- multiple WITH clauses
WITH A AS (
WITH B AS (
SELECT
-- the analytical function expression
1 + SUM(MEASURE) OVER (PARTITION BY ID) as NONSENSE
FROM FACT_WEEK
)
SELECT * FROM B
)
SELECT * FROM A;
Workaround
Remove one of the preconditions by rewriting the specific query.