Expressions containing string aggregation with group ordering are parsed incorrectly. Example:
statement = parse("SELECT LISTAGG(attr,', ') WITHIN GROUP(ORDER BY attr) as column FROM table")
print(statement[0].tokens)
results in:
[<DML 'SELECT' at 0x225D838FB80>,
<Whitespace ' ' at 0x225D83945E0>,
<Identifier 'LISTAG...' at 0x225D83BAF90>, # "LISTAGG(attr,', ') WITHIN"
<Whitespace ' ' at 0x225D8385460>,
<Identifier 'GROUP(...' at 0x225D83BAC80>, # "GROUP(ORDER BY attr) as column"
<Whitespace ' ' at 0x225D83A6DC0>,
<Keyword 'FROM' at 0x225D83A6E20>,
<Whitespace ' ' at 0x225D83A6E80>,
<Keyword 'table' at 0x225D83A6EE0>]
I.e., according to sqlparse a table with two columns is to be returned by this SQL query:
LISTAGG(attr,', '), alias: WITHIN:
[<Function 'LISTAG...' at 0x1FA46528200>,
<Whitespace ' ' at 0x1FA464F9BE0>,
<Identifier 'WITHIN' at 0x1FA46528970>]
GROUP(ORDER BY attr), alias: column:
[<Function 'GROUP(...' at 0x1FA46528890>,
<Whitespace ' ' at 0x1FA46517BE0>,
<Keyword 'as' at 0x1FA46517C40>,
<Whitespace ' ' at 0x1FA46517CA0>,
<Keyword 'column' at 0x1FA46517D00>]
However, this is not the case. The query returns a single column (LISTAGG(attr,', ') WITHIN GROUP(ORDER BY attr), alias: column).
Expressions containing string aggregation with group ordering are parsed incorrectly. Example:
results in:
I.e., according to sqlparse a table with two columns is to be returned by this SQL query:
LISTAGG(attr,', ')
, alias:WITHIN
:GROUP(ORDER BY attr)
, alias:column
:However, this is not the case. The query returns a single column (
LISTAGG(attr,', ') WITHIN GROUP(ORDER BY attr)
, alias:column
).