confluentinc/ksql

Variable substitution doesn't work with field names in projection or where clause

Open

#8,250 创建于 2021年10月12日

在 GitHub 查看
 (12 评论) (0 反应) (1 负责人)Java (5,739 star) (1,048 fork)batch import
bugfix-it-weekgood first issuestreaming-enginevariable-substitution

描述

Describe the bug Variable substitution fails for field names in the query projection or where clause. According to example in docs here, it should work.

To Reproduce Version: 6.2.1

ksql> define colName1 = 'LEVEL';
ksql> select ${colName1} from ksql_processing_log emit changes;
Illegal argument at Line: 1, Col: 8. Got: 'LEVEL'
Statement: select ${colName1} from ksql_processing_log emit changes;
ksql> define colName1 = 'LEVEL';
ksql> select * from ksql_processing_log where ${colName1} = 'ERROR';
Illegal argument at Line: 1, Col: 41. Got: 'LEVEL'
Statement: select * from ksql_processing_log where ${colName1} = 'ERROR';

Expected behavior Query succeeds, substituting variable (colName1) value for field name.

Actual behaviour See above for error details.

Additional context Initial feedback from @spena:

Seems the parser is detecting the ${colName1} from the where clause as a variable literal and not a variable identifier, so the parsing fails because level is not a string literal

贡献者指南