@johnpion

Как несколько раз использовать одну самописную функцию в запросе?

Вот код модуля для 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. Т.е. в вызове используется последнее значение. Где я не прав?
  • Вопрос задан
  • 2724 просмотра
Решения вопроса 1
@johnpion Автор вопроса
Как исправить?
char *result = "бла бла бла"
?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Samuel_Leonardo
кажется, вы не выделяете память для char *result;
Ответ написан
Комментировать
@jorikburlakov
Можно делать два запроса объединяя их Union
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы