Thanks for raising it. It seems a bug that introduced by this pr [1]. I have created [FLINK-29651] to trace it.
[1] https://github.com/apache/flink/pull/19001 <https://github.com/apache/flink/pull/19001> [2] https://issues.apache.org/jira/browse/FLINK-26520 <https://issues.apache.org/jira/browse/FLINK-26520> Best regards, Yuxia > 2022年10月14日 下午9:19,PACE, JAMES <jp4...@att.com> 写道: > > We’ve noticed the following difference in sql when upgrading from flink > 1.14.5 to 1.15.2 around characters that are escaped in an sql statement: > > This statement: > tableEnvironment.executeSql("select * from testTable WHERE lower(field1) > LIKE 'b\"cd\"e%'"); > produces a runtime error in flink 1.15.2, but executes properly in flink > 1.14.5 > > This can be worked around by escaping the backslash, changing the statement > to: > tableEnvironment.executeSql("select * from testTable WHERE lower(field1) > LIKE 'b\\\"cd\\\"e%'"); > > This code illustrates the issue: > > import org.apache.flink.streaming.api.datastream.DataStream; > import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; > import org.apache.flink.table.api.Schema; > import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; > > public class TestCase3 { > public static void main(String[] args) throws Exception { > final StreamExecutionEnvironment env = > StreamExecutionEnvironment.getExecutionEnvironment(); > env.setParallelism(1); > > TestData testData = new TestData(); > testData.setField1("b\"cd\"e"); > DataStream<TestData> stream = env.fromElements(testData); > stream.print(); > final StreamTableEnvironment tableEnvironment = > StreamTableEnvironment.create(env); > tableEnvironment.createTemporaryView("testTable", stream, > Schema.newBuilder().build()); > > // Works with Flink 1.14.x, flink runtime errors in 1.15.2. > Uncomment to see runtime trace > //tableEnvironment.executeSql("select *, '1' as run from testTable > WHERE lower(field1) LIKE 'b\"cd\"e%'").print(); > // Works with 1.15.2 > tableEnvironment.executeSql("select * from testTable WHERE > lower(field1) LIKE 'b\\\"cd\\\"e%'").print(); > > env.execute("TestCase"); > } > > public static class TestData { > private String field1; > > public String getField1() { return field1; } > public void setField1(String field1) { this.field1 = field1; } > } > } > > Thanks > Jim