[ https://issues.apache.org/jira/browse/FLINK-34146?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martijn Visser updated FLINK-34146: ----------------------------------- Component/s: (was: Table SQL / JDBC) > JDBC lookup joins fail with RDB column names containing colons > -------------------------------------------------------------- > > Key: FLINK-34146 > URL: https://issues.apache.org/jira/browse/FLINK-34146 > Project: Flink > Issue Type: Bug > Components: Connectors / JDBC > Affects Versions: 1.18.1 > Reporter: david radley > Priority: Major > > [https://github.com/apache/flink-connector-jdbc/pull/79] adds filter support > for lookup joins. This was implemented using FieldNamedPreparedStatements in > line with the way that the join key was implemented. The > [FieldNamedPreparedStatementImpl > logic|https://github.com/apache/flink-connector-jdbc/blob/e3dd84160cd665ae17672da8b6e742e61a72a32d/flink-connector-jdbc/src/main/java/org/apache/flink/connector/jdbc/statement/FieldNamedPreparedStatementImpl.java#L221] > explicitly tests for the colon key and can incorrectly pickup column names. > So JDBC lookup joins fail with RDB column names containing colons when used > in filters and lookup keys. > It looks like we have used the approach from > [https://stackoverflow.com/questions/2309970/named-parameters-in-jdbc]. It > says {{Please note that the above simple example does not handle using named > parameter twice. Nor does it handle using the : sign inside quotes.}} It > looks like we could play with some Regex Patterns to see if we can get one > that works well for us. > > A junit that shows the issue can be added to > FieldNamedPreparedStatementImplTest > > ... > private final String[] fieldNames2 = > new String[] \{"id?:", "name:?", "email", "ts", "field1", "field_2", > "__field_3__"}; > private final String[] keyFields2 = new String[] \{"id?:", "__field_3__"}; > ... > @Test > void testSelectStatementWithWeirdCharacters() { > String selectStmt = dialect.getSelectFromStatement(tableName, fieldNames2, > keyFields2); > assertThat(selectStmt) > .isEqualTo( > "SELECT `id?:`, `name:?`, `email`, `ts`, `field1`, `field_2`, `__field_3__` > FROM `tbl` " > + "WHERE `id?:` = :id?: AND `__field_3__` = :__field_3__"); > NamedStatementMatcher.parsedSql( > "SELECT `id?:`, `name:?`, `email`, `ts`, `field1`, `field_2`, `__field_3__` > FROM `tbl` " > + "WHERE `id?:` = ? AND `__field_3__` = ?") > .parameter("id", singletonList(1)) > .parameter("__field_3__", singletonList(2)) > .matches(selectStmt); > } -- This message was sent by Atlassian Jira (v8.20.10#820010)