Skip to content

[PERF] JSQLParser Version : parse timeout when calling many nested functions #1983

Open
@young0098

Description

@young0098

Always check against the Latest SNAPSHOT of JSQLParser and the Syntax Diagram

Failing SQL Feature:

  • parse timeout,just a common sql , haved set timeout argument to 3 minutes.
  • Example: WITH ROLLUP can't be parsed

SQL Example:

  • Simplified Query Example, focusing on the failing feature

INSERT INTO
C01_INDIV_TELBK_CUST_INFO_H_T2 (PARTY_ID, PARTY_SIGN_STAT_CD, SIGN_TM, CLOSE_TM)
SELECT
A1.PARTY_ID,
A1.PARTY_SIGN_STAT_CD,
CAST(
(
CASE
WHEN A1.SIGN_TM IS NULL
OR A1.SIGN_TM = '' THEN CAST(
CAST(
CAST('ATkkIVQJZm' AS DATE FORMAT 'YYYYMMDD') AS DATE
) || ' 00:00:00' AS TIMESTAMP
)
WHEN CHARACTERS (TRIM(A1.SIGN_TM)) <> 19
OR SUBSTR (TRIM(A1.SIGN_TM), 1, 1) < '0'
OR SUBSTR (TRIM(A1.SIGN_TM), 1, 1) > '9'
OR SUBSTR (TRIM(A1.SIGN_TM), 2, 1) < '0'
OR SUBSTR (TRIM(A1.SIGN_TM), 2, 1) > '9'
OR SUBSTR (TRIM(A1.SIGN_TM), 3, 1) < '0'
OR SUBSTR (TRIM(A1.SIGN_TM), 3, 1) > '9'
OR SUBSTR (TRIM(A1.SIGN_TM), 4, 1) < '0'
OR SUBSTR (TRIM(A1.SIGN_TM), 4, 1) > '9'
OR SUBSTR (TRIM(A1.SIGN_TM), 6, 1) < '0'
OR SUBSTR (TRIM(A1.SIGN_TM), 6, 1) > '1'
OR SUBSTR (TRIM(A1.SIGN_TM), 7, 1) < '0'
OR SUBSTR (TRIM(A1.SIGN_TM), 7, 1) > '9'
OR SUBSTR (TRIM(A1.SIGN_TM), 9, 1) < '0'
OR SUBSTR (TRIM(A1.SIGN_TM), 9, 1) > '3'
OR SUBSTR (TRIM(A1.SIGN_TM), 10, 1) < '0'
OR SUBSTR (TRIM(A1.SIGN_TM), 10, 1) > '9'
OR SUBSTR (TRIM(A1.SIGN_TM), 1, 4) = '0000'
OR SUBSTR (TRIM(A1.SIGN_TM), 6, 2) = '00'
OR SUBSTR (TRIM(A1.SIGN_TM), 9, 2) = '00'
OR SUBSTR (TRIM(A1.SIGN_TM), 1, 1) = '0' THEN CAST(
CAST(
CAST('cDXtwdFyky' AS DATE FORMAT 'YYYYMMDD') AS DATE
) || ' 00:00:00' AS TIMESTAMP
)
ELSE (
CASE
WHEN (
CAST(SUBSTR (TRIM(A1.SIGN_TM), 9, 2) AS INTEGER) < 29
AND SUBSTR (TRIM(A1.SIGN_TM), 6, 2) = '02'
)
OR (
CAST(SUBSTR (TRIM(A1.SIGN_TM), 9, 2) AS INTEGER) < 31
AND SUBSTR (TRIM(A1.SIGN_TM), 6, 2) <> '02'
AND SUBSTR (TRIM(A1.SIGN_TM), 6, 2) <= 12
)
OR (
CAST(SUBSTR (TRIM(A1.SIGN_TM), 9, 2) AS INTEGER) = 31
AND SUBSTR (TRIM(A1.SIGN_TM), 6, 2) IN ('01', '03', '05', '07', '08', '10', '12')
) THEN CAST(A1.SIGN_TM AS TIMESTAMP)
WHEN SUBSTR (TRIM(A1.SIGN_TM), 6, 2) || SUBSTR (TRIM(A1.SIGN_TM), 9, 2) = '0229'
AND (
CAST(SUBSTR (TRIM(A1.SIGN_TM), 1, 4) AS INTEGER) MOD 400 = 0
OR (
CAST(SUBSTR (TRIM(A1.SIGN_TM), 1, 4) AS INTEGER) MOD 4 = 0
AND CAST(SUBSTR (TRIM(A1.SIGN_TM), 1, 4) AS INTEGER) MOD 100 <> 0
)
) THEN CAST(A1.SIGN_TM AS TIMESTAMP)
ELSE CAST(
CAST(
CAST('cDXtwdFyky' AS DATE FORMAT 'YYYYMMDD') AS DATE
) || ' 00:00:00' AS TIMESTAMP
)
END
)
END
) AS DATE FORMAT 'YYYYMMDD'
),
CAST(
(
CASE
WHEN A1.CLOSE_TM IS NULL
OR A1.CLOSE_TM = '' THEN CAST(
CAST(
CAST('ATkkIVQJZm' AS DATE FORMAT 'YYYYMMDD') AS DATE
) || ' 00:00:00' AS TIMESTAMP
)
WHEN CHARACTERS (TRIM(A1.CLOSE_TM)) <> 19
OR SUBSTR (TRIM(A1.CLOSE_TM), 1, 1) < '0'
OR SUBSTR (TRIM(A1.CLOSE_TM), 1, 1) > '9'
OR SUBSTR (TRIM(A1.CLOSE_TM), 2, 1) < '0'
OR SUBSTR (TRIM(A1.CLOSE_TM), 2, 1) > '9'
OR SUBSTR (TRIM(A1.CLOSE_TM), 3, 1) < '0'
OR SUBSTR (TRIM(A1.CLOSE_TM), 3, 1) > '9'
OR SUBSTR (TRIM(A1.CLOSE_TM), 4, 1) < '0'
OR SUBSTR (TRIM(A1.CLOSE_TM), 4, 1) > '9'
OR SUBSTR (TRIM(A1.CLOSE_TM), 6, 1) < '0'
OR SUBSTR (TRIM(A1.CLOSE_TM), 6, 1) > '1'
OR SUBSTR (TRIM(A1.CLOSE_TM), 7, 1) < '0'
OR SUBSTR (TRIM(A1.CLOSE_TM), 7, 1) > '9'
OR SUBSTR (TRIM(A1.CLOSE_TM), 9, 1) < '0'
OR SUBSTR (TRIM(A1.CLOSE_TM), 9, 1) > '3'
OR SUBSTR (TRIM(A1.CLOSE_TM), 10, 1) < '0'
OR SUBSTR (TRIM(A1.CLOSE_TM), 10, 1) > '9'
OR SUBSTR (TRIM(A1.CLOSE_TM), 1, 4) = '0000'
OR SUBSTR (TRIM(A1.CLOSE_TM), 6, 2) = '00'
OR SUBSTR (TRIM(A1.CLOSE_TM), 9, 2) = '00'
OR SUBSTR (TRIM(A1.CLOSE_TM), 1, 1) = '0' THEN CAST(
CAST(
CAST('cDXtwdFyky' AS DATE FORMAT 'YYYYMMDD') AS DATE
) || ' 00:00:00' AS TIMESTAMP
)
ELSE (
CASE
WHEN (
CAST(SUBSTR (TRIM(A1.CLOSE_TM), 9, 2) AS INTEGER) < 29
AND SUBSTR (TRIM(A1.CLOSE_TM), 6, 2) = '02'
)
OR (
CAST(SUBSTR (TRIM(A1.CLOSE_TM), 9, 2) AS INTEGER) < 31
AND SUBSTR (TRIM(A1.CLOSE_TM), 6, 2) <> '02'
AND SUBSTR (TRIM(A1.CLOSE_TM), 6, 2) <= 12
)
OR (
CAST(SUBSTR (TRIM(A1.CLOSE_TM), 9, 2) AS INTEGER) = 31
AND SUBSTR (TRIM(A1.CLOSE_TM), 6, 2) IN ('01', '03', '05', '07', '08', '10', '12')
) THEN CAST(A1.CLOSE_TM AS TIMESTAMP)
WHEN SUBSTR (TRIM(A1.CLOSE_TM), 6, 2) || SUBSTR (TRIM(A1.CLOSE_TM), 9, 2) = '0229'
AND (
CAST(SUBSTR (TRIM(A1.CLOSE_TM), 1, 4) AS INTEGER) MOD 400 = 0
OR (
CAST(SUBSTR (TRIM(A1.CLOSE_TM), 1, 4) AS INTEGER) MOD 4 = 0
AND CAST(SUBSTR (TRIM(A1.CLOSE_TM), 1, 4) AS INTEGER) MOD 100 <> 0
)
) THEN CAST(A1.CLOSE_TM AS TIMESTAMP)
ELSE CAST(
CAST(
CAST('cDXtwdFyky' AS DATE FORMAT 'YYYYMMDD') AS DATE
) || ' 00:00:00' AS TIMESTAMP
)
END
)
END
) AS DATE FORMAT 'YYYYMMDD'
)
FROM
T01_PTY_SIGN_H_T1 A1
WHERE
A1.PARTY_SIGN_TYPE_CD = 'CD_021'
AND A1.ST_DT <= CAST('LDBCGtCIyo' AS DATE FORMAT 'YYYYMMDD')
AND A1.END_DT > CAST('LDBCGtCIyo' AS DATE FORMAT 'YYYYMMDD')
GROUP BY
1,
2,
3,
4
```

Software Information:

  • JSqlParser 4.8
  • Database Teradata

Tips:

Please write in English and avoid Screenshots (as we can't copy and paste content from it).
Try your example online with the latest JSQLParser and share the link in the error report.
Do provide Links or References to the specific Grammar and Syntax you are trying to use.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions