Use my_toupper function to convert an arbitrary size input string to upper case.
my_toupper function takes a CHAR(x) column, where x is the maximum length of the characters in each cell of the column, and converts all alphabetical characters to uppercase.
#include "extfnapiv3.h"
#include <stdlib.h>
#include <ctype.h>
// A simple deterministic scalar UDF that
// takes an arbitrary size input string
// and converts it to upper case.
//
// Corresponding SQL declaration:
//
// CREATE FUNCTION my_toupper(IN arg1 varchar(32767))
// RETURNS varchar(32767)
// DETERMINISTIC
// IGNORE NULL VALUES
// EXTERNAL NAME 'my_toupper@libudfex'
//
#if defined __cplusplus
extern "C" {
#endif
static void my_toupper_evaluate(a_v3_extfn_scalar_context *cntxt,
void *arg_handle)
{
an_extfn_value arg;
an_extfn_value outval;
char c,uc;
a_sql_int32 len,offset;
// Get input string
(void) cntxt->get_value( arg_handle, 1, &arg );
if (arg.data == NULL)
{
return;
}
c = *(char *)arg.data;
len = arg.len.total_len;
for (offset = 0; offset < len; offset++)
{
uc = toupper(c);
outval.type = DT_VARCHAR;
outval.piece_len = 1;
outval.data = &uc;
cntxt->set_value( arg_handle, &outval, offset);
(void) cntxt->get_piece( arg_handle, 1, &arg, offset + 1);
c = *(char *)arg.data;
}
}
static a_v3_extfn_scalar my_toupper_descriptor = {
0,
0,
&my_toupper_evaluate,
0, // Reserved - initialize to NULL
0, // Reserved - initialize to NULL
0, // Reserved - initialize to NULL
0, // Reserved - initialize to NULL
0, // Reserved - initialize to NULL
NULL // _for_server_internal_use
};
a_v3_extfn_scalar *my_toupper()
{
return &my_toupper_descriptor;
}
#if defined __cplusplus
}
#endif