Russian Qt Forum
Ноябрь 23, 2024, 15:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Sqlite и regexp  (Прочитано 4402 раз)
Setner
Гость
« : Ноябрь 19, 2012, 01:33 »

Здравствуйте.
Поддерживается ли на данный момент regexp в кютешном sqlite драйвере?
Пробую, что то никак.
Есть ли опыт у других?
Записан
mitrich
Гость
« Ответ #1 : Ноябрь 19, 2012, 14:26 »

Нет. В SQLite по умолчанию оператор REGEXP есть, но он ничего хорошего не делает, если не зарегистрировать собственную функцию regexp()
Цитировать
The REGEXP operator is a special syntax for the regexp() user function. No regexp() user function is defined by default and so use of the REGEXP operator will normally result in an error message. If a application-defined SQL function named "regexp" is added at run-time, that function will be called in order to implement the REGEXP operator.

Функция может выглядеть например так:
Код
C++ (Qt)
void sqlregexp(sqlite3_context* ctx, int argc, sqlite3_value** argv)
{
   QRegExp regex;
   QString arg0((const char*)sqlite3_value_text(argv[0]));
   QString arg1((const char*)sqlite3_value_text(argv[1]));
 
   regex.setPattern(arg0);
   regex.setCaseSensitivity(Qt::CaseInsensitive);
 
   if(arg1.contains(regex))
       sqlite3_result_int(ctx, 1);
   else
       sqlite3_result_int(ctx, 0);
}
 

Регистрируется так:
Код
C++ (Qt)
sqlite3_create_function(handle, "regexp", 2, SQLITE_UTF8, NULL, &sqlregexp, NULL, NULL);
 
Где handle - база данных SQLite (тип sqlite3 *) - значение, возвращаемое QSqlDriver::handle()

Наверное, наиболее правильным способом будет вставить реализацию этой функции (и её регистрацию) в драйвер SQLite, как например тут и пересобрать его.
Записан
Setner
Гость
« Ответ #2 : Ноябрь 20, 2012, 01:07 »

Попробую. Благодарю за содействие!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 20.