TO2_atKeyPut: Update the specified element using a key
This function searches the specified collection for the specified key and, if found, replaces the associated element value with the new element value.
Note: This function does not
support all collections. See Table 1 for
collections that are supported for this function.
Format
#include <tpf/c_to2.h>
int TO2_atKeyPut (const TO2_PID_PTR pid_ptr,
TO2_ENV_PTR env_ptr,
const void *key,
const void *data,
const int *dataLength,
const int *updateSeqCtr); - pid_ptr
- The pointer to the persistent identifier (PID) assigned to the collection.
- env_ptr
- The pointer to the environment as returned by the TO2_createEnv function.
- key
- The pointer to the value that will be used as the key to locate the specific entry. The length of the key is assumed to be equal to the key length value specified when the collection was created.
- data
- The pointer to the element that will be stored in the specified entry.
- dataLength
- The pointer to an area where the length of the element will be stored.
- updateSeqCtr
- The pointer to an area where the update sequence counter from a TO2_atKey request has been stored. If this sequence counter value is not equal to the current update sequence counter value of the collection, the TO2_atKeyPut request will not be processed and an error will be returned.
Normal return
The normal return is a positive value.
Error return
An error return is indicated by a zero. When zero is returned, use the TO2_getErrorCode function to determine the specific error code. For more information, see Error handling.
The following error codes are
common for this function:
- TO2_ERROR_DATA_LGH
- TO2_ERROR_ENV
- TO2_ERROR_LOCATOR_NOT_FOUND
- TO2_ERROR_METHOD
- TO2_ERROR_NOT_INIT
- TO2_ERROR_PID
- TO2_ERROR_SEQCTR
- TO2_ERROR_UPDATE_NOT_ALLOWED
- TO2_ERROR_ZERO_PID
Programming considerations
A commit scope will be created for the TO2_atKeyPut request. If the request is successful, the scope will be committed. If an error occurs while processing the TO2_atKeyPut request, the scope will be rolled back.
Examples
The following example updates
the entry in a given collection at the specified key.
#include <tpf/c_to2.h> /* Needed for TO2 API functions */
#include <stdio.h> /* APIs for standard I/O functions */
#include <stdlib.h> /* APIs for standard library functions */
TO2_PID collect; /* must set to existing collection's PID */
TO2_BUF_PTR elem_ptr; /* will hold element from TO2atKey */
TO2_ENV_PTR env_ptr; /* Pointer to the TO2 environment */
char keya[] = "KeyA"; /* key to search for */
char objectb[] = "ObjectB"; /* data */
int objsizb; /* size of data */
int keylength;
⋮
/*******************************************************************************/
/* First attempt to read item at keya to get sequence counter */
/*******************************************************************************/
keylength = sizeof(keya);
if ((elem_ptr = TO2_atKey(&collect, env_ptr, keya, &keylength)) == TO2_ERROR)
{
printf("TO2_atKey failed!\n");
process_error(env_ptr);
return;
}
/******************************************************************************/
/* Replace data at keya with objectb */
/******************************************************************************/
objsizb = sizeof(objectb);
if (TO2_atKeyPut(&collect, env_ptr, keya, objectb, &objsizb,
&(elem_ptr->updateSeqNbr)) == TO2_ERROR)
{
printf("TO2_atKeyPut failed!\n");
process_error(env_ptr);
}
else
{
printf("Data at %s has been changed to %s.\n", keya, objectb);
printf("TO2_atKeyPut is successful!\n");
}Related information
- TO2_atCursor: Return the element pointed to by the cursor
- TO2_atKey: Return the specified element by key
- TO2_atKeyWithBuffer: Return the specified element
- TO2_atNewKeyPut: Add a new key and element.
See z/TPF collection support: non-cursor overview for more information about this function and z/TPF C/C++ language support.