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