# Principles

The transformation module manipulates eight buffers which are described in the table below.

| Buffer | Content |
| --- | --- |
| I | Contains the record of the file (EXTRACT mode) or the journal (JOURNAL<br>mode). |
| B | Contains the image of the record before updating for a model in JOURNAL<br>mode, and only for an update operation. In the other cases, it contains only<br>binary zeros (x00H). |
| O | Contains the buffer of the data sent to the target. Its default structure<br>is that of buffer I. It can be partly or wholly redefined, including its length<br>(maximum 32KB). |
| F | This buffer contains the fields or the external file resulting from the<br>SELECT or READ instructions. It is only available when the transformation<br>includes a LOOKUP instruction on Windows NT server or a FILE declaration on<br><br>AS/400 IBMi.<br><br>For more details, see [Lookup](https://help.qlik.com/talend/r/en-US/7.3/change-data-capture-reference-guide/sql-call-non-as-400) and [File](https://help.qlik.com/talend/r/en-US/7.3/change-data-capture-reference-guide/file-declaration). |
| S | Contains the context data for both the journal sequence (for a model in the<br>JOURNAL mode) and the Talend Change Data Capture session. Its structure is fixed. |
| W | Temporary work buffer (local) whose data is reset to the binary zero (x00H)<br>for each record. |
| V | Temporary work buffer (global) whose data is kept for the entire duration<br>of a Talend Change Data Capture session. |
| X | Temporary work buffer (external) that behaves like the buffer V, but is<br>also read during start up and rewritten when stopped. AS/400 IBMi source: the<br>buffer is read and written from a data area in the DD\_USRDATA library. The data<br>area name is See\_cccddd (where ee is the environment ID, ccc is the target ID,<br>and ddd the distribution ID (model)).<br><br>Information noteWarning: The data area is not<br>automatically created.<br><br><br>Oracle, SQL Server, ODBC source: the buffer is<br>read and written from a file in the SQLServer or<br>Oracle or ODBC sub-directory<br>in the Talend Change Data Capture directory. The name is See\_cccddd@instance.dtrs<br>(where ee is the environment ID, ccc the target ID, ddd the distribution ID<br>(model), and instance is the name of the source database instance).<br><br>Information noteWarning: The file is not automatically created. |

In the target, the transformation module does not have access to the I and B buffers, because it is receiving the O and S buffers. Moreover, you cannot modify the structure of the O buffer anymore, you can only modify its content.

Information noteNote: Each buffer is limited to 32KB of data. A buffer that is not initialized is filled with binary zeros.

The transformation program works as a processing unit with the following characteristics:

## On the source

![](https://help.qlik.com/talend/en-US/change-data-capture-reference-guide/Resources/images/tcdc-principles-1.png)

The transformation module receives the contents of buffers I, B and S. It is used to store the data temporarily in buffers W, V, X, and loads buffer O.

The selection is made by branching to the \*SELECT (default), \*SKIP or \*ERROR tags.

Depending on the nature of the operation performed on input, the buffers contain the following:

*PT- Add*

| Buffer | Content |
| --- | --- |
| I | Record added |
| B | Binary zeros |

*UB- Image before the update*

| Buffer | Content |
| --- | --- |
| I | Record before the update |
| B | Binary zeros |

*UP- Image after the update*

| Buffer | Content |
| --- | --- |
| I | Record after the update |
| B | Record before the update |

*DL- Deletion*

| Buffer | Content |
| --- | --- |
| I | Record deleted |
| B | Binary zeros |

## On the target

![](https://help.qlik.com/talend/en-US/change-data-capture-reference-guide/Resources/images/tcdc-principles-2.png)

The transformation module receives the contents of buffers O and S.

It is used to store the data temporarily in buffers W, V, X, and to modify only the content -not the structure- of the buffer O.

The selection is made by branching to the \*SELECT (default), \*SKIP or \*ERROR tags.