void ViewFieldStringTransformer::transform(unsigned & lenTarget, char * & target, unsigned lenSource, const char * source) { unsigned lenStringSrc; unsigned lenStringTarget; rtlDataAttr stringSrc; rtlDataAttr stringTarget; rtlUtf8ToStrX(lenStringSrc, stringSrc.refstr(), lenSource, source); (*function)(lenStringTarget, stringTarget.refstr(), lenStringSrc, stringSrc.getstr()); rtlStrToUtf8X(lenTarget, target, lenStringTarget, stringTarget.getstr()); }
void CouchbaseEmbedFunctionContext::getStringResult(size32_t &chars, char * &result) { auto value = nextResultScalar(); if (value && *value) { unsigned numchars = rtlUtf8Length(strlen(value), value); rtlUtf8ToStrX(chars, result, numchars, value); } NullFieldProcessor p(NULL); rtlStrToStrX(chars, result, p.resultChars, p.stringResult); }
void CouchbaseRowBuilder::getStringResult(const RtlFieldInfo *field, size32_t &chars, char * &result) { const char * value = nextField(field); if (!value || !*value) { NullFieldProcessor p(field); rtlStrToStrX(chars, result, p.resultChars, p.stringResult); return; } unsigned numchars = rtlUtf8Length(strlen(value), value); // MORE - is it a good assumption that it is utf8 ? Depends how the database is configured I think rtlUtf8ToStrX(chars, result, numchars, value); return; }
static void getStringResult(const RtlFieldInfo *field, sqlite3_value *val, size32_t &chars, char * &result) { assertex(val); if (isNull(val)) { NullFieldProcessor p(field); rtlStrToStrX(chars, result, p.resultChars, p.stringResult); return; } if (sqlite3_value_type(val) != SQLITE_TEXT) typeError("string", field); const char *text = (const char *) sqlite3_value_text(val); int bytes = sqlite3_value_bytes(val); unsigned numchars = rtlUtf8Length(bytes, text); rtlUtf8ToStrX(chars, result, numchars, text); }
static void getStringResult(const RtlFieldInfo *field, const MYSQL_BIND &bound, size32_t &chars, char * &result) { if (*bound.is_null) { NullFieldProcessor p(field); rtlStrToStrX(chars, result, p.resultChars, p.stringResult); return; } if (isDateTime(bound.buffer_type)) { getDateTimeText(bound, chars, result); return; } if (!isString(bound.buffer_type)) typeError("string", field); const char *text = (const char *) bound.buffer; unsigned long bytes = *bound.length; unsigned numchars = rtlUtf8Length(bytes, text); // MORE - is it a good assumption that it is utf8 ? Depends how the database is configured I think rtlUtf8ToStrX(chars, result, numchars, text); }