summaryrefslogtreecommitdiffstats
path: root/src/plugins/sqldrivers/sqlite
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sqldrivers/sqlite')
-rw-r--r--src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
index 56eceeecbd..b42fd74b3e 100644
--- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
+++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
@@ -574,14 +574,17 @@ static void _q_regexp(sqlite3_context* context, int argc, sqlite3_value** argv)
reinterpret_cast<const char*>(sqlite3_value_text(argv[1])));
auto cache = static_cast<QCache<QString, QRegularExpression>*>(sqlite3_user_data(context));
- QRegularExpression *regexp = cache->object(pattern);
- if (!regexp) {
- regexp = new QRegularExpression(pattern, QRegularExpression::DontCaptureOption
- | QRegularExpression::OptimizeOnFirstUsageOption);
- cache->insert(pattern, regexp);
- }
+ auto regexp = cache->object(pattern);
+ const bool wasCached = regexp;
+
+ if (!wasCached)
+ regexp = new QRegularExpression(pattern, QRegularExpression::DontCaptureOption | QRegularExpression::OptimizeOnFirstUsageOption);
+
const bool found = subject.contains(*regexp);
+ if (!wasCached)
+ cache->insert(pattern, regexp);
+
sqlite3_result_int(context, int(found));
}