[ 
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)

Reply via email to