Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-7893

Debezium can't handle columns with # in its name

XMLWordPrintable

    • Low

      Bug report

      What Debezium connector do you use and what version?

      sqlserver-connector 2.6.1

      What behaviour do you expect?

      The connector correctly handles columns with # in the name.

      What behaviour do you see?

      It fails with the following exception:

      com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'ColumnCaptureInstanceNameName'.
              at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:259)
              at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1695)
              at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:648)
              at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:567)
              at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7675)
              at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:4137)
              at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:272)
              at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:246)
              at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:485)
              at io.debezium.jdbc.JdbcConnection.prepareQuery(JdbcConnection.java:593)
              at io.debezium.connector.sqlserver.SqlServerConnection.getChangesForTables(SqlServerConnection.java:385)
              at io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource.executeIteration(SqlServerStreamingChangeEventSource.java:233)
              at io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource.executeIteration(SqlServerStreamingChangeEventSource.java:65)
              at io.debezium.connector.sqlserver.SqlServerChangeEventSourceCoordinator.executeChangeEventSources(SqlServerChangeEventSourceCoordinator.java:117)
              at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:140)
              at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
              at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
              at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
              at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
              at java.base/java.lang.Thread.run(Thread.java:840)
      

      This happens because, currently, the connector uses # as a placeholder when building a query to fetch CDC data. If there is # in the column name, it gets replaced with the capture instance name.

      How to reproduce the issue using our tutorial deployment?

      Create a column with # in the name and run the connector against that database.

      Feature request or enhancement

      Implementation ideas (optional)

      https://github.com/debezium/debezium/pull/5576

              Unassigned Unassigned
              vramanenka@sugarcrm.com Vadzim Ramanenka (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: