From 2a3297c7269c9a3a9e6b4129c76366bac5c9d7cb Mon Sep 17 00:00:00 2001 From: Lorenz Haas Date: Sat, 19 Nov 2016 19:05:36 +0100 Subject: REGEXP for SQLite Since SQLite does not define a regexp function by default, provide a Qt based implementation which can be enabled using QSQLITE_ENABLE_REGEXP as an connect option. This way statements like SELECT * FROM table WHERE col REGEXP '^[a-d]'; work out of the box. [ChangeLog][QtSql] Add QSQLITE_ENABLE_REGEXP connect option for QSQLiteDriver. If set a Qt based regexp() implementation is provided allowing to use REGEXP in SQL statements. Task-number: QTBUG-18084 Change-Id: I7f0e926fe4c5d6baea509f75497f46a61ca86679 Reviewed-by: Milian Wolff Reviewed-by: Jesus Fernandez Reviewed-by: Sebastian Sauer Reviewed-by: Andy Shaw Reviewed-by: Frederik Gladhorn --- src/sql/doc/snippets/code/doc_src_sql-driver.cpp | 5 +++++ src/sql/doc/src/sql-driver.qdoc | 16 ++++++++++++++++ src/sql/kernel/qsqldatabase.cpp | 1 + 3 files changed, 22 insertions(+) (limited to 'src/sql') diff --git a/src/sql/doc/snippets/code/doc_src_sql-driver.cpp b/src/sql/doc/snippets/code/doc_src_sql-driver.cpp index f25ad4f2b0..7983386642 100644 --- a/src/sql/doc/snippets/code/doc_src_sql-driver.cpp +++ b/src/sql/doc/snippets/code/doc_src_sql-driver.cpp @@ -90,3 +90,8 @@ qDebug() << q.value(0); // outputs the first RETURN/OUT value QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QMYSQL //! [31] + + +//! [34] +column.contains(QRegularExpression("pattern")); +//! [34] diff --git a/src/sql/doc/src/sql-driver.qdoc b/src/sql/doc/src/sql-driver.qdoc index 364d733e92..57a53006c4 100644 --- a/src/sql/doc/src/sql-driver.qdoc +++ b/src/sql/doc/src/sql-driver.qdoc @@ -568,6 +568,22 @@ \snippet code/doc_src_sql-driver.qdoc 23 + \section3 Enable REGEXP operator + + SQLite comes with a REGEXP operation. However the needed implementation must + be provided by the user. For convenience a default implementation can be + enabled by \l{QSqlDatabase::setConnectOptions()} {setting the connect + option} \c{QSQLITE_ENABLE_REGEXP} before \l{QSqlDatabase::open()} {the + database connection is opened}. Then a SQL statement like "column REGEXP + 'pattern'" basically expands to the Qt code + + \snippet code/doc_src_sql-driver.cpp 34 + + For better performance the regular expressions are cached internally. By + default the cache size is 25, but it can be changed through the option's + value. For example passing "\c{QSQLITE_ENABLE_REGEXP=10}" reduces the + cache size to 10. + \section3 QSQLITE File Format Compatibility SQLite minor releases sometimes break file format forward compatibility. diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp index 0416215870..eb3a3c444d 100644 --- a/src/sql/kernel/qsqldatabase.cpp +++ b/src/sql/kernel/qsqldatabase.cpp @@ -1175,6 +1175,7 @@ QSqlRecord QSqlDatabase::record(const QString& tablename) const \li QSQLITE_OPEN_READONLY \li QSQLITE_OPEN_URI \li QSQLITE_ENABLE_SHARED_CACHE + \li QSQLITE_ENABLE_REGEXP \endlist \li -- cgit v1.2.3