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')", + "" ) ); }