diff options
author | ormorph <roma251078@mail.ru> | 2021-12-20 19:47:08 +0300 |
---|---|---|
committer | ormorph <roma251078@mail.ru> | 2021-12-24 20:45:38 +0300 |
commit | 5274e5d455f1478e19fc02df822eca04aae19116 (patch) | |
tree | 4ad287f043307996bf6661173dfe1e230318aa60 /kexi | |
parent | 1968391ae9a085d7a20659b04d4750a5b815f1b5 (diff) | |
download | koffice-5274e5d455f1478e19fc02df822eca04aae19116.tar.gz koffice-5274e5d455f1478e19fc02df822eca04aae19116.zip |
Added kexi hotfix to support versions 12 and higher, fixing issue #15
Signed-off-by: ormorph <roma251078@mail.ru>
Diffstat (limited to 'kexi')
-rw-r--r-- | kexi/kexidb/connection.cpp | 4 | ||||
-rw-r--r-- | kexi/kexidb/drivers/pqxx/pqxxconnection.cpp | 26 | ||||
-rw-r--r-- | kexi/kexidb/drivers/pqxx/pqxxconnection.h | 1 | ||||
-rw-r--r-- | kexi/kexidb/drivers/pqxx/pqxxdriver.cpp | 2 |
4 files changed, 26 insertions, 7 deletions
diff --git a/kexi/kexidb/connection.cpp b/kexi/kexidb/connection.cpp index 776285e5..fbc93868 100644 --- a/kexi/kexidb/connection.cpp +++ b/kexi/kexidb/connection.cpp @@ -3227,6 +3227,10 @@ bool Connection::updateRow(QuerySchema &query, RowData& data, RowEditBuffer& buf setError(ERR_UPDATE_SERVER_ERROR, i18n("Row updating on the server failed.")); return false; } + + if (m_driver->beh->ROW_ID_FIELD_NAME == "xmin") + data[data.size()-1]=drv_lastInsertRowID(); + //success: now also assign new values in memory: TQMap<QueryColumnInfo*,int> columnsOrderExpanded; updateRowDataWithNewValues(query, data, b, columnsOrderExpanded); diff --git a/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp b/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp index 76684483..90187b5a 100644 --- a/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp +++ b/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp @@ -203,7 +203,6 @@ bool pqxxSqlConnection::drv_useDatabase( const TQString &dbName, bool *cancelled try { d->pqxxsql = new pqxx::connection( conninfo.latin1() ); - drv_executeSQL( "SET DEFAULT_WITH_OIDS TO ON" ); //Postgres 8.1 changed the default to no oids but we need them if (d->version) { //! @todo set version using the connection pointer when we drop libpqxx for libpq @@ -259,6 +258,15 @@ bool pqxxSqlConnection::drv_dropDatabase( const TQString &dbName ) //Execute an SQL statement bool pqxxSqlConnection::drv_executeSQL( const TQString& statement ) { + std::string temp = std::string(statement.utf8()); +// Adding xmin result output for inserting rows + bool isInserted = false; + pqxx::result::const_iterator itRow; + if (statement.find("INSERT INTO") == 0 || statement.find("UPDATE") == 0) { + temp += " RETURNING xmin"; + isInserted = true; + } + // KexiDBDrvDbg << "pqxxSqlConnection::drv_executeSQL: " << statement << endl; bool ok = false; @@ -277,7 +285,15 @@ bool pqxxSqlConnection::drv_executeSQL( const TQString& statement ) // m_trans = new pqxx::nontransaction(*m_pqxxsql); // KexiDBDrvDbg << "About to execute" << endl; //Create a result object through the transaction - d->res = new pqxx::result(m_trans->data->exec(std::string(statement.utf8()))); + d->res = new pqxx::result(m_trans->data->exec(temp)); + +// Get the xmin of the last inserted row + if (isInserted) { + itRow = d->res->begin(); + itRow[0].to(temp); + lastRowId = temp.c_str(); + } + // KexiDBDrvDbg << "Executed" << endl; //Commit the transaction if (implicityStarted) { @@ -327,11 +343,9 @@ TQ_ULLONG pqxxSqlConnection::drv_lastInsertRowID() { if (d->res) { - pqxx::oid theOid = d->res->inserted_oid(); - - if (theOid != pqxx::oid_none) + if (!lastRowId.isEmpty()) { - return (TQ_ULLONG)theOid; + return lastRowId.toULong(); } else { diff --git a/kexi/kexidb/drivers/pqxx/pqxxconnection.h b/kexi/kexidb/drivers/pqxx/pqxxconnection.h index 20840074..50ec655e 100644 --- a/kexi/kexidb/drivers/pqxx/pqxxconnection.h +++ b/kexi/kexidb/drivers/pqxx/pqxxconnection.h @@ -90,6 +90,7 @@ class pqxxSqlConnection : public Connection pqxxSqlConnectionInternal *d; private: + TQString lastRowId; TQString escapeName(const TQString &tn) const; // pqxx::transaction_base* m_trans; //! temporary solution for executeSQL()... diff --git a/kexi/kexidb/drivers/pqxx/pqxxdriver.cpp b/kexi/kexidb/drivers/pqxx/pqxxdriver.cpp index 3809cd16..2050457c 100644 --- a/kexi/kexidb/drivers/pqxx/pqxxdriver.cpp +++ b/kexi/kexidb/drivers/pqxx/pqxxdriver.cpp @@ -41,7 +41,7 @@ pqxxSqlDriver::pqxxSqlDriver( TQObject *parent, const char *name, const TQString //! @todo enable this when kexidb supports multiple: d->features = MultipleTransactions | CursorForward | CursorBackward; beh->UNSIGNED_TYPE_KEYWORD = ""; - beh->ROW_ID_FIELD_NAME = "oid"; + beh->ROW_ID_FIELD_NAME = "xmin"; beh->SPECIAL_AUTO_INCREMENT_DEF = false; beh->AUTO_INCREMENT_TYPE = "SERIAL"; beh->AUTO_INCREMENT_FIELD_OPTION = ""; |