/* Copyright (C) 2003 by NCR Corporation. All Rights Reserved. NCR CONFIDENTIAL AND TRADE SECRET */ /* TRANSLATE Syntax TRANSLATE(char, from, to) Purpose Returns char with all occurrences of each character in from replaced by its corresponding character in to, where char, from, and to are string arguments. Usage Notes Characters in char that are not in from are not replaced. The argument from can contain more characters than to. In this case, the extra characters at the end of from have no corresponding characters in to. If these extra characters appear in char, they are removed from the return value. You cannot use an empty string for to to remove from the return value all characters in from. TRANSLATE interprets the empty string as null, and if this function has a null argument, it returns null. Example SELECT TRANSLATE('2KRW229', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') "Licence" FROM DUAL; Returns the following result: Licence ------- 9XXX999 */ #define SQL_TEXT Latin_Text #include "sqltypes_td.h" #include #include #define MAX_STRING_LENGTH 256 #define IsNull -1 #define IsNotNull 0 #define NoSqlError "00000" void otranslate(VARCHAR_LATIN *inputStr, VARCHAR_LATIN *inputFrom, VARCHAR_LATIN *inputTo, VARCHAR_LATIN *result, int *inputStrIsNull, int *inputFromIsNull, int *inputToIsNull, int *resultIsNull, char sqlstate[6], SQL_TEXT extname[129], SQL_TEXT specific_name[129], SQL_TEXT error_message[257]) { int i, j, k, linputStr, linputFrom, linputTo; unsigned char tr[256] = "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017" "\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" "\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057" "\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077" "\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117" "\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137" "\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157" "\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177" "\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217" "\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237" "\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257" "\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277" "\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317" "\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337" "\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357" "\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"; if (*inputStrIsNull == IsNull || *inputFromIsNull == IsNull || *inputToIsNull == IsNull) { strcpy(sqlstate, "22004") ; strcpy((char *) error_message, "Null values not allowed.") ; *resultIsNull = IsNull; return; } /* Initiate return values */ strcpy(sqlstate, NoSqlError); strcpy((char *) error_message, " "); *resultIsNull = IsNotNull; *result = '\0'; /* Create Translation Table */ linputStr = strlen((const char *)inputStr); linputFrom = strlen((const char *)inputFrom); linputTo = strlen((const char *)inputTo); for (i=0; i