summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorormorph <roma251078@mail.ru>2021-12-20 19:47:08 +0300
committerSlávek Banko <slavek.banko@axis.cz>2021-12-27 18:25:38 +0100
commitde08289873aafec6cb083d2058ed888c189d3b62 (patch)
tree626c4fcf1b662aa26e5302ff47806f84ce1ddd7c
parentd6ebacbe86e4778d29c5f1b40b51d52e14155542 (diff)
downloadkoffice-de082898.tar.gz
koffice-de082898.zip
Added kexi hotfix to support versions 12 and higher, fixing issue #15
Signed-off-by: ormorph <roma251078@mail.ru> (cherry picked from commit 5274e5d455f1478e19fc02df822eca04aae19116)
-rw-r--r--kexi/kexidb/connection.cpp4
-rw-r--r--kexi/kexidb/drivers/pqxx/pqxxconnection.cpp26
-rw-r--r--kexi/kexidb/drivers/pqxx/pqxxconnection.h1
-rw-r--r--kexi/kexidb/drivers/pqxx/pqxxdriver.cpp2
4 files changed, 26 insertions, 7 deletions
diff --git a/kexi/kexidb/connection.cpp b/kexi/kexidb/connection.cpp
index 776285e50..fbc938685 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 76684483a..90187b5a8 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 20840074b..50ec655ed 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 3809cd160..2050457cc 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 = "";