Top.Mail.Ru
? ?

Круглый серфер

Дневник Аполлона Сферического


Предыдущий пост Редактировать запись Редактировать метки В избранное Поделиться Отслеживать Следующий пост
c++ реализация REGEXP для SQLite3 и std::
wingfoil
_dms


//-------------------------------------------------------------
void
sqlREGEXP(sqlite3_context* ctx, int argc, sqlite3_value** argv)
{
    assert(argc == 2);
    std::string pattern((const char*)sqlite3_value_text(argv[0]));
    std::string str((const char*)sqlite3_value_text(argv[1]));
    std::smatch match;
    sqlite3_result_int(ctx, std::regex_search(str, match, std::regex(pattern))? 1: 0);
}

//-------------------------------------------------------------
class SQLiteDB
{
...
private:
    sqlite3* m_db;
...
};

//-------------------------------------------------------------
void
SQLiteDB::open(const std::string& strDBName)
{
    if (sqlite3_open(strDBName.c_str(), &m_db) == SQLITE_OK)
    {
        if (sqlite3_create_function(m_db, "REGEXP", 2, SQLITE_UTF8, NULL, &sqlREGEXP, NULL, NULL) == SQLITE_OK)
        {
            SQLiteDB::debug_out("REGEXP created successfully.");
        }
    }
}