dt-sql-parser icon indicating copy to clipboard operation
dt-sql-parser copied to clipboard

[Bug]: flink JSON_VALUE RETURNING 语法不支持

Open melin opened this issue 3 weeks ago • 1 comments

Version

master

Which SQL?

Flink

SQL content

SELECT 
    user_id,
    JSON_VALUE(event_data, '$.eventType' RETURNING STRING) AS event_type,
    JSON_VALUE(
        event_data, 
        '$.pageUrl' 
        NULL ON EMPTY 
        NULL ON ERROR
    ) AS page_url,
    JSON_VALUE(event_data, '$.productId' RETURNING STRING) AS product_id,
    JSON_VALUE(
        event_data, 
        '$.amount' 
        RETURNING DOUBLE
        NULL ON EMPTY 
        NULL ON ERROR
    ) AS amount,
    event_time
FROM user_behavior
WHERE JSON_VALUE(event_data, '$.eventType' RETURNING STRING) IS NOT NULL

JavaScript/TypeScript code


What happened?

io.github.melin.superior.common.antlr4.ParseException: no viable alternative at input 'SELECT \n user_id,\n JSON_VALUE(event_data, '$.eventType' RETURNING'(line 3, pos 41)

== SQL == SELECT user_id, JSON_VALUE(event_data, '$.eventType' RETURNING STRING) AS event_type, -----------------------------------------^^^ JSON_VALUE( event_data, '$.pageUrl' NULL ON EMPTY NULL ON ERROR ) AS page_url, JSON_VALUE(event_data, '$.productId' RETURNING STRING) AS product_id, JSON_VALUE( event_data, '$.amount' RETURNING DOUBLE NULL ON EMPTY NULL ON ERROR ) AS amount, event_time FROM user_behavior WHERE JSON_VALUE(event_data, '$.eventType' RETURNING STRING) IS NOT NULL

at io.github.melin.superior.common.antlr4.ParseException.withCommand(ParseException.java:54)
at io.github.melin.superior.parser.flink.FlinkSqlHelper.innerParseStatement(FlinkSqlHelper.kt:97)
at io.github.melin.superior.parser.flink.FlinkSqlHelper.parseMultiStatement(FlinkSqlHelper.kt:49)
at io.github.melin.superior.parser.flink.FlinkSqlHelper.parseStatement(FlinkSqlHelper.kt:37)
at io.github.melin.superior.parser.flink.FlinkSqlParserDdlTest.showDbTest(FlinkSqlParserDdlTest.kt:204)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

Disconnected from the target VM, address: '127.0.0.1:53692', transport: 'socket'

Process finished with exit code 255

Relevant log output


melin avatar Nov 29 '25 11:11 melin

@Cythia828 +1 @JackWang032

melin avatar Dec 01 '25 05:12 melin