aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2021-05-07 09:19:39 +0200
committerEike Ziller <eike.ziller@qt.io>2021-05-07 09:07:40 +0000
commitbf5b1d714c6eeb9a82fbf046ae18c1e63cfe6a20 (patch)
treeb8eb5867c9b690fa1d92e6285f6fc5c354e41faf
parent635993fbdcda6b2c9711b3f74511e8fd94cb07f3 (diff)
Revert "Revert "Merge remote-tracking branch 'origin/4.15'""
This reverts commit f0a86d45104f585b7aeef07fcc68cea24061aedb. Reverting a merge doesn't "undo" it - the changes would be lost forever even with subsequent merges. So we need to revert the revert to get the changes. Change-Id: I65928f876f4dc886561bed17c4b2aa42b388c1e3 Reviewed-by: Marco Bubke <marco.bubke@qt.io>
-rw-r--r--qbs/modules/sqlite_sources/sqlite-sources.qbs11
-rw-r--r--share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp23
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/RegExpValidator.qml6
-rw-r--r--share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml10
-rw-r--r--src/libs/3rdparty/sqlite/config.h84
-rw-r--r--src/libs/3rdparty/sqlite/sqlite.h29
-rw-r--r--src/libs/3rdparty/sqlite/sqlite.pri6
-rw-r--r--src/libs/qmljs/qmljscheck.cpp31
-rw-r--r--src/libs/qmljs/qmljscheck.h3
-rw-r--r--src/libs/sqlite/CMakeLists.txt22
-rw-r--r--src/libs/sqlite/createtablesqlstatementbuilder.cpp4
-rw-r--r--src/libs/sqlite/sqlite-lib.pri13
-rw-r--r--src/libs/sqlite/sqlitebasestatement.cpp2
-rw-r--r--src/libs/sqlite/sqlitebasestatement.h230
-rw-r--r--src/libs/sqlite/sqlitecolumn.h2
-rw-r--r--src/libs/sqlite/sqlitedatabasebackend.cpp2
-rw-r--r--src/libs/sqlite/sqliteglobal.h2
-rw-r--r--src/libs/sqlite/sqlitelibraryinitializer.cpp47
-rw-r--r--src/libs/sqlite/sqlitelibraryinitializer.h42
-rw-r--r--src/libs/sqlite/sqlitesessionchangeset.cpp2
-rw-r--r--src/libs/sqlite/sqlitesessions.cpp2
-rw-r--r--src/libs/sqlite/sqlitetable.h2
-rw-r--r--src/libs/sqlite/sqlstatementbuilder.cpp18
-rw-r--r--src/plugins/projectexplorer/project.cpp18
-rw-r--r--src/plugins/projectexplorer/project.h3
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp24
-rw-r--r--src/plugins/qmldesigner/designercore/include/propertycontainer.h4
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnode.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/propertycontainer.cpp32
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp19
-rw-r--r--src/plugins/qmlpreview/qmldebugtranslationclient.cpp2
-rw-r--r--src/plugins/texteditor/codeassist/codeassistant.cpp2
-rw-r--r--src/plugins/texteditor/codeassist/functionhintproposalwidget.cpp7
-rw-r--r--src/plugins/texteditor/codeassist/functionhintproposalwidget.h2
-rw-r--r--src/plugins/texteditor/codeassist/iassistproposalwidget.h2
-rw-r--r--tests/unit/unittest/CMakeLists.txt8
-rw-r--r--tests/unit/unittest/gtest-creator-printing.cpp2
-rw-r--r--tests/unit/unittest/sqlitedatabasebackend-test.cpp2
-rw-r--r--tests/unit/unittest/sqlitetable-test.cpp10
-rw-r--r--tests/unit/unittest/sqlstatementbuilder-test.cpp10
-rw-r--r--tests/unit/unittest/unittest.pro3
-rw-r--r--tests/unit/unittest/unittests-main.cpp3
42 files changed, 414 insertions, 334 deletions
diff --git a/qbs/modules/sqlite_sources/sqlite-sources.qbs b/qbs/modules/sqlite_sources/sqlite-sources.qbs
index 559c3ec865..ea80e58b1b 100644
--- a/qbs/modules/sqlite_sources/sqlite-sources.qbs
+++ b/qbs/modules/sqlite_sources/sqlite-sources.qbs
@@ -9,16 +9,7 @@ Module {
Depends { name: "cpp" }
cpp.defines: [
- "SQLITE_THREADSAFE=2", "SQLITE_ENABLE_FTS5", "SQLITE_ENABLE_UNLOCK_NOTIFY",
- "SQLITE_ENABLE_JSON1", "SQLITE_DEFAULT_FOREIGN_KEYS=1", "SQLITE_TEMP_STORE=2",
- "SQLITE_DEFAULT_WAL_SYNCHRONOUS=1", "SQLITE_MAX_WORKER_THREADS", "SQLITE_DEFAULT_MEMSTATUS=0",
- "SQLITE_OMIT_DEPRECATED", "SQLITE_OMIT_DECLTYPE",
- "SQLITE_MAX_EXPR_DEPTH=0", "SQLITE_OMIT_SHARED_CACHE", "SQLITE_USE_ALLOCA",
- "SQLITE_ENABLE_MEMORY_MANAGEMENT", "SQLITE_ENABLE_NULL_TRIM", "SQLITE_OMIT_EXPLAIN",
- "SQLITE_OMIT_LOAD_EXTENSION", "SQLITE_OMIT_UTF16", "SQLITE_DQS=0",
- "SQLITE_ENABLE_STAT4", "HAVE_ISNAN", "HAVE_FDATASYNC", "HAVE_MALLOC_USABLE_SIZE",
- "SQLITE_DEFAULT_MMAP_SIZE=268435456", "SQLITE_CORE", "SQLITE_ENABLE_SESSION", "SQLITE_ENABLE_PREUPDATE_HOOK",
- "SQLITE_LIKE_DOESNT_MATCH_BLOBS",
+ "_HAVE_SQLITE_CONFIG_H", "SQLITE_CORE"
].concat(buildSharedLib ? "BUILD_SQLITE_LIBRARY" : "BUILD_SQLITE_STATIC_LIBRARY")
cpp.dynamicLibraries: base.concat((qbs.targetOS.contains("unix") && !qbs.targetOS.contains("bsd"))
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp
index 30aec5b0c9..51b265a593 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp
@@ -23,24 +23,25 @@
**
****************************************************************************/
-#include <QDebug>
+#include "iconrenderer/iconrenderer.h"
+#include "import3d/import3d.h"
+
+#include <qt5nodeinstanceclientproxy.h>
+#ifdef MULTILANGUAGE_TRANSLATIONPROVIDER
+#include <sqlitelibraryinitializer.h>
+#endif
+#include <QQmlComponent>
+#include <QQmlEngine>
+#include <QDebug>
#include <QApplication>
#include <QStringList>
#include <QFileInfo>
#include <iostream>
-
#include <stdio.h>
#include <stdlib.h>
-#include "iconrenderer/iconrenderer.h"
-#include "import3d/import3d.h"
-#include <qt5nodeinstanceclientproxy.h>
-
-#include <QQmlComponent>
-#include <QQmlEngine>
-
#ifdef ENABLE_QT_BREAKPAD
#include <qtsystemexceptionhandler.h>
#endif
@@ -274,6 +275,10 @@ int main(int argc, char *argv[])
&& qEnvironmentVariableIsSet("QT_QUICK_CONTROLS_STYLE")
&& qgetenv("QT_QUICK_CONTROLS_STYLE") != "Desktop";
+#ifdef MULTILANGUAGE_TRANSLATIONPROVIDER
+ Sqlite::LibraryInitializer::initialize();
+#endif
+
if (useGuiApplication) {
QGuiApplication application(argc, argv);
return internalMain(&application);
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/RegExpValidator.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/RegExpValidator.qml
new file mode 100644
index 0000000000..f9ace424d9
--- /dev/null
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/RegExpValidator.qml
@@ -0,0 +1,6 @@
+import QtQuick 2.15
+
+RegularExpressionValidator {
+ id: root
+ property alias regExp: root.regularExpression
+}
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
index 54bbe34362..19e319be32 100644
--- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
+++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/InternalConstants.qml
@@ -28,10 +28,8 @@ import QtQuick 2.10
QtObject {
readonly property int width: 1920
readonly property int height: 1080
- readonly property FontLoader mySystemFont: FontLoader {
- name: "Arial"
- }
- readonly property FontLoader controlIcons: FontLoader {
+
+ property FontLoader controlIcons: FontLoader {
source: "icons.ttf"
}
@@ -150,12 +148,12 @@ QtObject {
})
readonly property font font: Qt.font({
- "family": mySystemFont.name,
+ "family": "Arial",
"pointSize": Qt.application.font.pixelSize
})
readonly property font largeFont: Qt.font({
- "family": mySystemFont.name,
+ "family": "Arial",
"pointSize": Qt.application.font.pixelSize * 1.6
})
}
diff --git a/src/libs/3rdparty/sqlite/config.h b/src/libs/3rdparty/sqlite/config.h
new file mode 100644
index 0000000000..19757d3f8e
--- /dev/null
+++ b/src/libs/3rdparty/sqlite/config.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <string.h>
+
+#if __has_include(<unistd.h>)
+#include <unistd.h>
+#endif
+
+#if __has_include(<utime.h>)
+#define HAVE_UTIME 1
+#endif
+
+#if (_XOPEN_SOURCE >= 500) && !(_POSIX_C_SOURCE >= 200809L) || _DEFAULT_SOURCE || _BSD_SOURCE
+#define HAVE_USLEEP 1
+#endif
+
+#ifdef _GNU_SOURCE
+#define HAVE_STRCHRNUL 1
+#endif
+
+#if _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500
+#define HAVE_FDATASYNC 1
+#endif
+
+#if _POSIX_C_SOURCE >= 1 || _BSD_SOURCE
+#define HAVE_LOCALTIME_R 1
+#else
+#define HAVE_LOCALTIME_S 1
+#endif
+
+#define HAVE_MALLOC_USABLE_SIZE 1
+#define HAVE_ISNAN 1
+
+#define SQLITE_THREADSAFE 2
+#define SQLITE_ENABLE_FTS5 1
+#define SQLITE_ENABLE_UNLOCK_NOTIFY 1
+#define SQLITE_ENABLE_JSON1 1
+#define SQLITE_DEFAULT_FOREIGN_KEYS 1
+#define SQLITE_TEMP_STORE 2
+#define SQLITE_DEFAULT_WAL_SYNCHRONOUS 1
+#define SQLITE_MAX_WORKER_THREADS 1
+#define SQLITE_DEFAULT_MEMSTATUS 0
+#define SQLITE_OMIT_DEPRECATED 1
+#define SQLITE_OMIT_DECLTYPE 1
+#define SQLITE_MAX_EXPR_DEPTH 0
+#define SQLITE_OMIT_SHARED_CACHE 1
+#define SQLITE_USE_ALLOCA 1
+#define SQLITE_ENABLE_MEMORY_MANAGEMENT 1
+#define SQLITE_ENABLE_NULL_TRIM 1
+#define SQLITE_OMIT_EXPLAIN 1
+#define SQLITE_OMIT_LOAD_EXTENSION 1
+#define SQLITE_OMIT_UTF16 1
+#define SQLITE_DQS 0
+#define SQLITE_ENABLE_STAT4 1
+#define SQLITE_DEFAULT_MMAP_SIZE 268435456
+#define SQLITE_ENABLE_SESSION 1
+#define SQLITE_ENABLE_PREUPDATE_HOOK 1
+#define SQLITE_LIKE_DOESNT_MATCH_BLOBS 1
+#define SQLITE_OMIT_AUTOINIT 1
diff --git a/src/libs/3rdparty/sqlite/sqlite.h b/src/libs/3rdparty/sqlite/sqlite.h
new file mode 100644
index 0000000000..ba06815b4d
--- /dev/null
+++ b/src/libs/3rdparty/sqlite/sqlite.h
@@ -0,0 +1,29 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "config.h"
+#include "sqlite3ext.h"
diff --git a/src/libs/3rdparty/sqlite/sqlite.pri b/src/libs/3rdparty/sqlite/sqlite.pri
index ffc3a706e6..e869f4fc56 100644
--- a/src/libs/3rdparty/sqlite/sqlite.pri
+++ b/src/libs/3rdparty/sqlite/sqlite.pri
@@ -1,6 +1,12 @@
INCLUDEPATH *= $$PWD
+linux:DEFINES += _POSIX_C_SOURCE=200809L _GNU_SOURCE
+osx:DEFINES += _BSD_SOURCE
+
+
HEADERS += $$PWD/sqlite3.h \
+ $$PWD/config.h \
+ $$PWD/sqlite.h \
$$PWD/sqlite3ext.h
SOURCES += $$PWD/sqlite3.c \
diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index 344b39d14e..8e364fa6be 100644
--- a/src/libs/qmljs/qmljscheck.cpp
+++ b/src/libs/qmljs/qmljscheck.cpp
@@ -1366,7 +1366,9 @@ bool Check::visit(Block *ast)
&& !cast<WhileStatement *>(p)
&& !cast<IfStatement *>(p)
&& !cast<SwitchStatement *>(p)
- && !cast<WithStatement *>(p)) {
+ && !isCaseOrDefault(p)
+ && !cast<WithStatement *>(p)
+ && hasVarStatement(ast)) {
addMessage(WarnBlock, ast->lbraceToken);
}
if (!ast->statements
@@ -1656,6 +1658,33 @@ bool Check::isQtQuick2Ui() const
return _doc->language() == Dialect::QmlQtQuick2Ui;
}
+bool Check::isCaseOrDefault(Node *n)
+{
+ if (!cast<StatementList *>(n))
+ return false;
+ if (Node *p = parent(1))
+ return p->kind == Node::Kind_CaseClause || p->kind == Node::Kind_DefaultClause;
+ return false;
+}
+
+bool Check::hasVarStatement(AST::Block *b) const
+{
+ QTC_ASSERT(b, return false);
+ StatementList *s = b->statements;
+ while (s) {
+ if (auto var = cast<VariableStatement *>(s->statement)) {
+ VariableDeclarationList *declList = var->declarations;
+ while (declList) {
+ if (declList->declaration && declList->declaration->scope == VariableScope::Var)
+ return true;
+ declList = declList->next;
+ }
+ }
+ s = s->next;
+ }
+ return false;
+}
+
bool Check::visit(NewExpression *ast)
{
checkNewExpression(ast->expression);
diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h
index e5e110c5f9..ec20862248 100644
--- a/src/libs/qmljs/qmljscheck.h
+++ b/src/libs/qmljs/qmljscheck.h
@@ -122,6 +122,9 @@ private:
bool isQtQuick2() const;
bool isQtQuick2Ui() const;
+ bool isCaseOrDefault(AST::Node *n);
+ bool hasVarStatement(AST::Block *b) const;
+
AST::Node *parent(int distance = 0);
Document::Ptr _doc;
diff --git a/src/libs/sqlite/CMakeLists.txt b/src/libs/sqlite/CMakeLists.txt
index 4bf3ae91df..42de2ce9e9 100644
--- a/src/libs/sqlite/CMakeLists.txt
+++ b/src/libs/sqlite/CMakeLists.txt
@@ -1,16 +1,7 @@
add_qtc_library(Sqlite
PUBLIC_DEFINES
BUILD_SQLITE_LIBRARY
- SQLITE_THREADSAFE=2 SQLITE_ENABLE_FTS5 SQLITE_ENABLE_UNLOCK_NOTIFY
- SQLITE_ENABLE_JSON1 SQLITE_DEFAULT_FOREIGN_KEYS=1 SQLITE_TEMP_STORE=2
- SQLITE_DEFAULT_WAL_SYNCHRONOUS=1 SQLITE_MAX_WORKER_THREADS SQLITE_DEFAULT_MEMSTATUS=0
- SQLITE_OMIT_DEPRECATED SQLITE_OMIT_DECLTYPE
- SQLITE_MAX_EXPR_DEPTH=0 SQLITE_OMIT_SHARED_CACHE SQLITE_USE_ALLOCA
- SQLITE_ENABLE_MEMORY_MANAGEMENT SQLITE_ENABLE_NULL_TRIM SQLITE_OMIT_EXPLAIN
- SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_UTF16 SQLITE_DQS=0
- SQLITE_ENABLE_STAT4 HAVE_ISNAN HAVE_FDATASYNC HAVE_MALLOC_USABLE_SIZE
- SQLITE_DEFAULT_MMAP_SIZE=268435456 SQLITE_CORE SQLITE_ENABLE_SESSION SQLITE_ENABLE_PREUPDATE_HOOK
- SQLITE_LIKE_DOESNT_MATCH_BLOBS
+ SQLITE_CORE
DEPENDS Qt5::Core Threads::Threads ${CMAKE_DL_LIBS}
PUBLIC_INCLUDES
"${CMAKE_CURRENT_LIST_DIR}"
@@ -19,6 +10,8 @@ add_qtc_library(Sqlite
../3rdparty/sqlite/sqlite3.c
../3rdparty/sqlite/sqlite3.h
../3rdparty/sqlite/carray.c
+ ../3rdparty/sqlite/config.h
+ ../3rdparty/sqlite/sqlite.h
constraints.h
createtablesqlstatementbuilder.cpp createtablesqlstatementbuilder.h
lastchangedrowid.h
@@ -46,4 +39,13 @@ add_qtc_library(Sqlite
utf8stringvector.cpp utf8stringvector.h
sqliteblob.h
sqlitetimestamp.h
+ sqlitelibraryinitializer.cpp sqlitelibraryinitializer.h
)
+
+extend_qtc_library(Sqlite DEFINES _HAVE_SQLITE_CONFIG_H)
+
+if (APPLE)
+extend_qtc_library(Sqlite DEFINES _BSD_SOURCE)
+elseif (UNIX)
+extend_qtc_library(Sqlite DEFINES _POSIX_C_SOURCE=200809L _GNU_SOURCE _DEFAULT_SOURCE)
+endif()
diff --git a/src/libs/sqlite/createtablesqlstatementbuilder.cpp b/src/libs/sqlite/createtablesqlstatementbuilder.cpp
index 07008a9a1d..de77eec576 100644
--- a/src/libs/sqlite/createtablesqlstatementbuilder.cpp
+++ b/src/libs/sqlite/createtablesqlstatementbuilder.cpp
@@ -248,7 +248,9 @@ void CreateTableSqlStatementBuilder::bindColumnDefinitionsAndTableConstraints()
columnDefinitionStrings.reserve(m_columns.size());
for (const Column &column : m_columns) {
- Utils::SmallString columnDefinitionString = {column.name, " ", column.typeString()};
+ Utils::SmallString columnDefinitionString = {column.name,
+ SqlStatementBuilder::columnTypeToString(
+ column.type)};
ContraintsVisiter visiter{columnDefinitionString};
diff --git a/src/libs/sqlite/sqlite-lib.pri b/src/libs/sqlite/sqlite-lib.pri
index 87b63eb388..59d34a61c2 100644
--- a/src/libs/sqlite/sqlite-lib.pri
+++ b/src/libs/sqlite/sqlite-lib.pri
@@ -15,6 +15,7 @@ SOURCES += \
$$PWD/sqlitedatabasebackend.cpp \
$$PWD/sqliteexception.cpp \
$$PWD/sqliteglobal.cpp \
+ $$PWD/sqlitelibraryinitializer.cpp \
$$PWD/sqlitesessionchangeset.cpp \
$$PWD/sqlitesessions.cpp \
$$PWD/sqlstatementbuilder.cpp \
@@ -25,6 +26,7 @@ SOURCES += \
HEADERS += \
$$PWD/constraints.h \
$$PWD/sqliteblob.h \
+ $$PWD/sqlitelibraryinitializer.h \
$$PWD/sqlitetimestamp.h \
$$PWD/tableconstraints.h \
$$PWD/createtablesqlstatementbuilder.h \
@@ -50,16 +52,7 @@ HEADERS += \
$$PWD/sqliteindex.h \
$$PWD/sqlitebasestatement.h
-DEFINES += SQLITE_THREADSAFE=2 SQLITE_ENABLE_FTS5 SQLITE_ENABLE_UNLOCK_NOTIFY \
- SQLITE_ENABLE_JSON1 SQLITE_DEFAULT_FOREIGN_KEYS=1 SQLITE_TEMP_STORE=2 \
- SQLITE_DEFAULT_WAL_SYNCHRONOUS=1 SQLITE_MAX_WORKER_THREADS SQLITE_DEFAULT_MEMSTATUS=0 \
- SQLITE_OMIT_DEPRECATED SQLITE_OMIT_DECLTYPE \
- SQLITE_MAX_EXPR_DEPTH=0 SQLITE_OMIT_SHARED_CACHE SQLITE_USE_ALLOCA \
- SQLITE_ENABLE_MEMORY_MANAGEMENT SQLITE_ENABLE_NULL_TRIM SQLITE_OMIT_EXPLAIN \
- SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_UTF16 SQLITE_DQS=0 \
- SQLITE_ENABLE_STAT4 HAVE_ISNAN HAVE_FDATASYNC HAVE_MALLOC_USABLE_SIZE \
- SQLITE_DEFAULT_MMAP_SIZE=268435456 SQLITE_CORE SQLITE_ENABLE_SESSION SQLITE_ENABLE_PREUPDATE_HOOK \
- SQLITE_LIKE_DOESNT_MATCH_BLOBS
+DEFINES += _HAVE_SQLITE_CONFIG_H SQLITE_CORE
CONFIG(debug, debug|release): DEFINES += SQLITE_ENABLE_API_ARMOR
diff --git a/src/libs/sqlite/sqlitebasestatement.cpp b/src/libs/sqlite/sqlitebasestatement.cpp
index 6e60133511..28ebbb8d2e 100644
--- a/src/libs/sqlite/sqlitebasestatement.cpp
+++ b/src/libs/sqlite/sqlitebasestatement.cpp
@@ -29,7 +29,7 @@
#include "sqlitedatabasebackend.h"
#include "sqliteexception.h"
-#include "sqlite3.h"
+#include "sqlite.h"
#include <condition_variable>
#include <mutex>
diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h
index 019a7a44f3..c96fb3fade 100644
--- a/src/libs/sqlite/sqlitebasestatement.h
+++ b/src/libs/sqlite/sqlitebasestatement.h
@@ -29,7 +29,6 @@
#include "sqliteblob.h"
#include "sqliteexception.h"
-#include "sqlitetransaction.h"
#include "sqlitevalue.h"
#include <utils/smallstringvector.h>
@@ -38,7 +37,6 @@
#include <utils/span.h>
#include <cstdint>
-#include <exception>
#include <functional>
#include <memory>
#include <tuple>
@@ -93,7 +91,6 @@ public:
void bind(int index, Utils::span<const char *> values);
void bind(int index, Utils::SmallStringView value);
void bind(int index, const Value &value);
- void bind(int index, ValueView value);
void bind(int index, BlobView blobView);
void bind(int index, uint value) { bind(index, static_cast<long long>(value)); }
@@ -165,14 +162,13 @@ extern template SQLITE_EXPORT Utils::PathString BaseStatement::fetchValue<Utils:
template<typename BaseStatement, int ResultCount>
class StatementImplementation : public BaseStatement
{
- struct Resetter;
public:
using BaseStatement::BaseStatement;
void execute()
{
- Resetter resetter{this};
+ Resetter resetter{*this};
BaseStatement::next();
resetter.reset();
}
@@ -182,14 +178,15 @@ public:
template<typename... ValueType>
void bindValues(const ValueType&... values)
{
- bindValuesByIndex(1, values...);
+ int index = 0;
+ (BaseStatement::bind(++index, values), ...);
}
template<typename... ValueType>
void write(const ValueType&... values)
{
- Resetter resetter{this};
- bindValuesByIndex(1, values...);
+ Resetter resetter{*this};
+ bindValues(values...);
BaseStatement::next();
resetter.reset();
}
@@ -197,7 +194,7 @@ public:
template<typename ResultType>
std::vector<ResultType> values(std::size_t reserveSize)
{
- Resetter resetter{this};
+ Resetter resetter{*this};
std::vector<ResultType> resultValues;
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
@@ -214,7 +211,7 @@ public:
template<typename ResultType, typename... QueryTypes>
auto values(std::size_t reserveSize, const QueryTypes &...queryValues)
{
- Resetter resetter{this};
+ Resetter resetter{*this};
std::vector<ResultType> resultValues;
resultValues.reserve(std::max(reserveSize, m_maximumResultCount));
@@ -233,13 +230,13 @@ public:
template<typename ResultType, typename... QueryTypes>
auto value(const QueryTypes &...queryValues)
{
- Resetter resetter{this};
+ Resetter resetter{*this};
Utils::optional<ResultType> resultValue;
bindValues(queryValues...);
if (BaseStatement::next())
- resultValue = createOptionalValue<Utils::optional<ResultType>>();
+ resultValue = assignValue<Utils::optional<ResultType>>();
resetter.reset();
@@ -261,7 +258,7 @@ public:
template<typename Callable, typename... QueryTypes>
void readCallback(Callable &&callable, const QueryTypes &...queryValues)
{
- Resetter resetter{this};
+ Resetter resetter{*this};
bindValues(queryValues...);
@@ -275,10 +272,10 @@ public:
resetter.reset();
}
- template<typename Container, typename... QueryTypes>
+ template<int ResultTypeCount = 1, typename Container, typename... QueryTypes>
void readTo(Container &container, const QueryTypes &...queryValues)
{
- Resetter resetter{this};
+ Resetter resetter{*this};
bindValues(queryValues...);
@@ -288,187 +285,39 @@ public:
resetter.reset();
}
- template<typename ResultType, typename... QueryTypes>
- auto range(const QueryTypes &...queryValues)
- {
- return SqliteResultRange<ResultType>{*this, queryValues...};
- }
-
- template<typename ResultType, typename... QueryTypes>
- auto rangeWithTransaction(const QueryTypes &...queryValues)
- {
- return SqliteResultRangeWithTransaction<ResultType>{*this, queryValues...};
- }
-
- template<typename ResultType>
- class BaseSqliteResultRange
- {
- public:
- class SqliteResultIteratator
- {
- public:
- using iterator_category = std::input_iterator_tag;
- using difference_type = int;
- using value_type = ResultType;
- using pointer = ResultType *;
- using reference = ResultType &;
-
- SqliteResultIteratator(StatementImplementation &statement)
- : m_statement{statement}
- , m_hasNext{m_statement.next()}
- {}
-
- SqliteResultIteratator(StatementImplementation &statement, bool hasNext)
- : m_statement{statement}
- , m_hasNext{hasNext}
- {}
-
- SqliteResultIteratator &operator++()
- {
- m_hasNext = m_statement.next();
- return *this;
- }
-
- void operator++(int) { m_hasNext = m_statement.next(); }
-
- friend bool operator==(const SqliteResultIteratator &first,
- const SqliteResultIteratator &second)
- {
- return first.m_hasNext == second.m_hasNext;
- }
-
- friend bool operator!=(const SqliteResultIteratator &first,
- const SqliteResultIteratator &second)
- {
- return !(first == second);
- }
-
- value_type operator*() const { return m_statement.createValue<ResultType>(); }
-
- private:
- StatementImplementation &m_statement;
- bool m_hasNext = false;
- };
-
- using value_type = ResultType;
- using iterator = SqliteResultIteratator;
- using const_iterator = iterator;
-
- template<typename... QueryTypes>
- BaseSqliteResultRange(StatementImplementation &statement, const QueryTypes &...queryValues)
- : m_statement{statement}
- {
- statement.bindValues(queryValues...);
- }
-
- BaseSqliteResultRange(BaseSqliteResultRange &) = delete;
- BaseSqliteResultRange &operator=(BaseSqliteResultRange &) = delete;
-
- BaseSqliteResultRange(BaseSqliteResultRange &&other)
- : m_statement{std::move(other.resetter)}
- {}
- BaseSqliteResultRange &operator=(BaseSqliteResultRange &&) = delete;
-
- iterator begin() & { return iterator{m_statement}; }
- iterator end() & { return iterator{m_statement, false}; }
-
- const_iterator begin() const & { return iterator{m_statement}; }
- const_iterator end() const & { return iterator{m_statement, false}; }
-
- private:
- StatementImplementation &m_statement;
- };
-
- template<typename ResultType>
- class SqliteResultRange : public BaseSqliteResultRange<ResultType>
- {
- public:
- template<typename... QueryTypes>
- SqliteResultRange(StatementImplementation &statement, const QueryTypes &...queryValues)
- : BaseSqliteResultRange<ResultType>{statement}
- , resetter{&statement}
-
- {
- statement.bindValues(queryValues...);
- }
-
- ~SqliteResultRange()
- {
- if (!std::uncaught_exceptions())
- resetter.reset();
- }
-
- private:
- Resetter resetter;
- };
-
- template<typename ResultType>
- class SqliteResultRangeWithTransaction : public BaseSqliteResultRange<ResultType>
- {
- public:
- template<typename... QueryTypes>
- SqliteResultRangeWithTransaction(StatementImplementation &statement,
- const QueryTypes &...queryValues)
- : BaseSqliteResultRange<ResultType>{statement}
- , m_transaction{statement.database()}
- , resetter{&statement}
- {
- statement.bindValues(queryValues...);
- }
-
- ~SqliteResultRangeWithTransaction()
- {
- if (!std::uncaught_exceptions()) {
- resetter.reset();
- m_transaction.commit();
- }
- }
-
- private:
- DeferredTransaction m_transaction;
- Resetter resetter;
- };
-
protected:
~StatementImplementation() = default;
private:
struct Resetter
{
- Resetter(StatementImplementation *statement)
+ Resetter(StatementImplementation &statement)
: statement(statement)
{}
- Resetter(Resetter &) = delete;
- Resetter &operator=(Resetter &) = delete;
-
- Resetter(Resetter &&other)
- : statement{std::exchange(other.statement, nullptr)}
- {}
-
void reset()
{
try {
- if (statement)
- statement->reset();
+ statement.reset();
} catch (...) {
- statement = nullptr;
+ shouldReset = false;
throw;
}
- statement = nullptr;
+ shouldReset = false;
}
~Resetter() noexcept
{
try {
- if (statement)
- statement->reset();
+ if (shouldReset)
+ statement.reset();
} catch (...) {
}
}
- StatementImplementation *statement;
+ StatementImplementation &statement;
+ bool shouldReset = true;
};
struct ValueGetter
@@ -490,11 +339,6 @@ private:
int column;
};
- constexpr int resultCount(int localResultCount) const
- {
- return ResultCount < 0 ? localResultCount : ResultCount;
- }
-
template<typename ContainerType, int... ColumnIndices>
void emplaceBackValues(ContainerType &container, std::integer_sequence<int, ColumnIndices...>)
{
@@ -507,28 +351,17 @@ private:
emplaceBackValues(container, std::make_integer_sequence<int, ResultCount>{});
}
- template<typename ResultOptionalType, int... ColumnIndices>
- ResultOptionalType createOptionalValue(std::integer_sequence<int, ColumnIndices...>)
+ template <typename ResultOptionalType,
+ int... ColumnIndices>
+ ResultOptionalType assignValue(std::integer_sequence<int, ColumnIndices...>)
{
return ResultOptionalType(Utils::in_place, ValueGetter(*this, ColumnIndices)...);
}
template<typename ResultOptionalType>
- ResultOptionalType createOptionalValue()
- {
- return createOptionalValue<ResultOptionalType>(std::make_integer_sequence<int, ResultCount>{});
- }
-
- template<typename ResultType, int... ColumnIndices>
- ResultType createValue(std::integer_sequence<int, ColumnIndices...>)
- {
- return ResultType{ValueGetter(*this, ColumnIndices)...};
- }
-
- template<typename ResultType>
- ResultType createValue()
+ ResultOptionalType assignValue()
{
- return createValue<ResultType>(std::make_integer_sequence<int, ResultCount>{});
+ return assignValue<ResultOptionalType>(std::make_integer_sequence<int, ResultCount>{});
}
template<typename Callable, int... ColumnIndices>
@@ -543,19 +376,6 @@ private:
return callCallable(callable, std::make_integer_sequence<int, ResultCount>{});
}
- template<typename ValueType>
- void bindValuesByIndex(int index, const ValueType &value)
- {
- BaseStatement::bind(index, value);
- }
-
- template<typename ValueType, typename... ValueTypes>
- void bindValuesByIndex(int index, const ValueType &value, const ValueTypes &...values)
- {
- BaseStatement::bind(index, value);
- bindValuesByIndex(index + 1, values...);
- }
-
void setMaximumResultCount(std::size_t count)
{
m_maximumResultCount = std::max(m_maximumResultCount, count);
diff --git a/src/libs/sqlite/sqlitecolumn.h b/src/libs/sqlite/sqlitecolumn.h
index 1775a68307..35a5e0f25c 100644
--- a/src/libs/sqlite/sqlitecolumn.h
+++ b/src/libs/sqlite/sqlitecolumn.h
@@ -39,7 +39,7 @@ public:
Column(Utils::SmallStringView tableName,
Utils::SmallStringView name,
- ColumnType type,
+ ColumnType type = ColumnType::None,
Constraints &&constraints = {})
: constraints(std::move(constraints))
, name(name)
diff --git a/src/libs/sqlite/sqlitedatabasebackend.cpp b/src/libs/sqlite/sqlitedatabasebackend.cpp
index 0101e82626..9c096364cb 100644
--- a/src/libs/sqlite/sqlitedatabasebackend.cpp
+++ b/src/libs/sqlite/sqlitedatabasebackend.cpp
@@ -35,7 +35,7 @@
#include <QThread>
#include <QDebug>
-#include "sqlite3.h"
+#include "sqlite.h"
#include <chrono>
#include <thread>
diff --git a/src/libs/sqlite/sqliteglobal.h b/src/libs/sqlite/sqliteglobal.h
index 0bdb3c2aef..cefdebd8d0 100644
--- a/src/libs/sqlite/sqliteglobal.h
+++ b/src/libs/sqlite/sqliteglobal.h
@@ -39,7 +39,7 @@
namespace Sqlite {
-enum class ColumnType : char { Numeric, Integer, Real, Text, Blob, None };
+enum class ColumnType : char { None, Numeric, Integer, Real, Text, Blob };
enum class ConstraintType : char { NoConstraint, PrimaryKey, Unique, ForeignKey };
diff --git a/src/libs/sqlite/sqlitelibraryinitializer.cpp b/src/libs/sqlite/sqlitelibraryinitializer.cpp
new file mode 100644
index 0000000000..c42d126966
--- /dev/null
+++ b/src/libs/sqlite/sqlitelibraryinitializer.cpp
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "sqlitelibraryinitializer.h"
+
+#include "sqlitedatabasebackend.h"
+
+namespace Sqlite {
+
+void LibraryInitializer::initialize()
+{
+ static LibraryInitializer initializer;
+}
+
+LibraryInitializer::LibraryInitializer()
+{
+ DatabaseBackend::initializeSqliteLibrary();
+}
+
+LibraryInitializer::~LibraryInitializer()
+{
+ DatabaseBackend::shutdownSqliteLibrary();
+}
+
+} // namespace Sqlite
diff --git a/src/libs/sqlite/sqlitelibraryinitializer.h b/src/libs/sqlite/sqlitelibraryinitializer.h
new file mode 100644
index 0000000000..6df8b19a22
--- /dev/null
+++ b/src/libs/sqlite/sqlitelibraryinitializer.h
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "sqliteglobal.h"
+
+namespace Sqlite {
+
+class LibraryInitializer
+{
+public:
+ SQLITE_EXPORT static void initialize();
+
+private:
+ LibraryInitializer();
+ ~LibraryInitializer();
+};
+
+} // namespace Sqlite
diff --git a/src/libs/sqlite/sqlitesessionchangeset.cpp b/src/libs/sqlite/sqlitesessionchangeset.cpp
index 76fc088f92..eef98bc5d5 100644
--- a/src/libs/sqlite/sqlitesessionchangeset.cpp
+++ b/src/libs/sqlite/sqlitesessionchangeset.cpp
@@ -29,7 +29,7 @@
#include <utils/smallstringio.h>
-#include <sqlite3ext.h>
+#include <sqlite.h>
namespace Sqlite {
diff --git a/src/libs/sqlite/sqlitesessions.cpp b/src/libs/sqlite/sqlitesessions.cpp
index df668fdc59..5162a9fa59 100644
--- a/src/libs/sqlite/sqlitesessions.cpp
+++ b/src/libs/sqlite/sqlitesessions.cpp
@@ -28,7 +28,7 @@
#include "sqlitesessionchangeset.h"
#include "sqlitetable.h"
-#include <sqlite3ext.h>
+#include <sqlite.h>
#include <memory>
diff --git a/src/libs/sqlite/sqlitetable.h b/src/libs/sqlite/sqlitetable.h
index 9883415a9f..35453945f2 100644
--- a/src/libs/sqlite/sqlitetable.h
+++ b/src/libs/sqlite/sqlitetable.h
@@ -72,7 +72,7 @@ public:
}
Column &addColumn(Utils::SmallStringView name,
- ColumnType type = ColumnType::Numeric,
+ ColumnType type = ColumnType::None,
Constraints &&constraints = {})
{
m_sqliteColumns.emplace_back(m_tableName, name, type, std::move(constraints));
diff --git a/src/libs/sqlite/sqlstatementbuilder.cpp b/src/libs/sqlite/sqlstatementbuilder.cpp
index ecef170a34..7a6cc1a81a 100644
--- a/src/libs/sqlite/sqlstatementbuilder.cpp
+++ b/src/libs/sqlite/sqlstatementbuilder.cpp
@@ -179,12 +179,18 @@ bool SqlStatementBuilder::isBuild() const
Utils::SmallString SqlStatementBuilder::columnTypeToString(ColumnType columnType)
{
switch (columnType) {
- case ColumnType::Numeric: return "NUMERIC";
- case ColumnType::Integer: return "INTEGER";
- case ColumnType::Real: return "REAL";
- case ColumnType::Text: return "TEXT";
- case ColumnType::Blob: return "BLOB";
- case ColumnType::None: return {};
+ case ColumnType::Numeric:
+ return " NUMERIC";
+ case ColumnType::Integer:
+ return " INTEGER";
+ case ColumnType::Real:
+ return " REAL";
+ case ColumnType::Text:
+ return " TEXT";
+ case ColumnType::Blob:
+ return " BLOB";
+ case ColumnType::None:
+ return {};
}
Q_UNREACHABLE();
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index ec30204f91..c90ee9f270 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -49,6 +49,7 @@
#include <coreplugin/icore.h>
#include <coreplugin/iversioncontrol.h>
#include <coreplugin/vcsmanager.h>
+#include <coreplugin/editormanager/documentmodel.h>
#include <projectexplorer/buildmanager.h>
#include <projectexplorer/kitmanager.h>
@@ -1073,6 +1074,23 @@ QStringList Project::availableQmlPreviewTranslations(QString *errorMessage)
});
}
+QList<Core::IDocument *> Project::modifiedDocuments() const
+{
+ QList<Core::IDocument *> modifiedProjectDocuments;
+
+ for (Core::IDocument *doc : Core::DocumentModel::openedDocuments()) {
+ if (doc->isModified() && isKnownFile(doc->filePath()))
+ modifiedProjectDocuments.append(doc);
+ }
+
+ return modifiedProjectDocuments;
+}
+
+bool Project::isModified() const
+{
+ return !modifiedDocuments().isEmpty();
+}
+
#if defined(WITH_TESTS)
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index c16af95946..31cb6e12b9 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -185,6 +185,9 @@ public:
QStringList availableQmlPreviewTranslations(QString *errorMessage);
+ QList<Core::IDocument *> modifiedDocuments() const;
+ bool isModified() const;
+
signals:
void projectFileIsDirty(const Utils::FilePath &path);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
index 7032a26ef7..92ac7fdf8f 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
@@ -25,22 +25,23 @@
#include "quick2propertyeditorview.h"
-#include "propertyeditorvalue.h"
+#include "aligndistribute.h"
+#include "annotationeditor/annotationeditor.h"
+#include "bindingeditor/actioneditor.h"
+#include "bindingeditor/bindingeditor.h"
#include "fileresourcesmodel.h"
#include "gradientmodel.h"
-#include "gradientpresetdefaultlistmodel.h"
#include "gradientpresetcustomlistmodel.h"
+#include "gradientpresetdefaultlistmodel.h"
#include "itemfiltermodel.h"
-#include "simplecolorpalettemodel.h"
-#include "bindingeditor/bindingeditor.h"
-#include "bindingeditor/actioneditor.h"
-#include "annotationeditor/annotationeditor.h"
+#include "propertyeditorcontextobject.h"
+#include "propertyeditorqmlbackend.h"
+#include "propertyeditorvalue.h"
#include "qmlanchorbindingproxy.h"
+#include "richtexteditor/richtexteditorproxy.h"
+#include "simplecolorpalettemodel.h"
#include "theme.h"
-#include "aligndistribute.h"
-#include "propertyeditorcontextobject.h"
#include "tooltip.h"
-#include "richtexteditor/richtexteditorproxy.h"
namespace QmlDesigner {
@@ -71,6 +72,11 @@ void Quick2PropertyEditorView::registerQmlTypes()
Tooltip::registerDeclarativeType();
EasingCurveEditor::registerDeclarativeType();
RichTextEditorProxy::registerDeclarativeType();
+ QUrl regExpUrl = QUrl::fromLocalFile(PropertyEditorQmlBackend::propertyEditorResourcesPath()
+ + "/RegExpValidator.qml");
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ qmlRegisterType(regExpUrl, "HelperWidgets", 2, 0, "RegExpValidator");
+#endif
}
}
diff --git a/src/plugins/qmldesigner/designercore/include/propertycontainer.h b/src/plugins/qmldesigner/designercore/include/propertycontainer.h
index 5eebf01fbd..ae38f9aafc 100644
--- a/src/plugins/qmldesigner/designercore/include/propertycontainer.h
+++ b/src/plugins/qmldesigner/designercore/include/propertycontainer.h
@@ -66,8 +66,4 @@ private:
mutable QVariant m_value;
};
-QMLDESIGNERCORE_EXPORT QDataStream &operator<<(QDataStream &stream, const QList<PropertyContainer> &propertyContainerList);
-QMLDESIGNERCORE_EXPORT QDataStream &operator>>(QDataStream &stream, QList<PropertyContainer> &propertyContainerList);
-QMLDESIGNERCORE_EXPORT QDebug operator<<(QDebug debug, QList<PropertyContainer> &propertyContainerList);
-
} //namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index f196f5ca40..0e40c8edab 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -203,7 +203,7 @@ static bool isIdToAvoid(const QString& id)
static bool idContainsWrongLetter(const QString& id)
{
- static QRegularExpression idExpr(QStringLiteral("^[a-z_][a-zA-Z0-9_]+$"));
+ static QRegularExpression idExpr(QStringLiteral("^[a-z_][a-zA-Z0-9_]*$"));
return !id.contains(idExpr);
}
diff --git a/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp b/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
index ae62b4d0e6..440b91ffa0 100644
--- a/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
+++ b/src/plugins/qmldesigner/designercore/model/propertycontainer.cpp
@@ -113,37 +113,5 @@ QDebug operator<<(QDebug debug, const PropertyContainer &propertyContainer)
return debug.space();
}
-QDataStream &operator<<(QDataStream &stream, const QList<PropertyContainer> &propertyContainerList)
-{
- stream << propertyContainerList.count();
- foreach (const PropertyContainer &propertyContainer, propertyContainerList)
- stream << propertyContainer;
-
- return stream;
-}
-
-QDataStream &operator>>(QDataStream &stream, QList<PropertyContainer> &propertyContainerList)
-{
- int count;
- stream >> count;
- Q_ASSERT(count >= 0);
- for ( int i = 0; i < count; i++) {
- PropertyContainer propertyContainer;
- stream >> propertyContainer;
- propertyContainerList.append(propertyContainer);
- }
-
- return stream;
-}
-
-QDebug operator<<(QDebug debug, QList<PropertyContainer> &propertyContainerList)
-{
- foreach (const PropertyContainer &propertyContainer, propertyContainerList)
- debug << propertyContainer;
-
- return debug.space();
-}
-
-
} //namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 91d760339b..489d7951c1 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -55,18 +55,19 @@
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/designmode.h>
+#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/idocument.h>
#include <coreplugin/messagebox.h>
#include <coreplugin/modemanager.h>
-#include <coreplugin/editormanager/editormanager.h>
#include <extensionsystem/pluginmanager.h>
#include <extensionsystem/pluginspec.h>
-#include <qmljs/qmljsmodelmanagerinterface.h>
-#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/project.h>
-#include <projectexplorer/target.h>
+#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/session.h>
+#include <projectexplorer/target.h>
+#include <sqlitelibraryinitializer.h>
+#include <qmljs/qmljsmodelmanagerinterface.h>
#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
@@ -211,7 +212,9 @@ QmlDesignerPlugin::~QmlDesignerPlugin()
////////////////////////////////////////////////////
bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage/* = 0*/)
{
- QDir{}.mkpath(Core::ICore::cacheResourcePath().toString());
+ Sqlite::LibraryInitializer::initialize();
+
+ QDir{}.mkpath(Core::ICore::cacheResourcePath());
if (!Utils::HostOsInfo::canCreateOpenGLContext(errorMessage))
return false;
@@ -219,10 +222,8 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e
if (DesignerSettings::getValue(DesignerSettingsKey::STANDALONE_MODE).toBool())
GenerateResource::generateMenuEntry();
- const QString fontPath
- = Core::ICore::resourcePath(
- "qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf")
- .toString();
+ QString fontPath = Core::ICore::resourcePath() +
+ QStringLiteral("/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/icons.ttf");
if (QFontDatabase::addApplicationFont(fontPath) < 0)
qCWarning(qmldesignerLog) << "Could not add font " << fontPath << "to font database";
diff --git a/src/plugins/qmlpreview/qmldebugtranslationclient.cpp b/src/plugins/qmlpreview/qmldebugtranslationclient.cpp
index 3ef4351d49..e383784ef5 100644
--- a/src/plugins/qmlpreview/qmldebugtranslationclient.cpp
+++ b/src/plugins/qmlpreview/qmldebugtranslationclient.cpp
@@ -26,6 +26,8 @@
#include "qmldebugtranslationclient.h"
#include <qmldebug/qpacketprotocol.h>
+#include <QUrl>
+
#ifdef FOUND_QML_DEBUG_TRANSLATION_PROTOCOL
#include <private/qqmldebugtranslationprotocol_p.h>
#endif
diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp
index 1c49995618..7439980df3 100644
--- a/src/plugins/texteditor/codeassist/codeassistant.cpp
+++ b/src/plugins/texteditor/codeassist/codeassistant.cpp
@@ -407,7 +407,7 @@ void CodeAssistantPrivate::finalizeProposal()
bool CodeAssistantPrivate::isDisplayingProposal() const
{
- return m_proposalWidget != nullptr && m_proposalWidget->isVisible();
+ return m_proposalWidget != nullptr && m_proposalWidget->proposalIsVisible();
}
bool CodeAssistantPrivate::isWaitingForProposal() const
diff --git a/src/plugins/texteditor/codeassist/functionhintproposalwidget.cpp b/src/plugins/texteditor/codeassist/functionhintproposalwidget.cpp
index 149fba33fa..e96071cec5 100644
--- a/src/plugins/texteditor/codeassist/functionhintproposalwidget.cpp
+++ b/src/plugins/texteditor/codeassist/functionhintproposalwidget.cpp
@@ -219,10 +219,15 @@ void FunctionHintProposalWidget::closeProposal()
abort();
}
+bool FunctionHintProposalWidget::proposalIsVisible() const
+{
+ return d->m_popupFrame->isVisible();
+}
+
void FunctionHintProposalWidget::abort()
{
qApp->removeEventFilter(this);
- if (d->m_popupFrame->isVisible())
+ if (proposalIsVisible())
d->m_popupFrame->close();
deleteLater();
}
diff --git a/src/plugins/texteditor/codeassist/functionhintproposalwidget.h b/src/plugins/texteditor/codeassist/functionhintproposalwidget.h
index 99def1676a..a37905bbad 100644
--- a/src/plugins/texteditor/codeassist/functionhintproposalwidget.h
+++ b/src/plugins/texteditor/codeassist/functionhintproposalwidget.h
@@ -52,6 +52,8 @@ public:
void updateProposal(const QString &prefix) override;
void closeProposal() override;
+ bool proposalIsVisible() const override;
+
protected:
bool eventFilter(QObject *o, QEvent *e) override;
diff --git a/src/plugins/texteditor/codeassist/iassistproposalwidget.h b/src/plugins/texteditor/codeassist/iassistproposalwidget.h
index 0b7fdc0ddd..d178fc4b5e 100644
--- a/src/plugins/texteditor/codeassist/iassistproposalwidget.h
+++ b/src/plugins/texteditor/codeassist/iassistproposalwidget.h
@@ -57,6 +57,8 @@ public:
virtual void updateProposal(const QString &prefix) = 0;
virtual void closeProposal() = 0;
+ virtual bool proposalIsVisible() const { return isVisible(); }
+
int basePosition() const;
void setBasePosition(int basePosition);
diff --git a/tests/unit/unittest/CMakeLists.txt b/tests/unit/unittest/CMakeLists.txt
index 5a2c21c03c..49050ae2f3 100644
--- a/tests/unit/unittest/CMakeLists.txt
+++ b/tests/unit/unittest/CMakeLists.txt
@@ -225,6 +225,14 @@ endforeach()
extend_qtc_test_with_target_sources(Sqlite)
+extend_qtc_test(unittest DEFINES _HAVE_SQLITE_CONFIG_H)
+
+if (APPLE)
+extend_qtc_test(unittest DEFINES _BSD_SOURCE)
+elseif (UNIX)
+extend_qtc_test(unittest DEFINES _POSIX_C_SOURCE=200809L _GNU_SOURCE _DEFAULT_SOURCE)
+endif()
+
# Do not work on the source directory data
add_custom_command(TARGET unittest POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E copy_directory
diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp
index f0f6a04ad7..af8fc6c0eb 100644
--- a/tests/unit/unittest/gtest-creator-printing.cpp
+++ b/tests/unit/unittest/gtest-creator-printing.cpp
@@ -72,7 +72,7 @@
#include <variantproperty.h>
#include <qmldesigner/designercore/imagecache/imagecachestorageinterface.h>
-#include <sqlite3ext.h>
+#include <sqlite.h>
namespace {
ClangBackEnd::FilePathCaching *filePathCache = nullptr;
diff --git a/tests/unit/unittest/sqlitedatabasebackend-test.cpp b/tests/unit/unittest/sqlitedatabasebackend-test.cpp
index 2390bd4a3c..f6c6a62bb2 100644
--- a/tests/unit/unittest/sqlitedatabasebackend-test.cpp
+++ b/tests/unit/unittest/sqlitedatabasebackend-test.cpp
@@ -30,7 +30,7 @@
#include <sqliteexception.h>
#include <sqlitewritestatement.h>
-#include <sqlite3.h>
+#include <sqlite.h>
#include <QDir>
diff --git a/tests/unit/unittest/sqlitetable-test.cpp b/tests/unit/unittest/sqlitetable-test.cpp
index b916ad5bc8..2faebd844c 100644
--- a/tests/unit/unittest/sqlitetable-test.cpp
+++ b/tests/unit/unittest/sqlitetable-test.cpp
@@ -93,7 +93,9 @@ TEST_F(SqliteTable, InitializeTable)
table.addColumn("name");
table.addColumn("value");
- EXPECT_CALL(databaseMock, execute(Eq("CREATE TEMPORARY TABLE IF NOT EXISTS testTable(name NUMERIC, value NUMERIC) WITHOUT ROWID")));
+ EXPECT_CALL(databaseMock,
+ execute(Eq(
+ "CREATE TEMPORARY TABLE IF NOT EXISTS testTable(name, value) WITHOUT ROWID")));
table.initialize(databaseMock);
}
@@ -107,7 +109,7 @@ TEST_F(SqliteTable, InitializeTableWithIndex)
table.addIndex({column});
table.addIndex({column2});
- EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE testTable(name NUMERIC, value NUMERIC)")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE testTable(name, value)")));
EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_testTable_name ON testTable(name)")));
EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_testTable_value ON testTable(value)")));
@@ -299,9 +301,7 @@ TEST_F(SqliteTable, AddPrimaryTableContraint)
const auto &nameColumn = table.addColumn("name");
table.addPrimaryKeyContraint({idColumn, nameColumn});
- EXPECT_CALL(databaseMock,
- execute(
- Eq("CREATE TABLE testTable(id NUMERIC, name NUMERIC, PRIMARY KEY(id, name))")));
+ EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE testTable(id, name, PRIMARY KEY(id, name))")));
table.initialize(databaseMock);
}
diff --git a/tests/unit/unittest/sqlstatementbuilder-test.cpp b/tests/unit/unittest/sqlstatementbuilder-test.cpp
index 654439fbcd..1e24faeded 100644
--- a/tests/unit/unittest/sqlstatementbuilder-test.cpp
+++ b/tests/unit/unittest/sqlstatementbuilder-test.cpp
@@ -137,11 +137,11 @@ TEST(SqlStatementBuilder, ClearBinding)
TEST(SqlStatementBuilder, ColumnType)
{
- ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Numeric), "NUMERIC");
- ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Integer), "INTEGER");
- ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Real), "REAL");
- ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Text), "TEXT");
- ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Blob), "BLOB");
+ ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Numeric), " NUMERIC");
+ ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Integer), " INTEGER");
+ ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Real), " REAL");
+ ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Text), " TEXT");
+ ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Blob), " BLOB");
ASSERT_TRUE(SqlStatementBuilder::columnTypeToString(ColumnType::None).isEmpty());
}
diff --git a/tests/unit/unittest/unittest.pro b/tests/unit/unittest/unittest.pro
index 0f6c0d3bce..d00920fdb5 100644
--- a/tests/unit/unittest/unittest.pro
+++ b/tests/unit/unittest/unittest.pro
@@ -37,6 +37,9 @@ QMAKE_LFLAGS += -fno-merge-debug-strings -fuse-ld=gold
CONFIG(release, debug|release):QMAKE_LFLAGS += -Wl,--strip-debug
}
+CONFIG(debug, debug|release): DEFINES += SQLITE_DEBUG
+
+
gcc:!clang: QMAKE_CXXFLAGS += -Wno-noexcept-type
msvc{
QMAKE_CXXFLAGS += /bigobj /wd4267 /wd4141 /wd4146 /wd4624
diff --git a/tests/unit/unittest/unittests-main.cpp b/tests/unit/unittest/unittests-main.cpp
index 26993dd9de..5f5146de79 100644
--- a/tests/unit/unittest/unittests-main.cpp
+++ b/tests/unit/unittest/unittests-main.cpp
@@ -26,6 +26,8 @@
#include "googletest.h"
#include <sqlitedatabase.h>
+#include <sqlitelibraryinitializer.h>
+
#include <sqliteglobal.h>
#include <utils/temporarydirectory.h>
@@ -52,6 +54,7 @@ public:
int main(int argc, char *argv[])
{
+ Sqlite::LibraryInitializer::initialize();
Sqlite::Database::activateLogging();
QGuiApplication application(argc, argv);