web-dev-qa-db-fra.com

Comment puis-je créer une fonction définie par l'utilisateur dans SQLite?

Je développe une application en Android et j'ai besoin de créer un udf dans sqlite. Est-il possible de le créer dans sqlite? Et si oui comment faire?

34
Mustafa Güven

SQLite ne prend pas en charge les fonctions définies par l'utilisateur comme Oracle ou MS SQL Server. Pour SQLite, vous devez créer une fonction de rappel en C/C++ et connecter la fonction à l'aide de l'appel sqlite3_create_function .

Malheureusement, l'API SQLite pour Android ne permet pas le sqlite3_create_function appeler directement via Java. Pour le faire fonctionner, vous devrez compiler le bibliothèque SQLite C avec le NDK .

Et si vous êtes toujours intéressé, lisez 2.3 Fonctions définies par l'utilisateur ...

Voici comment créer une fonction qui trouve le premier octet d'une chaîne.

static void firstchar(sqlite3_context *context, int argc, sqlite3_value **argv)
{
    if (argc == 1) {
        char *text = sqlite3_value_text(argv[0]);
        if (text && text[0]) {
          char result[2]; 
          result[0] = text[0]; result[1] = '\0';
          sqlite3_result_text(context, result, -1, SQLITE_TRANSIENT);
          return;
        }
    }
    sqlite3_result_null(context);
}

Attachez ensuite la fonction à la base de données.

sqlite3_create_function(db, "firstchar", 1, SQLITE_UTF8, NULL, &firstchar, NULL, NULL)

Enfin, utilisez la fonction dans une instruction sql.

SELECT firstchar(textfield) from table
70
tidwall

Non valide - voir commentaires

Cela devrait être possible avec SQLiteCustomFunction from Android SDK 17 qui vous fournit un rappel dans Java code.

Ajoutez avec la méthode addCustomFunction dans SQLiteDatabase .

Mais je dois dire que je n'en ai pas fait l'expérience.

0
Morten Holmgaard