diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,7 +153,7 @@ if(KEXI_DEBUG_GUI) set(KDB_REQUIRED_COMPONENTS DEBUG_GUI) endif() -find_package(KDb ${KEXI_LIBS_MIN_VERSION} REQUIRED COMPONENTS ${KDB_REQUIRED_COMPONENTS}) +find_package(KDb 3.0.91 REQUIRED COMPONENTS ${KDB_REQUIRED_COMPONENTS}) macro_log_feature(KDb_FOUND "KDb" "A database connectivity and creation framework" "http://community.kde.org/KDb" FALSE "" "Required by Kexi for data handling") diff --git a/cmake/modules/SetKexiVersionInfo.cmake b/cmake/modules/SetKexiVersionInfo.cmake --- a/cmake/modules/SetKexiVersionInfo.cmake +++ b/cmake/modules/SetKexiVersionInfo.cmake @@ -8,7 +8,7 @@ set(PROJECT_VERSION_STRING "3.1 Alpha") # Custom name such as "3.1 Alpha" set(PROJECT_STABLE_VERSION_MAJOR 3) # 3 for 3.x, 4 for 4.x, etc. set(PROJECT_STABLE_VERSION_MINOR 1) # 0 for 3.0, 1 for 3.1, etc. -set(PROJECT_VERSION_RELEASE 90) # 90 for Alpha, increase for next test releases, set 0 for first Stable, etc. +set(PROJECT_VERSION_RELEASE 91) # 90 for Alpha, increase for next test releases, set 0 for first Stable, etc. set(KEXI_ALPHA 1) # uncomment only for Alpha #set(KEXI_BETA 1) # uncomment only for Beta #set(KEXI_RC 1) # uncomment only for RC diff --git a/src/core/kexiproject.cpp b/src/core/kexiproject.cpp --- a/src/core/kexiproject.cpp +++ b/src/core/kexiproject.cpp @@ -161,16 +161,16 @@ q->m_result.setMessageTitle(part->lastOperationStatus().message); return false; } - if (!connection->executeVoidSQL(KDbEscapedString("UPDATE kexi__objects SET o_name=%1 WHERE o_id=%2") + if (!connection->executeSql(KDbEscapedString("UPDATE kexi__objects SET o_name=%1 WHERE o_id=%2") .arg(connection->escapeString(newName)) .arg(connection->driver()->valueToSQL(KDbField::Integer, item->identifier())))) { q->m_result = connection->result(); return false; } } if (_newCaption) { - if (!connection->executeVoidSQL(KDbEscapedString("UPDATE kexi__objects SET o_caption=%1 WHERE o_id=%2") + if (!connection->executeSql(KDbEscapedString("UPDATE kexi__objects SET o_caption=%1 WHERE o_id=%2") .arg(connection->escapeString(newCaption)) .arg(connection->driver()->valueToSQL(KDbField::Integer, item->identifier())))) { @@ -531,11 +531,11 @@ } KDbInternalTableSchema *ts = kexi__blobsCopy.take(); // createTable() took ownerhip of kexi__blobsCopy // 2.1 copy data (insert 0's into o_folder_id column) - if (!d->connection->executeVoidSQL( + if (!d->connection->executeSql( KDbEscapedString("INSERT INTO kexi__blobs (o_data, o_name, o_caption, o_mime, o_folder_id) " "SELECT o_data, o_name, o_caption, o_mime, 0 FROM kexi__blobs")) // 2.2 remove the original kexi__blobs - || !d->connection->executeVoidSQL(KDbEscapedString("DROP TABLE kexi__blobs")) //lowlevel + || !d->connection->executeSql(KDbEscapedString("DROP TABLE kexi__blobs")) //lowlevel // 2.3 rename the copy back into kexi__blobs || !d->connection->alterTableName(ts, "kexi__blobs", false /* no replace */) ) { @@ -1378,7 +1378,7 @@ return false; } if (result == true) { - if (!d->connection->executeVoidSQL( + if (!d->connection->executeSql( KDbEscapedString("UPDATE kexi__userdata SET d_data=" + d->connection->driver()->valueToSQL(KDbField::LongText, dataString) + " WHERE o_id=" + QString::number(objectID) + " AND " + sql_sub))) @@ -1388,7 +1388,7 @@ } return true; } - if (!d->connection->executeVoidSQL( + if (!d->connection->executeSql( KDbEscapedString("INSERT INTO kexi__userdata (d_user, o_id, d_sub_id, d_data) VALUES (") + d->connection->driver()->valueToSQL(KDbField::Text, d->userName()) + ", " + QString::number(objectID) @@ -1424,7 +1424,7 @@ if (!dataID.isEmpty()) { sql += " AND " + KDb::sqlWhere(d->connection->driver(), KDbField::Text, "d_sub_id", dataID); } - if (!d->connection->executeVoidSQL(sql)) { + if (!d->connection->executeSql(sql)) { m_result = d->connection->result(); return false; } diff --git a/src/migration/KexiSqlMigrate.h b/src/migration/KexiSqlMigrate.h --- a/src/migration/KexiSqlMigrate.h +++ b/src/migration/KexiSqlMigrate.h @@ -73,7 +73,7 @@ //Extended API //! Starts reading data from the source dataset's table - KDbSqlResult* drv_readFromTable(const QString & tableName) Q_DECL_OVERRIDE; + QSharedPointer drv_readFromTable(const QString & tableName) Q_DECL_OVERRIDE; const QString m_kdbDriverId; diff --git a/src/migration/KexiSqlMigrate.cpp b/src/migration/KexiSqlMigrate.cpp --- a/src/migration/KexiSqlMigrate.cpp +++ b/src/migration/KexiSqlMigrate.cpp @@ -62,7 +62,7 @@ //Perform a query on the table to get some data KDbEscapedString sql = KDbEscapedString("SELECT * FROM %1 LIMIT 0") .arg(sourceConnection()->escapeIdentifier(tableSchema->name())); - QScopedPointer result(sourceConnection()->executeSQL(sql)); + QSharedPointer result = sourceConnection()->prepareSql(sql); if (!result) { return false; } @@ -86,12 +86,12 @@ bool KexiSqlMigrate::drv_tableNames(QStringList *tableNames) { - QScopedPointer result(sourceConnection()->executeSQL(m_tableNamesSql)); + QSharedPointer result = sourceConnection()->prepareSql(m_tableNamesSql); if (!result || result->fieldsCount() < 1) { return false; } Q_FOREVER { - QScopedPointer record(result->fetchRecord()); + QSharedPointer record = result->fetchRecord(); if (!record) { if (result->lastResult().isError()) { return false; @@ -106,7 +106,7 @@ tristate KexiSqlMigrate::drv_queryStringListFromSQL( const KDbEscapedString& sqlStatement, int fieldIndex, QStringList *stringList, int numRecords) { - QScopedPointer result(sourceConnection()->executeSQL(sqlStatement)); + QSharedPointer result= sourceConnection()->prepareSql(sqlStatement); if (!result) { return true; } @@ -116,7 +116,7 @@ return false; } for (int i = 0; numRecords == -1 || i < numRecords; i++) { - QScopedPointer record(result->fetchRecord()); + QSharedPointer record = result->fetchRecord(); if (!record) { if (numRecords != -1 || result->lastResult().isError()) { return false; @@ -132,24 +132,23 @@ KDbTableSchema* dstTable, const RecordFilter *recordFilter) { - QScopedPointer result( - sourceConnection()->executeSQL(KDbEscapedString("SELECT * FROM %1") - .arg(sourceConnection()->escapeIdentifier(srcTable)))); + QSharedPointer result = sourceConnection()->prepareSql( + KDbEscapedString("SELECT * FROM %1").arg(sourceConnection()->escapeIdentifier(srcTable))); if (!result) { return false; } const KDbQueryColumnInfo::Vector fieldsExpanded(dstTable->query()->fieldsExpanded()); const int numFields = qMin(fieldsExpanded.count(), result->fieldsCount()); Q_FOREVER { - QScopedPointer record(result->fetchRecord()); + QSharedPointer record = result->fetchRecord(); if (!record) { if (!result->lastResult().isError()) { break; } return false; } if (recordFilter) { - if (!(*recordFilter)(*record)) { + if (!(*recordFilter)(record)) { continue; } } @@ -176,13 +175,13 @@ bool KexiSqlMigrate::drv_getTableSize(const QString& table, quint64 *size) { Q_ASSERT(size); - QScopedPointer result( - sourceConnection()->executeSQL(KDbEscapedString("SELECT COUNT(*) FROM %1") - .arg(sourceConnection()->escapeIdentifier(table)))); + QSharedPointer result + = sourceConnection()->prepareSql(KDbEscapedString("SELECT COUNT(*) FROM %1") + .arg(sourceConnection()->escapeIdentifier(table))); if (!result) { return false; } - QScopedPointer record(result->fetchRecord()); + QSharedPointer record = result->fetchRecord(); if (!result || result->fieldsCount() == 0) { return false; } @@ -195,14 +194,14 @@ return ok; } -KDbSqlResult* KexiSqlMigrate::drv_readFromTable(const QString& tableName) +QSharedPointer KexiSqlMigrate::drv_readFromTable(const QString& tableName) { - QScopedPointer result(sourceConnection()->executeSQL(KDbEscapedString("SELECT * FROM %1") - .arg(sourceConnection()->escapeIdentifier(tableName)))); + QSharedPointer result = sourceConnection()->prepareSql( + KDbEscapedString("SELECT * FROM %1").arg(sourceConnection()->escapeIdentifier(tableName))); if (!result || result->lastResult().isError()) { m_result = sourceConnection()->result(); qWarning() << m_result; - return nullptr; + result.clear(); } - return result.take(); + return result; } diff --git a/src/migration/importtablewizard.cpp b/src/migration/importtablewizard.cpp --- a/src/migration/importtablewizard.cpp +++ b/src/migration/importtablewizard.cpp @@ -451,7 +451,7 @@ bool ImportTableWizard::readFromTable() { - QScopedPointer tableResult(m_migrateDriver->readFromTable(m_importTableName)); + QSharedPointer tableResult = m_migrateDriver->readFromTable(m_importTableName); KDbTableSchema *newSchema = m_alterSchemaWidget->newSchema(); if (!tableResult || tableResult->lastResult().isError() || tableResult->fieldsCount() != newSchema->fieldCount()) @@ -464,7 +464,7 @@ } QScopedPointer> data(new QList); for (int i = 0; i < RECORDS_FOR_PREVIEW; ++i) { - QScopedPointer record(tableResult->fetchRecordData()); + QSharedPointer record(tableResult->fetchRecordData()); if (!record) { if (tableResult->lastResult().isError()) { return false; diff --git a/src/migration/keximigrate.h b/src/migration/keximigrate.h --- a/src/migration/keximigrate.h +++ b/src/migration/keximigrate.h @@ -155,7 +155,7 @@ bool readTableSchema(const QString& originalName, KDbTableSchema *tableSchema); //! Starts reading data from the source dataset's table - KDbSqlResult* readFromTable(const QString& tableName); + QSharedPointer readFromTable(const QString& tableName); //!Move to the next row bool moveNext(); @@ -280,7 +280,7 @@ public: RecordFilter() {} virtual ~RecordFilter() {} - virtual bool operator() (const KDbSqlRecord &record) const = 0; + virtual bool operator() (const QSharedPointer &record) const = 0; virtual bool operator() (const QList &record) const = 0; }; @@ -326,9 +326,9 @@ //Extended API //! Position the source dataset at the start of a table - virtual KDbSqlResult* drv_readFromTable(const QString & tableName) { + virtual QSharedPointer drv_readFromTable(const QString & tableName) { Q_UNUSED(tableName); - return nullptr; + return QSharedPointer(); } //! Move to the next row diff --git a/src/migration/keximigrate.cpp b/src/migration/keximigrate.cpp --- a/src/migration/keximigrate.cpp +++ b/src/migration/keximigrate.cpp @@ -270,7 +270,7 @@ .arg(int(KDb::TableObjectType)); QScopedPointer record; { - QScopedPointer result(d->sourceConnection->executeSQL(sqlStatement)); + QSharedPointer result = d->sourceConnection->prepareSql(sqlStatement); if (!result) { m_result = d->sourceConnection->result(); return false; @@ -290,7 +290,7 @@ " FROM kexi__fields WHERE t_id=%1 ORDER BY f_order").arg(t->id()); QVector> fieldRecords; { - QScopedPointer fieldsResult(d->sourceConnection->executeSQL(sqlStatement)); + QSharedPointer fieldsResult = d->sourceConnection->prepareSql(sqlStatement); if (!fieldsResult) { m_result = d->sourceConnection->result(); return false; @@ -828,7 +828,7 @@ return drv_tableNames(tn); } -KDbSqlResult* KexiMigrate::readFromTable(const QString & tableName) +QSharedPointer KexiMigrate::readFromTable(const QString & tableName) { return drv_readFromTable(tableName); } diff --git a/src/migration/tsv/TsvMigrate.h b/src/migration/tsv/TsvMigrate.h --- a/src/migration/tsv/TsvMigrate.h +++ b/src/migration/tsv/TsvMigrate.h @@ -62,7 +62,7 @@ virtual bool drv_readTableSchema(const QString& originalName, KDbTableSchema *tableSchema); //! Starts reading data from the source dataset's table - KDbSqlResult* drv_readFromTable(const QString & tableName) Q_DECL_OVERRIDE; + QSharedPointer drv_readFromTable(const QString & tableName) Q_DECL_OVERRIDE; private: bool openFile(FileInfo *info); diff --git a/src/migration/tsv/TsvMigrate.cpp b/src/migration/tsv/TsvMigrate.cpp --- a/src/migration/tsv/TsvMigrate.cpp +++ b/src/migration/tsv/TsvMigrate.cpp @@ -208,12 +208,13 @@ return nullptr; } - inline KDbSqlRecord* fetchRecord() Q_DECL_OVERRIDE { + inline QSharedPointer fetchRecord() Q_DECL_OVERRIDE { + QSharedPointer sqlRecord; QVector record = readLine(m_info, &m_eof); - if (m_eof) { - return nullptr; + if (!m_eof) { + sqlRecord.reset(new TsvRecord(record, *m_info)); } - return new TsvRecord(record, *m_info); + return sqlRecord; } inline KDbResult lastResult() Q_DECL_OVERRIDE { @@ -229,14 +230,15 @@ bool m_eof; }; -KDbSqlResult* TsvMigrate::drv_readFromTable(const QString &tableName) +QSharedPointer TsvMigrate::drv_readFromTable(const QString &tableName) { Q_UNUSED(tableName) + QSharedPointer sqlResult; QScopedPointer info(new FileInfo); - if (!openFile(info.data())) { - return nullptr; + if (openFile(info.data())) { + sqlResult.reset(new TsvResult(info.take())); } - return new TsvResult(info.take()); + return sqlResult; } bool TsvMigrate::openFile(FileInfo *info)