Important: Please read the Qt Code of Conduct -

Using SQLite custom functions with Qt

  • Hi! I'm trying to create a custom function for a SQLite database I'm using with Qt. I found information on how to create the function and it seems to work correctly on a x86 system.

    Instead, it seems to be failing with a segfault on an ARM device. This is the code I wrote:

    @static bool createSQLiteFunctions(const QSqlDatabase& db)
    // Get handle to the driver and check it is both valid and refers to SQLite3.
    QVariant v = db.driver()->handle();
    if (!v.isValid() || qstrcmp(v.typeName(), "sqlite3*") != 0) {
    LOG_WARNING("Cannot get a sqlite3 handle to the driver.");
    return false;

    // Create a handler and attach functions.
    sqlite3* handler = static_cast<sqlite3*>(;
    if (!handler) {
    LOG_WARNING("Cannot get a sqlite3 handler.");
    return false;

    // Check validity of the state.
    if (!db.isValid()) {
    LOG_ERROR("Cannot create SQLite custom functions: db object is not valid.");
    return false;

    if (!db.isOpen()) {
    LOG_ERROR("Cannot create SQLite custom functions: db object is not open.");
    return false;

    if (sqlite3_create_function(handler, "_deleteFile", 1, SQLITE_ANY, 0, &_sqlite3DeleteFile, 0, 0))
    LOG_ERROR("Cannot create SQLite functions: sqlite3_create_function failed.");

    return true;

    The db object is instantiated as a member of another object, which is calling this function in the constructor, where the connection to the db is estabilished:

    @ ...
    // Create the connection to the database. The connection has to be different
    // for each thread requiring one.
    db = QSqlDatabase::addDatabase("QSQLITE", connectionName);

    // Setup the database to avoid lockings.

    if (! {
    LOG_ERROR("Failed to open the database.");
    // TODO: What to do in case of errors??

    // Create custom defined functions.
    if (!createSQLiteFunctions(db)) {
    LOG_ERROR("Failed to create custom functions.");
    // TODO: What to do in case of errors??

    It seems that no error log is printed and, but the sqlite3_create_function function gives a segfault. If I remove the call to createSQLiteFunctions everything works fine.

    I suspect this may be related to Any idea how I can solve this?

Log in to reply