From a5da35091a84aedc2b172e8e54e0f0a0049f93d1 Mon Sep 17 00:00:00 2001 From: Murphy <96611012+murphyatwork@users.noreply.github.com> Date: Tue, 30 Sep 2025 18:37:56 +0800 Subject: [PATCH] [BugFix] fix jsonpath rewrite with wrong column type (#63690) --- .../sql/optimizer/rule/tree/JsonPathRewriteRule.java | 4 +++- .../com/starrocks/sql/plan/JsonPathRewriteTest.java | 10 +++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rule/tree/JsonPathRewriteRule.java b/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rule/tree/JsonPathRewriteRule.java index ccbe8da8078..c9df9804a14 100644 --- a/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rule/tree/JsonPathRewriteRule.java +++ b/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/rule/tree/JsonPathRewriteRule.java @@ -394,7 +394,9 @@ public class JsonPathRewriteRule extends TransformationRule { } private boolean isSupportedJsonFunction(CallOperator call) { - return SUPPORTED_JSON_FUNCTIONS.contains(call.getFnName()) && call.getArguments().size() == 2; + return SUPPORTED_JSON_FUNCTIONS.contains(call.getFnName()) + && call.getArguments().size() == 2 + && call.getChild(0).getType().equals(Type.JSON); } private ScalarOperator rewriteJsonFunction(CallOperator call, ScalarOperatorRewriteContext rewriteContext) { diff --git a/fe/fe-core/src/test/java/com/starrocks/sql/plan/JsonPathRewriteTest.java b/fe/fe-core/src/test/java/com/starrocks/sql/plan/JsonPathRewriteTest.java index 93e50bbf7ee..13f4d63eda5 100644 --- a/fe/fe-core/src/test/java/com/starrocks/sql/plan/JsonPathRewriteTest.java +++ b/fe/fe-core/src/test/java/com/starrocks/sql/plan/JsonPathRewriteTest.java @@ -28,9 +28,11 @@ public class JsonPathRewriteTest extends PlanTestBase { @BeforeAll public static void beforeAll() throws Exception { - starRocksAssert.withTable("create table extend_predicate( c1 int, c2 json ) properties('replication_num'='1')"); + starRocksAssert.withTable("create table extend_predicate( c1 int, c2 json) properties('replication_num'='1')"); starRocksAssert.withTable("create table extend_predicate2( c1 int, c2 json ) properties" + "('replication_num'='1')"); + starRocksAssert.withTable("create table extend_predicate3( c1 int, c2 string) " + + "properties('replication_num'='1')"); FeConstants.USE_MOCK_DICT_MANAGER = true; connectContext.getSessionVariable().setEnableLowCardinalityOptimize(true); @@ -212,6 +214,12 @@ public class JsonPathRewriteTest extends PlanTestBase { " Table: extend_predicate\n" + " : dict_merge_c2.f1\n", " ExtendedColumnAccessPath: [/c2(varchar)/f1(varchar)]\n" + ), + // [21] Test parameter type validation - get_json_string(string, string) should not be rewritten + Arguments.of( + "select get_json_string(c2, 'f1') from extend_predicate3", + "get_json_string(2: c2, 'f1')", + "" ) ); }