DECOMPRESS_RECORD

Valid For

Extract and Replicat

Description

Use the DECOMPRESS_RECORD function when you want to retrieve or manipulate an entire update record with the GET_RECORD_BUFFER (see “GET_RECORD_BUFFER”) or SET_RECORD_BUFFER function (see) and the record is compressed. DECOMPRESS_RECORD makes compressed records easier to process and map by putting the record into its logical column layout. The columns that are present will be in the expected positions without the index and length indicators (see “Compressed Record Format”). The missing columns will be represented as zeroes. When used, DECOMPRESS_RECORD should be invoked before any manipulation occurs. After the user exit processing is completed, use the COMPRESS_RECORD function (see) to re-compress the record before returning it to the Oracle GoldenGate process.

This function is valid for processing UPDATE operations only. Deletes, inserts and updates appear in the buffer as full record images.

The content of the record buffer is not converted to or from the character set of the user exit. It is passed as-is.

Compressed Record Format

Compressed SQL updates have the following format:

<index> <length> <value> [<index> <length> <value> ][...]

where:

Syntax

#include "usrdecs.h"
short result_code;
compressed_rec_def compressed_rec;
ERCALLBACK (DECOMPRESS_RECORD, &compressed_rec, &result_code);

Buffer

typedef struct
{
char *compressed_rec;
long compressed_len;
char *decompressed_rec;
long decompressed_len;
short *columns_present;
short source_or_target;
char requesting_before_after_ind;
} compressed_rec_def;

Input

<compressed_rec>

A pointer to the record in compressed format. Use the GET_RECORD_BUFFER function to obtain this value (see “GET_RECORD_BUFFER”).

<compressed_len>

The length of the compressed record. Use the GET_RECORD_BUFFER (see “GET_RECORD_BUFFER”) or GET_RECORD_LENGTH (see) function to get this value.

<source_or_target>

One of the following to indicate whether the source or target record is being decompressed.

EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL

<requesting_before_after_ind>

Used as internal input. Does not need to be set. If set, it will be ignored.

Output

<decompressed_rec>

A pointer to the record returned in decompressed format. The record is assumed to be in the Oracle GoldenGate internal canonical format. The caller must ensure that the appropriate amount of memory is allocated to decompressed_rec.

<decompressed_len>

The returned length of the decompressed record.

<columns_present>

An array of values that indicate the columns present in the compressed record. For example, if the first, third and sixth columns exist in the compressed record, and the total number of columns in the table is seven, the array should contain:

1, 0, 1, 0, 0, 1, 0

This array helps mapping functions determine when and whether a compressed column should be mapped.

Return Values

EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_OK
EXIT_FN_RET_INVALID_PARAM