gtpc2mc0 | C/C++ Language Support User's Guide |
This function searches the specified collection for the specified key and, if found, replaces the associated element value with the new element value.
Format
#include <c$to2.h> long TO2_atKeyPut (const TO2_PID_PTR pid_ptr, TO2_ENV_PTR env_ptr, const void *key, const void *data, const long *dataLength, const long *updateSeqCtr);
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 <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 */ long objsizb; /* size of data */ long 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