diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 84609814769..6cc741017b2 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -2691,3 +2691,37 @@ def qdump__QJsonArray(d, value): def qdump__QJsonObject(d, value): qdumpHelper_QJsonObject(d, value['d'].pointer(), value['o'].pointer()) + +def qdump__QSqlResultPrivate(d, value): + # QSqlResult *q_ptr; + # QPointer sqldriver; + # int idx; + # QString sql; + # bool active; + # bool isSel; + # QSqlError error; + # bool forwardOnly; + # QSql::NumericalPrecisionPolicy precisionPolicy; + # int bindCount; + # QSqlResult::BindingSyntax binds; + # QString executedQuery; + # QHash types; + # QVector values; + # QHash > indexes; + # QVector holders + vptr, qptr, sqldriver1, sqldriver2, idx, pad, sql, active, isSel, pad, \ + error1, error2, error3, \ + forwardOnly, pad, precisionPolicy, bindCount, \ + binds, executedQuery, types, values, indexes, holders = \ + value.split('ppppi@{QString}bb@pppb@iiii{QString}ppp') + + d.putStringValue(sql) + d.putPlainChildren(value) + + +def qdump__QSqlField(d, value): + val, dptr = value.split('{QVariant}p') + d.putNumChild(1) + qdump__QVariant(d, val) + d.putBetterType(d.currentType.value.replace('QVariant', 'QSqlField')) + d.putPlainChildren(value) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index dcb970e7c1c..98d92115066 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -677,6 +677,7 @@ struct GuiPrivateProfile {}; struct NetworkProfile {}; struct QmlProfile {}; struct QmlPrivateProfile {}; +struct SqlProfile {}; struct NimProfile {}; @@ -817,6 +818,15 @@ public: return *this; } + const Data &operator+(const SqlProfile &) const + { + profileExtra += "QT += core sql\n"; + + useQt = true; + + return *this; + } + const Data &operator+(const BigArrayProfile &) const { this->bigArray = true; @@ -6532,6 +6542,30 @@ void tst_Dumpers::dumper_data() + RequiredMessage("Searching for type int (*)(int *) across all target modules, this could be very slow") + LldbEngine; + QTest::newRow("Sql") + << Data("#include \n" + "#include \n" + "#include \n" + "#include \n", + "QSqlDatabase db = QSqlDatabase::addDatabase(\"QSQLITE\");\n" + "db.setDatabaseName(\":memory:\");\n" + "Q_ASSERT(db.open());\n" + "QSqlQuery query;\n" + "query.exec(\"create table images (itemid int, file varchar(20))\");\n" + "query.exec(\"insert into images values(1, 'qt-logo.png')\");\n" + "query.exec(\"insert into images values(2, 'qt-creator.png')\");\n" + "query.exec(\"insert into images values(3, 'qt-project.png')\");\n" + "query.exec(\"select * from images\");\n" + "query.next();\n" + "QSqlRecord rec = query.record();\n" + "QSqlField f1 = rec.field(0);\n" + "QSqlField f2 = rec.field(1);\n" + "QSqlField f3 = rec.field(2);\n" + "unused(&f1, &f2, &f3);\n") + + SqlProfile() + + Check("f1", "1", "@QSqlField (qlonglong)") + + Check("f2", "\"qt-logo.png\"", "@QSqlField (QString)") + + Check("f3", "(invalid)", "@QSqlField (invalid)"); #if 0 #ifdef Q_OS_LINUX // Hint: To open a failing test in Creator, do: