-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Labels
BugIncorrect or unexpected behaviorIncorrect or unexpected behaviorSQLIssues or changes relating to SQL executionIssues or changes relating to SQL executionexternal
Description
To reproduce
SELECT * FROM ( SELECT json_extract(msg, '$.') FROM "a-b-c")
LEFT JOIN (select 1) ON 1 = 1;Fails:
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 16
at io.questdb.std.ObjList.getQuick(ObjList.java:177)
at io.questdb.cairo.AbstractRecordMetadata.getColumnMetadata(AbstractRecordMetadata.java:63)
at io.questdb.cairo.AbstractRecordMetadata.getColumnType(AbstractRecordMetadata.java:73)
at io.questdb.griffin.SqlCodeGenerator.generateSelectChoose(SqlCodeGenerator.java:4668)
at io.questdb.griffin.SqlCodeGenerator.generateSelect(SqlCodeGenerator.java:4542)
at io.questdb.griffin.SqlCodeGenerator.generateQuery0(SqlCodeGenerator.java:4044)
at io.questdb.griffin.SqlCodeGenerator.generateQuery(SqlCodeGenerator.java:4032)
at io.questdb.griffin.SqlCodeGenerator.generate(SqlCodeGenerator.java:641)
Cause:
questdb/core/src/main/java/io/questdb/griffin/SqlCodeGenerator.java
Lines 4587 to 4600 in e88abf7
| for (int i = 0, n = columns.size(); i < n; i++) { | |
| QueryColumn queryColumn = columns.getQuick(i); | |
| CharSequence columnName = queryColumn.getAlias(); | |
| int index = metadata.getColumnIndexQuiet(queryColumn.getAst().token); | |
| assert index > -1 : "wtf? " + queryColumn.getAst().token; | |
| int updateColumnIndex = updateColumnNames.indexOf(columnName); | |
| int updateColumnType = updateColumnTypes.get(updateColumnIndex); | |
| if (updateColumnType != metadata.getColumnType(index)) { | |
| columnTypeMismatch = true; | |
| break; | |
| } | |
| } |
We should upgrade the assertion to a true error. In prod, it is an AssertionError, but in dev, you get the one I posted.
The optimiser generates a wild alias like this:
_xQdbA1."json_extract(msg, '$.')"
And the names don't line up any more.
Workaround.. alias the function
SELECT * FROM ( SELECT json_extract(msg, '$.') as id FROM "BINANCE-USDMF-L2")
LEFT JOIN (select 1) ON 1 = 1;QuestDB version:
QuestDB 9.2.0+
OS, in case of Docker specify Docker and the Host OS:
N/A
File System, in case of Docker specify Host File System:
N/A
Full Name:
Nick Woolmer
Affiliation:
QuestDB
Have you followed Linux, MacOs kernel configuration steps to increase Maximum open files and Maximum virtual memory areas limit?
- Yes, I have
Additional context
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
BugIncorrect or unexpected behaviorIncorrect or unexpected behaviorSQLIssues or changes relating to SQL executionIssues or changes relating to SQL executionexternal