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