#define SQL_TEXT Latin_Text
#include "sqltypes_td.h"
#define IsNull -1
#define IsNotNull 0
#define NUL '\0'
#define ASCII_ANYTYPES 2
/* This function returns the ASCII numeric value of the first character of the input string.
*/
void ascii(void * inputStr,
void * result,
int * inputStrIsNull,
int * resultIsNull,
char sqlstate[6],
SQL_TEXT extname[129],
SQL_TEXT specific_name[129],
SQL_TEXT error_message[257])
{
int numAnytypeParams;
int buffersize;
int returnValue;
/* Returns NULL given NULL */
if (*inputStrIsNull == IsNull)
{
*resultIsNull = IsNull;
return;
}
buffersize = ASCII_ANYTYPES * sizeof(anytype_param_info_t);
anytype_param_info_t * inputInfo = FNC_malloc(buffersize);
FNC_GetAnytypeParamInfo( buffersize, &numAnytypeParams,inputInfo);
if ( numAnytypeParams >= 2
&& inputInfo[0].paramIndex == 1
&& ( inputInfo[0].datatype == VARCHAR_DT
|| inputInfo[0].datatype == CHAR_DT)
)
{
/* If the input is latin. */
if(inputInfo[0].charset == LATIN_CT)
{
VARCHAR_LATIN * latinInputStr = (VARCHAR_LATIN *) inputStr;
/* If the string is empty */
if (*latinInputStr == NUL)
{
*resultIsNull = IsNull;
}
else
{
*resultIsNull = IsNotNull;
returnValue = (INTEGER)(latinInputStr[0]);
}
}
/* If the input is Unicode. */
else if(inputInfo[0].charset == UNICODE_CT)
{
VARCHAR_UNICODE * unicodeInputStr = (VARCHAR_UNICODE *) inputStr;
/* If the string is empty */
if (*unicodeInputStr == NUL)
{
*resultIsNull = IsNull;
}
else
{
*resultIsNull = IsNotNull;
returnValue = (INTEGER)(unicodeInputStr[0]);
}
}
/* Deal with the output. */
If (inputInfo[1].paramIndex == -1 && inputInfo[1].datatype == BYTEINT_DT)
{
* (BYTEINT *) result = (BYTEINT) returnValue;
}
else if ( inputInfo[1].paramIndex == -1
&& inputInfo[1].datatype == SMALLINT_DT)
{
* (SMALLINT *) result = (SMALLINT) returnValue;
}
else if ( inputInfo[1].paramIndex == -1
&& inputInfo[1].datatype == INTEGER_DT)
{
* (INTEGER *) result = returnValue;
}
else /* Error */
{
strcpy(sqlstate, "22023");
strcpy((char *) error_message, "Invalid result type.") ;
}
}
else /* Error */
{
strcpy(sqlstate, "22023");
strcpy((char *) error_message, "Invalid input type.") ;
}
/* Free memory */
FNC_free(inputInfo);
}