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

Reply via email to