Search code examples
ibm-mqibm-integration-busextended-sql

How can I know when LASTMOVE in IIB will return true or false?


-- Shared row variable for caching config data. Declared at Global scope.
DECLARE S_ConfigSharedRow SHARED ROW;

CREATE COMPUTE MODULE TheFirstComputeNode
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
    CFGDATA_CACHE_LOCK: BEGIN ATOMIC
        -- If the configuration data is not available in the cache then load it from the CONFIG table
        DECLARE CfgDataRef REFERENCE TO S_ConfigSharedRow.CfgDataCache;
        IF NOT LASTMOVE(CfgDataRef) THEN
            -- Select all the relevant content from the actual database in one go.
            DECLARE DBResults ROW;
            DECLARE RetryCount INTEGER 5;
            SET DBResults.Row[] = PASSTHRU('SELECT * FROM CONFIG');

            -- Typically you would post process the content from the DB into a more amenable 
            -- structure but the following will get the data into the shared variable
            CREATE LASTCHILD OF S_ConfigSharedRow.CfgDataCache FROM DBResults;
        END IF;
    END CFGDATA_CACHE_LOCK;

    -- Config data is now available for use

    RETURN TRUE;
END;
END MODULE;

Hi guys, can I ask which is the scenario that LASTMOVE in this case return true, and which case is false. Thanks all.


Solution

  • My experience with LASTMOVE is that it can return NULL, so better only check for TRUE:

        DECLARE CfgDataRef REFERENCE TO S_ConfigSharedRow.CfgDataCache;
        IF LASTMOVE(CfgDataRef) THEN
            -- Nothing to do
        ELSE
            -- Select all the relevant content ...
        END IF;