From 12a2cd9d1329611b4e6e3509b16dbc558cea256d Mon Sep 17 00:00:00 2001
From: Michele Calgaro <michele.calgaro@yahoo.it>
Date: Mon, 22 Jun 2026 14:41:39 +0900
Subject: Add support for libpqxx 8

Co-authored-by: Opencode/Big Pickle
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
---
 kexi/kexidb/drivers/configure.in.in         |  2 +-
 kexi/kexidb/drivers/pqxx/pqxxconnection.cpp |  6 +++---
 kexi/kexidb/drivers/pqxx/pqxxcursor.h       |  2 --
 kexi/migration/pqxx/pqxxmigrate.cpp         | 18 +++++++++---------
 4 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/kexi/kexidb/drivers/configure.in.in b/kexi/kexidb/drivers/configure.in.in
index ab04a8919..5edf1dbbd 100644
--- a/kexi/kexidb/drivers/configure.in.in
+++ b/kexi/kexidb/drivers/configure.in.in
@@ -348,7 +348,7 @@ if test "$compile_pgsql_plugin" = "yes"; then
   SAVED_CXXFLAGS="$CXXFLAGS"
 
   CXXFLAGS=$PQXX_CXXFLAGS
-  for PQXX_FIELD_CLASS in "pqxx::field" "pqxx::result::field"; do
+  for PQXX_FIELD_CLASS in "pqxx::field_ref" "pqxx::field" "pqxx::result::field"; do
     AC_MSG_CHECKING([for PostgreSQL field class name - $PQXX_FIELD_CLASS])
     AC_TRY_COMPILE([
         #include <$PQXX_INCDIR/pqxx/pqxx>
diff --git a/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp b/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp
index 90187b5a8..33e9f0c38 100644
--- a/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp
+++ b/kexi/kexidb/drivers/pqxx/pqxxconnection.cpp
@@ -126,7 +126,7 @@ bool pqxxSqlConnection::drv_getDatabasesList( TQStringList &list )
 		for (pqxx::result::const_iterator c = d->res->begin(); c != d->res->end(); ++c)
 		{
 			// Read value of column 0 into a string N
-			c[0].to(N);
+			(*c)[0].to(N);
 			// Copy the result into the return list
 			list << TQString::fromLatin1 (N.c_str());
 		}
@@ -290,7 +290,7 @@ bool pqxxSqlConnection::drv_executeSQL( const TQString& statement )
 //		Get the xmin of the last inserted row
 		if (isInserted) {
 			itRow = d->res->begin();
-			itRow[0].to(temp);
+			(*itRow)[0].to(temp);
 			lastRowId = temp.c_str();
 		}
 
@@ -307,7 +307,7 @@ bool pqxxSqlConnection::drv_executeSQL( const TQString& statement )
 		ok = true;
 	}
 	catch(const pqxx::sql_error& sqlerr) {
-		KexiDBDrvDbg << "pqxxSqlConnection::drv_executeSQL: sql_error exception - " << sqlerr.query().c_str() << endl;
+		KexiDBDrvDbg << "pqxxSqlConnection::drv_executeSQL: sql_error exception - " << std::string(sqlerr.query()).c_str() << endl;
 	}
 	catch (const pqxx::broken_connection& bcerr) {
 		KexiDBDrvDbg << "pqxxSqlConnection::drv_executeSQL: broken_connection exception" << endl;
diff --git a/kexi/kexidb/drivers/pqxx/pqxxcursor.h b/kexi/kexidb/drivers/pqxx/pqxxcursor.h
index 8304ea2d6..207bc1493 100644
--- a/kexi/kexidb/drivers/pqxx/pqxxcursor.h
+++ b/kexi/kexidb/drivers/pqxx/pqxxcursor.h
@@ -32,7 +32,6 @@
 #include <pqxx/pqxx>
 #endif
 
-#include <pqxx/binarystring>
 #include <migration/pqxx/pg_type.h>
 
 namespace KexiDB {
@@ -72,7 +71,6 @@ private:
 	pqxx::connection* my_conn;
 	TQVariant pValue(uint pos)const;
 	bool m_implicityStarted : 1;
-	//TQByteArray processBinaryData(pqxx::binarystring*) const;
 	friend class pqxxSqlConnection;
 };
 
diff --git a/kexi/migration/pqxx/pqxxmigrate.cpp b/kexi/migration/pqxx/pqxxmigrate.cpp
index f40b02af4..19282a38b 100644
--- a/kexi/migration/pqxx/pqxxmigrate.cpp
+++ b/kexi/migration/pqxx/pqxxmigrate.cpp
@@ -139,7 +139,7 @@ bool PqxxMigrate::drv_tableNames(TQStringList& tableNames)
         for (pqxx::result::const_iterator c = m_res->begin(); c != m_res->end(); ++c)
         {
             // Copy the result into the return list
-            tableNames << TQString::fromLatin1 (c[0].c_str());
+            tableNames << TQString::fromLatin1 ((*c)[0].c_str());
         }
         return true;
     }
@@ -440,8 +440,8 @@ tristate PqxxMigrate::drv_queryStringListFromSQL(
         for (pqxx::result::const_iterator it = m_res->begin(); 
           it != m_res->end() && (numRecords == -1 || i < numRecords); ++it, i++)
         {
-            if (it.size() > 0 && it.size() > columnNumber) {
-                it.at(columnNumber).to(result);
+            if (it->size() > 0 && it->size() > columnNumber) {
+                it->at(columnNumber).to(result);
                 stringList.append( TQString::fromUtf8(result.c_str()) );
             }
             else {
@@ -517,10 +517,10 @@ tristate PqxxMigrate::drv_fetchRecordFromSQL(const TQString& sqlStatement,
     }
 
     std::string result;
-    const int numFields = m_fetchRecordFromSQL_iter.size();
+    const int numFields = m_fetchRecordFromSQL_iter->size();
     data.resize(numFields);
     for (int i=0; i < numFields; i++)
-        data[i] = KexiDB::pgsqlCStrToVariant(m_fetchRecordFromSQL_iter.at(i));
+        data[i] = KexiDB::pgsqlCStrToVariant(m_fetchRecordFromSQL_iter->at(i));
     return true;
 }
 
@@ -539,20 +539,20 @@ bool PqxxMigrate::drv_copyTable(const TQString& srcTable, KexiDB::Connection *de
         {
             TQValueList<TQVariant> vals;
             int index = 0;
-            for (int i = 0; i < rowIt.size(); ++i, index++)
+            for (int i = 0; i < rowIt->size(); ++i, index++)
             {
                 if (fieldsExpanded.at(index)->field->type()==KexiDB::Field::BLOB ||
                     fieldsExpanded.at(index)->field->type()==KexiDB::Field::LongText)
                 {
-                    vals.append(KexiDB::pgsqlByteaToByteArray(rowIt.at(i).c_str(), rowIt.at(i).size()));
+                    vals.append(KexiDB::pgsqlByteaToByteArray(rowIt->at(i).c_str(), rowIt->at(i).size()));
                 }
                 else if (fieldsExpanded.at(index)->field->type()==KexiDB::Field::Boolean)
                 {
-                    vals.append(TQString(rowIt.at(i).c_str()).lower() == "t" ? TQVariant(true) : TQVariant(false));
+                    vals.append(TQString(rowIt->at(i).c_str()).lower() == "t" ? TQVariant(true) : TQVariant(false));
                 }
                 else
                 {
-                    vals.append(KexiDB::cstringToVariant(rowIt.at(i).c_str(),	fieldsExpanded.at(index)->field, rowIt.at(i).size()));
+                    vals.append(KexiDB::cstringToVariant(rowIt->at(i).c_str(),	fieldsExpanded.at(index)->field, rowIt->at(i).size()));
                 }
             }
             if (!destConn->insertRecord(*dstTable, vals))
-- 
cgit v1.2.3

