Valor de retorno genérico de UDF

Se você usar ANY para um tamanho de valor de retorno, a UDF deve calcular o tamanho do valor de retorno numérico ou de sequência substituindo o método calculateSize() para definir a operação de dimensionamento.

O método calculateSize() fornece um limite superior do tamanho do valor de retorno. Ele especifica a quantidade de memória que o sistema aloca para o resultado; no entanto, o comprimento do valor de retorno real ainda precisa ser configurado. O sistema Netezza Performance Server oferece vários métodos de dimensionamento que você pode usar para processar os tipos de dados numéricos e de cadeia de caracteres.

Segue um exemplo de um método calculateSize() para um tipo de dados de sequência:
virtual uint64 calculateSize() const 
{
    int len = 0;
    for (int i=0; i < numSizerArgs(); i++) //for each input argument
    {
        if (sizerArgType(i) == UDX_VARIABLE) 
        len += sizerStringArgSize(i); //add the input argument sizes
    }
    return sizerStringSizeValue(len); //let return value be the sum 
}
Segue um exemplo de um método calculateSize() para um tipo de dados numérico:
virtual uint64 calculateSize() const
{
    int prec = 0;
    int scale = 0;
    for (int i=0; i < numSizerArgs(); i++) //for each input argument
    {
        if (sizerArgType(i) == UDX_NUMERIC64) // if the argument is a 
                                              //numeric64 value
        {
            if (sizerNumericArgPrecision(i) > prec) //compute maximum 
                prec = sizerNumericArgPrecision(i); //precision and 
            if (sizerNumericArgScale(i) > scale)    //scale as "max"
                scale = sizerNumericArgScale(i);
        }
    }
    return sizerNumericSizeValue(prec, scale); //let return value 
                                       //precision and scale be "max"
}