Example #1
0
/**
 * adapted from reHelpers2.c
 * input
 *     typ: collection type
 *     inPtr: collection value
 *     inx: index of the element
 * output
 *     value: element value (new on heap)
 *     inx: index of the next element
 *     outtyp: the type of the element (new on heap)
 * return
 *     0
 * 	   NO_VALUES_FOUND
 *     USER_PARAM_TYPE_ERR
 */
Res* getValueFromCollection( char *typ, void *inPtr, int inx, Region *r ) {
    Res *res;
    int i, j;

    if ( !strcmp( typ, StrArray_MS_T ) ) {
        strArray_t *strA;
        /* ->size size of an element */
        /* ->len  length of the array */
        strA = ( strArray_t  * ) inPtr;
        if ( inx >= strA->len ) {
            return NULL;
        }
        res = newStringRes( r, strA->value + inx * strA->size );
        return res;
    }
    else if ( !strcmp( typ, IntArray_MS_T ) ) {
        res = newRes( r );
        res->exprType = newSimpType( T_INT, r );
        intArray_t *intA;
        intA = ( intArray_t * ) inPtr;
        if ( inx >= intA->len ) {
            return NULL;
        }
        RES_INT_VAL_LVAL( res ) = intA->value[inx];
        return res;
    }
    else if ( !strcmp( typ, GenQueryOut_MS_T ) ) {
        keyValPair_t *k; /* element value */
        genQueryOut_t *g = ( genQueryOut_t * ) inPtr; /* the result set */
        char *cname, *aval; /* key and value */
        sqlResult_t *v; /* a result row */
        if ( g->rowCnt == 0 || inx >= g->rowCnt ) {
            return NULL;
        }
        k = ( keyValPair_t * )malloc( sizeof( keyValPair_t ) );
        k->len = 0;
        k->keyWord = NULL;
        k->value = NULL;
        for ( i = 0; i < g->attriCnt; i++ ) {
            v = g->sqlResult + i;
            cname = ( char * ) getAttrNameFromAttrId( v->attriInx );
            aval = v->value + v->len * inx;
            j  = addKeyVal( k, cname, aval ); /* addKeyVal duplicates the strings */
            if ( j < 0 ) {
                return NULL;
            }
        }
        res = newUninterpretedRes( r, KeyValPair_MS_T, k, NULL );
        return res;
    }
    else if ( strcmp( typ, KeyValPair_MS_T ) == 0 ) {
        return newStringRes( r, ( ( keyValPair_t * ) inPtr )->keyWord[inx] );
    }
    else {
        return NULL;
    }
}
Example #2
0
File: rules.cpp Project: bpow/irods
execCmdOut_t *addCmdExecOutToEnv( Env *global, Region *r ) {
    execCmdOut_t *ruleExecOut = ( execCmdOut_t * )malloc( sizeof( execCmdOut_t ) );
    memset( ruleExecOut, 0, sizeof( execCmdOut_t ) );
    ruleExecOut->stdoutBuf.buf = strdup( "" );
    ruleExecOut->stdoutBuf.len = 0;
    ruleExecOut->stderrBuf.buf = strdup( "" );
    ruleExecOut->stderrBuf.len = 0;
    Res *execOutRes = newUninterpretedRes( r, ExecCmdOut_MS_T, ruleExecOut, NULL );
    insertIntoHashTable( global->current, "ruleExecOut", execOutRes );
    return ruleExecOut;

}
int getPtrLeafValue( Res **varValue, void *leaf, bytesBuf_t *buf, char *irodsType, Region *r ) {
    *varValue = newUninterpretedRes( r, irodsType, leaf, buf );
    return 0;
}