Вот код модуля для sqlite3:
#include "sqlite3ext.h"
#include <stdlib.h>
#include <stdio.h>
SQLITE_EXTENSION_INIT1
static void moneyFunc(
sqlite3_context *context,
int argc,
sqlite3_value **argv
){
char *result;
int sum = sqlite3_value_int(argv[0]);
int full = sum / 100;
int dec = sum % 100;
if (dec == 0){
snprintf(result, 8, "%d,00", full);
} else if (dec > 0 && dec < 10){
snprintf(result, 8, "%d,0%d", full, dec);
} else if (dec >= 10 && dec <= 99){
snprintf(result, 8, "%d,%d", full, dec);
} else return;
sqlite3_result_text(context, result, 8, 0);
}
int sqlite3_extension_init(
sqlite3 *db,
char **pzErrMsg,
const sqlite3_api_routines *pApi
){
SQLITE_EXTENSION_INIT2(pApi)
sqlite3_create_function(db, "money", 1, SQLITE_ANY, 0, moneyFunc, 0, 0);
return 0;
}
Запрос вида
SELECT money(100)
возвращает 1,00. Всё ок, НО! Запрос вида
SELECT money(100), money(350)
Выдает 3,50 | 3,50 вместо 1,00 и 3,50. Т.е. в вызове используется последнее значение. Где я не прав?