summaryrefslogtreecommitdiffstats
path: root/kexi
diff options
context:
space:
mode:
authorormorph <roma251078@mail.ru>2021-12-20 19:47:08 +0300
committerormorph <roma251078@mail.ru>2021-12-24 20:45:38 +0300
commit5274e5d455f1478e19fc02df822eca04aae19116 (patch)
tree4ad287f043307996bf6661173dfe1e230318aa60 /kexi
parent1968391ae9a085d7a20659b04d4750a5b815f1b5 (diff)
downloadkoffice-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.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 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 = "";