summaryrefslogtreecommitdiff
path: root/databases
diff options
context:
space:
mode:
Diffstat (limited to 'databases')
-rw-r--r--databases/Makefile20
-rw-r--r--databases/akonadi/Makefile1
-rw-r--r--databases/akonadi/distinfo6
-rw-r--r--databases/akonadi/pkg-plist1
-rw-r--r--databases/cego/Makefile2
-rw-r--r--databases/cego/distinfo6
-rw-r--r--databases/diesel/Makefile1
-rw-r--r--databases/frece/Makefile2
-rw-r--r--databases/freetds-devel/Makefile2
-rw-r--r--databases/freetds-devel/distinfo6
-rw-r--r--databases/freetds/Makefile2
-rw-r--r--databases/freetds/distinfo6
-rw-r--r--databases/gobang/Makefile2
-rw-r--r--databases/mongodb70/Makefile2
-rw-r--r--databases/mongodb80/Makefile2
-rw-r--r--databases/movine/Makefile2
-rw-r--r--databases/mydumper/Makefile2
-rw-r--r--databases/mydumper/distinfo6
-rw-r--r--databases/ods2sql/Makefile2
-rw-r--r--databases/pear-DoctrineCommon/Makefile3
-rw-r--r--databases/pear-DoctrineDBAL/Makefile3
-rw-r--r--databases/php85-dba/Makefile7
-rw-r--r--databases/php85-dba/files/patch-config.m425
-rw-r--r--databases/php85-mysqli/Makefile7
-rw-r--r--databases/php85-odbc/Makefile7
-rw-r--r--databases/php85-odbc/files/patch-config.m492
-rw-r--r--databases/php85-pdo/Makefile7
-rw-r--r--databases/php85-pdo/files/patch-pdo__sql__parser.c729
-rw-r--r--databases/php85-pdo_dblib/Makefile7
-rw-r--r--databases/php85-pdo_firebird/Makefile9
-rw-r--r--databases/php85-pdo_mysql/Makefile7
-rw-r--r--databases/php85-pdo_mysql/files/patch-mysql__sql__parser.c398
-rw-r--r--databases/php85-pdo_odbc/Makefile7
-rw-r--r--databases/php85-pdo_pgsql/Makefile7
-rw-r--r--databases/php85-pdo_pgsql/files/patch-pgsql__sql__parser.c528
-rw-r--r--databases/php85-pdo_sqlite/Makefile7
-rw-r--r--databases/php85-pdo_sqlite/files/patch-sqlite__sql__parser.c398
-rw-r--r--databases/php85-pgsql/Makefile7
-rw-r--r--databases/php85-sqlite3/Makefile7
-rw-r--r--databases/postgresql-promscale/Makefile2
-rw-r--r--databases/py-sqlframe/Makefile4
-rw-r--r--databases/py-sqlframe/distinfo6
-rw-r--r--databases/py-sqlglot/Makefile2
-rw-r--r--databases/py-sqlglot/distinfo6
-rw-r--r--databases/py-sqlglotrs/Makefile1
-rw-r--r--databases/py-sqloxide/Makefile2
-rw-r--r--databases/py-unqlite/Makefile2
-rw-r--r--databases/py-unqlite/distinfo6
-rw-r--r--databases/qdrant/Makefile1
-rw-r--r--databases/quake/Makefile2
-rw-r--r--databases/redisjson/Makefile2
-rw-r--r--databases/rubygem-flipper-active_record/Makefile2
-rw-r--r--databases/rubygem-flipper-active_record/distinfo6
-rw-r--r--databases/sqlx-cli/Makefile2
-rw-r--r--databases/surrealdb/Makefile1
-rw-r--r--databases/xls2txt/Makefile2
-rw-r--r--databases/xtrabackup80/Makefile2
-rw-r--r--databases/xtrabackup80/files/patch-sql_binlog__ostream.cc11
-rw-r--r--databases/xtrabackup80/files/patch-sql_mdl__context__backup.cc36
-rw-r--r--databases/xtrabackup80/files/patch-sql_mdl__context__backup.h11
-rw-r--r--databases/xtrabackup80/files/patch-sql_range__optimizer_index__range__scan__plan.cc39
-rw-r--r--databases/xtrabackup80/files/patch-sql_rpl__log__encryption.cc143
-rw-r--r--databases/xtrabackup80/files/patch-sql_stream__cipher.cc11
-rw-r--r--databases/xtrabackup80/files/patch-sql_stream__cipher.h20
-rw-r--r--databases/xtrabackup80/files/patch-storage_innobase_log__log0recv.cc29
-rw-r--r--databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_src_keyring__plugins.cc11
-rw-r--r--databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_src_utils.cc59
-rw-r--r--databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_xbcloud__osenv.sh15
-rw-r--r--databases/xtrabackup80/files/patch-storage_temptable_include_temptable_lock_free_type.h17
-rw-r--r--databases/xtrabackup80/files/patch-utils.cc83
70 files changed, 2701 insertions, 170 deletions
diff --git a/databases/Makefile b/databases/Makefile
index 6cf911e2bf1a..ce29492a0960 100644
--- a/databases/Makefile
+++ b/databases/Makefile
@@ -633,6 +633,18 @@
SUBDIR += php84-pdo_sqlite
SUBDIR += php84-pgsql
SUBDIR += php84-sqlite3
+ SUBDIR += php85-dba
+ SUBDIR += php85-mysqli
+ SUBDIR += php85-odbc
+ SUBDIR += php85-pdo
+ SUBDIR += php85-pdo_dblib
+ SUBDIR += php85-pdo_firebird
+ SUBDIR += php85-pdo_mysql
+ SUBDIR += php85-pdo_odbc
+ SUBDIR += php85-pdo_pgsql
+ SUBDIR += php85-pdo_sqlite
+ SUBDIR += php85-pgsql
+ SUBDIR += php85-sqlite3
SUBDIR += phpliteadmin
SUBDIR += phpminiadmin
SUBDIR += phpmyadmin
@@ -706,6 +718,14 @@
SUBDIR += postgresql17-plpython
SUBDIR += postgresql17-pltcl
SUBDIR += postgresql17-server
+ SUBDIR += postgresql18-client
+ SUBDIR += postgresql18-contrib
+ SUBDIR += postgresql18-docs
+ SUBDIR += postgresql18-pgtcl
+ SUBDIR += postgresql18-plperl
+ SUBDIR += postgresql18-plpython
+ SUBDIR += postgresql18-pltcl
+ SUBDIR += postgresql18-server
SUBDIR += powa-archivist
SUBDIR += powa-web
SUBDIR += powerarchitect
diff --git a/databases/akonadi/Makefile b/databases/akonadi/Makefile
index 8d003ecddac1..60f5b9fb2739 100644
--- a/databases/akonadi/Makefile
+++ b/databases/akonadi/Makefile
@@ -1,6 +1,5 @@
PORTNAME= akonadi
DISTVERSION= ${KDE_APPLICATIONS_VERSION}
-PORTREVISION= 1
CATEGORIES= databases kde kde-applications
MAINTAINER= kde@FreeBSD.org
diff --git a/databases/akonadi/distinfo b/databases/akonadi/distinfo
index 2e162fceb73d..9956fa9a1f92 100644
--- a/databases/akonadi/distinfo
+++ b/databases/akonadi/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1749036257
-SHA256 (KDE/release-service/25.04.2/akonadi-25.04.2.tar.xz) = c4689a6e80d4f8b744e31459e768d977044cbd3b8fb42d14ed1cf7e7bacae52d
-SIZE (KDE/release-service/25.04.2/akonadi-25.04.2.tar.xz) = 1735160
+TIMESTAMP = 1751381215
+SHA256 (KDE/release-service/25.04.3/akonadi-25.04.3.tar.xz) = 042cd3319eadfb82547773e52ce7d41d361d58c4e92fe75a5179c1574ed4f5df
+SIZE (KDE/release-service/25.04.3/akonadi-25.04.3.tar.xz) = 1742704
diff --git a/databases/akonadi/pkg-plist b/databases/akonadi/pkg-plist
index 9818e81efe7e..8c01869be858 100644
--- a/databases/akonadi/pkg-plist
+++ b/databases/akonadi/pkg-plist
@@ -428,6 +428,7 @@ share/locale/gl/LC_MESSAGES/akonadi_knut_resource.mo
share/locale/gl/LC_MESSAGES/libakonadi6.mo
share/locale/he/LC_MESSAGES/akonadi-db-migrator.mo
share/locale/he/LC_MESSAGES/akonadi_knut_resource.mo
+share/locale/he/LC_MESSAGES/libakonadi6.mo
share/locale/hi/LC_MESSAGES/akonadi-db-migrator.mo
share/locale/hi/LC_MESSAGES/akonadi_knut_resource.mo
share/locale/hi/LC_MESSAGES/libakonadi6.mo
diff --git a/databases/cego/Makefile b/databases/cego/Makefile
index e3897f6ae745..bd58f9316592 100644
--- a/databases/cego/Makefile
+++ b/databases/cego/Makefile
@@ -1,5 +1,5 @@
PORTNAME= cego
-PORTVERSION= 2.52.10
+PORTVERSION= 2.52.12
CATEGORIES= databases
MASTER_SITES= http://www.lemke-it.com/
diff --git a/databases/cego/distinfo b/databases/cego/distinfo
index a96077fb8524..634644d4288d 100644
--- a/databases/cego/distinfo
+++ b/databases/cego/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1750582416
-SHA256 (cego-2.52.10.tar.gz) = ab9b568f5a875f28b78941b7e6fe4b46fad3036d5f246f310c8946dd575359c4
-SIZE (cego-2.52.10.tar.gz) = 3321878
+TIMESTAMP = 1751547684
+SHA256 (cego-2.52.12.tar.gz) = a48a8d6f05a660be56cd7c96a63264806f7388384711a1d84d0eb1a32afd2162
+SIZE (cego-2.52.12.tar.gz) = 3380495
diff --git a/databases/diesel/Makefile b/databases/diesel/Makefile
index d7903b93bee0..1d3f9023abf4 100644
--- a/databases/diesel/Makefile
+++ b/databases/diesel/Makefile
@@ -1,6 +1,7 @@
PORTNAME= diesel
DISTVERSIONPREFIX= v
DISTVERSION= 2.2.11
+PORTREVISION= 1
CATEGORIES= databases
PKGNAMESUFFIX= -cli
diff --git a/databases/frece/Makefile b/databases/frece/Makefile
index fe0c68108bc1..e153c3e018a6 100644
--- a/databases/frece/Makefile
+++ b/databases/frece/Makefile
@@ -1,7 +1,7 @@
PORTNAME= frece
DISTVERSIONPREFIX= v
DISTVERSION= 1.0.6
-PORTREVISION= 22
+PORTREVISION= 23
CATEGORIES= databases
MAINTAINER= yuri@FreeBSD.org
diff --git a/databases/freetds-devel/Makefile b/databases/freetds-devel/Makefile
index 7d17251b0aa2..71f3c3a9a605 100644
--- a/databases/freetds-devel/Makefile
+++ b/databases/freetds-devel/Makefile
@@ -1,5 +1,5 @@
PORTNAME= freetds
-DISTVERSION= 1.4.514
+DISTVERSION= 1.5.97
PORTEPOCH= 1
CATEGORIES= databases
MASTER_SITES= https://www.freetds.org/files/current/
diff --git a/databases/freetds-devel/distinfo b/databases/freetds-devel/distinfo
index f8649dd711fe..687e26c403ec 100644
--- a/databases/freetds-devel/distinfo
+++ b/databases/freetds-devel/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1748779556
-SHA256 (freetds-dev.1.4.514.tar.bz2) = 072cbbdb5431fbf0440fd9048b4eca6018c079c6e19c473227522c28c70b1602
-SIZE (freetds-dev.1.4.514.tar.bz2) = 2451574
+TIMESTAMP = 1751498164
+SHA256 (freetds-dev.1.5.97.tar.bz2) = 9798b1b2b324f6dbe64b5bc78c7ed891c239f1e542565d1cf7cd1fa1bdefd915
+SIZE (freetds-dev.1.5.97.tar.bz2) = 2452586
diff --git a/databases/freetds/Makefile b/databases/freetds/Makefile
index f72d3a762825..3d2da413694a 100644
--- a/databases/freetds/Makefile
+++ b/databases/freetds/Makefile
@@ -1,5 +1,5 @@
PORTNAME= freetds
-DISTVERSION= 1.5.2
+DISTVERSION= 1.5.4
PORTEPOCH= 1
CATEGORIES= databases
MASTER_SITES= https://www.freetds.org/files/stable/ \
diff --git a/databases/freetds/distinfo b/databases/freetds/distinfo
index c373f55a79d9..9bcef94b2f05 100644
--- a/databases/freetds/distinfo
+++ b/databases/freetds/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1748779474
-SHA256 (freetds-1.5.2.tar.bz2) = 7100a723bef1c0866f0a12c7081b410447959c8b9cc7500196c5c5d64042c056
-SIZE (freetds-1.5.2.tar.bz2) = 2439379
+TIMESTAMP = 1751442687
+SHA256 (freetds-1.5.4.tar.bz2) = 1d024ef418d74a3a8f2cca82f10f1561f1dde28dc3d6f65c815f07764d4f7ea8
+SIZE (freetds-1.5.4.tar.bz2) = 2440514
diff --git a/databases/gobang/Makefile b/databases/gobang/Makefile
index 3a4df9986c69..b972c867cda7 100644
--- a/databases/gobang/Makefile
+++ b/databases/gobang/Makefile
@@ -1,7 +1,7 @@
PORTNAME= gobang
DISTVERSIONPREFIX= v
DISTVERSION= 0.1.0-alpha.5
-PORTREVISION= 23
+PORTREVISION= 24
CATEGORIES= databases
MAINTAINER= yuri@FreeBSD.org
diff --git a/databases/mongodb70/Makefile b/databases/mongodb70/Makefile
index 0b54ffa2fa64..b7e4a990921f 100644
--- a/databases/mongodb70/Makefile
+++ b/databases/mongodb70/Makefile
@@ -1,7 +1,7 @@
PORTNAME= mongodb
DISTVERSIONPREFIX= r
DISTVERSION= 7.0.21
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= databases net
PKGNAMESUFFIX= ${DISTVERSION:R:S/.//}
diff --git a/databases/mongodb80/Makefile b/databases/mongodb80/Makefile
index 260c6f5aa3be..54c4447d8508 100644
--- a/databases/mongodb80/Makefile
+++ b/databases/mongodb80/Makefile
@@ -1,7 +1,7 @@
PORTNAME= mongodb
DISTVERSIONPREFIX= r
DISTVERSION= 8.0.10
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= databases net
PKGNAMESUFFIX= ${DISTVERSION:R:S/.//}
diff --git a/databases/movine/Makefile b/databases/movine/Makefile
index 7a625a8f3db5..b17ee8023ee5 100644
--- a/databases/movine/Makefile
+++ b/databases/movine/Makefile
@@ -1,7 +1,7 @@
PORTNAME= movine
DISTVERSIONPREFIX= v
DISTVERSION= 0.11.0
-PORTREVISION= 22
+PORTREVISION= 23
CATEGORIES= databases
MAINTAINER= yuri@FreeBSD.org
diff --git a/databases/mydumper/Makefile b/databases/mydumper/Makefile
index 77a9a85d2dce..aa39a3a3a86f 100644
--- a/databases/mydumper/Makefile
+++ b/databases/mydumper/Makefile
@@ -1,6 +1,6 @@
PORTNAME= mydumper
DISTVERSIONPREFIX= v
-DISTVERSION= 0.19.3-1
+DISTVERSION= 0.19.4-2
CATEGORIES= databases
MAINTAINER= sunpoet@FreeBSD.org
diff --git a/databases/mydumper/distinfo b/databases/mydumper/distinfo
index 3d7748e4880c..8fc2984f3763 100644
--- a/databases/mydumper/distinfo
+++ b/databases/mydumper/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1750188002
-SHA256 (mydumper-mydumper-v0.19.3-1_GH0.tar.gz) = e78c2b02b33d5d1092c4782e4841bbba5c0531b024b63038524a3ab25606e2fa
-SIZE (mydumper-mydumper-v0.19.3-1_GH0.tar.gz) = 842877
+TIMESTAMP = 1751208120
+SHA256 (mydumper-mydumper-v0.19.4-2_GH0.tar.gz) = b5213e44a755127196a40916484e37d18dfbe304aaac50ec17f9f6aba8d0968e
+SIZE (mydumper-mydumper-v0.19.4-2_GH0.tar.gz) = 843293
diff --git a/databases/ods2sql/Makefile b/databases/ods2sql/Makefile
index 1bf49948ccf1..4ea15dad3773 100644
--- a/databases/ods2sql/Makefile
+++ b/databases/ods2sql/Makefile
@@ -1,6 +1,6 @@
PORTNAME= ods2sql
DISTVERSION= 0.4.0
-PORTREVISION= 42
+PORTREVISION= 43
CATEGORIES= databases
MAINTAINER= yuri@FreeBSD.org
diff --git a/databases/pear-DoctrineCommon/Makefile b/databases/pear-DoctrineCommon/Makefile
index acfa26eec6d4..3e8e72b8c70c 100644
--- a/databases/pear-DoctrineCommon/Makefile
+++ b/databases/pear-DoctrineCommon/Makefile
@@ -10,6 +10,9 @@ WWW= https://www.doctrine-project.org/
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/LICENSE
+DEPRECATED= Upstream no longer serves through PEAR channel and has been moved to Composer
+EXPIRATION_DATE= 2025-08-04
+
USES= pear
PEAR_CHANNEL= doctrine
NO_ARCH= yes
diff --git a/databases/pear-DoctrineDBAL/Makefile b/databases/pear-DoctrineDBAL/Makefile
index 3001ec4f6a0e..0dab58d4cc7b 100644
--- a/databases/pear-DoctrineDBAL/Makefile
+++ b/databases/pear-DoctrineDBAL/Makefile
@@ -10,6 +10,9 @@ WWW= https://www.doctrine-project.org/
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/LICENSE
+DEPRECATED= Upstream no longer serves through PEAR channel and has been moved to Composer
+EXPIRATION_DATE= 2025-08-03
+
RUN_DEPENDS= ${PEARDIR}/Doctrine/Common/Version.php:databases/pear-DoctrineCommon@${PHP_FLAVOR} \
${PEARDIR}/Symfony/Component/Console/Application.php:devel/pear-Symfony_Component_Console@${PHP_FLAVOR}
diff --git a/databases/php85-dba/Makefile b/databases/php85-dba/Makefile
new file mode 100644
index 000000000000..764ffd7c7936
--- /dev/null
+++ b/databases/php85-dba/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -dba
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-dba/files/patch-config.m4 b/databases/php85-dba/files/patch-config.m4
new file mode 100644
index 000000000000..7449b1a88029
--- /dev/null
+++ b/databases/php85-dba/files/patch-config.m4
@@ -0,0 +1,25 @@
+--- config.m4.orig 2024-09-10 16:10:06 UTC
++++ config.m4
+@@ -433,6 +433,14 @@ if test "$PHP_DB4" != "no"; then
+ THIS_PREFIX=$i
+ THIS_INCLUDE=$i/include/db5.3/db.h
+ break
++ elif test -f "$i/include/db5/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db5/db.h
++ break
++ elif test -f "$i/include/db18/db.h"; then
++ THIS_PREFIX=$i
++ THIS_INCLUDE=$i/include/db18/db.h
++ break
+ elif test -f "$i/include/db5.1/db.h"; then
+ THIS_PREFIX=$i
+ THIS_INCLUDE=$i/include/db5.1/db.h
+@@ -480,6 +488,7 @@ if test "$PHP_DB4" != "no"; then
+ db-5.3
+ db-5.1
+ db-5.0
++ db-5
+ db-4.8
+ db-4.7
+ db-4.6
diff --git a/databases/php85-mysqli/Makefile b/databases/php85-mysqli/Makefile
new file mode 100644
index 000000000000..77bd1f7f8a5d
--- /dev/null
+++ b/databases/php85-mysqli/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -mysqli
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-odbc/Makefile b/databases/php85-odbc/Makefile
new file mode 100644
index 000000000000..415b461599c9
--- /dev/null
+++ b/databases/php85-odbc/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -odbc
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-odbc/files/patch-config.m4 b/databases/php85-odbc/files/patch-config.m4
new file mode 100644
index 000000000000..55e3fb3aea0c
--- /dev/null
+++ b/databases/php85-odbc/files/patch-config.m4
@@ -0,0 +1,92 @@
+--- config.m4.orig 2024-09-10 16:10:06 UTC
++++ config.m4
+@@ -117,7 +117,7 @@ PHP_ARG_WITH([adabas],
+ PHP_ARG_WITH([adabas],
+ [for Adabas support],
+ [AS_HELP_STRING([[--with-adabas[=DIR]]],
+- [Include Adabas D support [/usr/local]])])
++ [Include Adabas D support [/usr/local]])], [no], [no])
+
+ AS_VAR_IF([PHP_ADABAS], [no], [], [
+ AS_VAR_IF([PHP_ADABAS], [yes], [PHP_ADABAS=/usr/local])
+@@ -143,7 +143,7 @@ PHP_ARG_WITH([sapdb],
+ PHP_ARG_WITH([sapdb],
+ [for SAP DB support],
+ [AS_HELP_STRING([[--with-sapdb[=DIR]]],
+- [Include SAP DB support [/usr/local]])])
++ [Include SAP DB support [/usr/local]])], [no], [no])
+
+ AS_VAR_IF([PHP_SAPDB], [no], [], [
+ AS_VAR_IF([PHP_SAPDB], [yes], [PHP_SAPDB=/usr/local])
+@@ -160,7 +160,7 @@ PHP_ARG_WITH([solid],
+ PHP_ARG_WITH([solid],
+ [for Solid support],
+ [AS_HELP_STRING([[--with-solid[=DIR]]],
+- [Include Solid support [/usr/local/solid]])])
++ [Include Solid support [/usr/local/solid]])], [no], [no])
+
+ AS_VAR_IF([PHP_SOLID], [no], [], [
+ AS_VAR_IF([PHP_SOLID], [yes], [PHP_SOLID=/usr/local/solid])
+@@ -184,7 +184,7 @@ PHP_ARG_WITH([ibm-db2],
+ PHP_ARG_WITH([ibm-db2],
+ [for IBM DB2 support],
+ [AS_HELP_STRING([[--with-ibm-db2[=DIR]]],
+- [Include IBM DB2 support [/home/db2inst1/sqllib]])])
++ [Include IBM DB2 support [/home/db2inst1/sqllib]])], [no], [no])
+
+ AS_VAR_IF([PHP_IBM_DB2], [no], [], [
+ AS_VAR_IF([PHP_IBM_DB2], [yes], [
+@@ -222,7 +222,7 @@ PHP_ARG_WITH([empress],
+ [for Empress support],
+ [AS_HELP_STRING([[--with-empress[=DIR]]],
+ [Include Empress support $EMPRESSPATH (Empress Version >= 8.60
+- required)])])
++ required)])], [no], [no])
+
+ AS_VAR_IF([PHP_EMPRESS], [no], [], [
+ AS_VAR_IF([PHP_EMPRESS], [yes], [
+@@ -246,7 +246,7 @@ PHP_ARG_WITH([empress-bcs],
+ [for Empress local access support],
+ [AS_HELP_STRING([[--with-empress-bcs[=DIR]]],
+ [Include Empress Local Access support $EMPRESSPATH (Empress Version >=
+- 8.60 required)])])
++ 8.60 required)])], [no], [no])
+
+ AS_VAR_IF([PHP_EMPRESS_BCS], [no], [], [
+ AS_VAR_IF([PHP_EMPRESS_BCS], [yes], [
+@@ -290,7 +290,7 @@ PHP_ARG_WITH([custom-odbc],
+ your include dirs. For example, you should define following for Sybase SQL
+ Anywhere 5.5.00 on QNX, prior to running this configure script:
+ CPPFLAGS="-DODBC_QNX -DSQLANY_BUG" LDFLAGS=-lunix
+- CUSTOM_ODBC_LIBS="-ldblib -lodbc"])])
++ CUSTOM_ODBC_LIBS="-ldblib -lodbc"])], [no], [no])
+
+ AS_VAR_IF([PHP_CUSTOM_ODBC], [no], [], [
+ AS_VAR_IF([PHP_CUSTOM_ODBC], [yes], [PHP_CUSTOM_ODBC=/usr/local])
+@@ -309,7 +309,7 @@ PHP_ARG_WITH([iodbc],
+ PHP_ARG_WITH([iodbc],
+ [whether to build with iODBC support],
+ [AS_HELP_STRING([--with-iodbc],
+- [Include iODBC support])])
++ [Include iODBC support])], [no], [no])
+
+ AS_VAR_IF([PHP_IODBC], [no], [], [
+ PKG_CHECK_MODULES([ODBC], [libiodbc])
+@@ -324,7 +324,7 @@ PHP_ARG_WITH([esoob],
+ PHP_ARG_WITH([esoob],
+ [for Easysoft ODBC-ODBC Bridge support],
+ [AS_HELP_STRING([[--with-esoob[=DIR]]],
+- [Include Easysoft OOB support [/usr/local/easysoft/oob/client]])])
++ [Include Easysoft OOB support [/usr/local/easysoft/oob/client]])], [no], [no])
+
+ AS_VAR_IF([PHP_ESOOB], [no], [], [
+ AS_VAR_IF([PHP_ESOOB], [yes], [PHP_ESOOB=/usr/local/easysoft/oob/client])
+@@ -371,7 +371,7 @@ PHP_ARG_WITH([dbmaker],
+ PHP_ARG_WITH([dbmaker],
+ [for DBMaker support],
+ [AS_HELP_STRING([[--with-dbmaker[=DIR]]],
+- [Include DBMaker support])])
++ [Include DBMaker support])], [no], [no])
+
+ AS_VAR_IF([PHP_DBMAKER], [no], [], [
+ AS_VAR_IF([PHP_DBMAKER], [yes], [
diff --git a/databases/php85-pdo/Makefile b/databases/php85-pdo/Makefile
new file mode 100644
index 000000000000..82a9d79b6e9d
--- /dev/null
+++ b/databases/php85-pdo/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -pdo
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-pdo/files/patch-pdo__sql__parser.c b/databases/php85-pdo/files/patch-pdo__sql__parser.c
new file mode 100644
index 000000000000..191eea16a3bd
--- /dev/null
+++ b/databases/php85-pdo/files/patch-pdo__sql__parser.c
@@ -0,0 +1,729 @@
+--- pdo_sql_parser.c.orig 2025-07-02 12:59:51 UTC
++++ pdo_sql_parser.c
+@@ -0,0 +1,726 @@
++/* Generated by re2c 3.1 */
++/*
++ +----------------------------------------------------------------------+
++ | Copyright (c) The PHP Group |
++ +----------------------------------------------------------------------+
++ | This source file is subject to version 3.01 of the PHP license, |
++ | that is bundled with this package in the file LICENSE, and is |
++ | available through the world-wide-web at the following url: |
++ | https://www.php.net/license/3_01.txt |
++ | If you did not receive a copy of the PHP license and are unable to |
++ | obtain it through the world-wide-web, please send a note to |
++ | license@php.net so we can mail you a copy immediately. |
++ +----------------------------------------------------------------------+
++ | Author: George Schlossnagle <george@omniti.com> |
++ +----------------------------------------------------------------------+
++*/
++
++#include "php.h"
++#include "php_pdo_driver.h"
++#include "pdo_sql_parser.h"
++
++static int default_scanner(pdo_scanner_t *s)
++{
++ const char *cursor = s->cur;
++
++ s->tok = cursor;
++
++
++
++{
++ YYCTYPE yych;
++ unsigned int yyaccept = 0;
++ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '"': goto yy4;
++ case '\'': goto yy6;
++ case '-': goto yy7;
++ case '/': goto yy8;
++ case ':': goto yy9;
++ case '?': goto yy10;
++ default: goto yy2;
++ }
++yy1:
++ YYCURSOR = YYMARKER;
++ switch (yyaccept) {
++ case 0: goto yy5;
++ case 1: goto yy15;
++ default: goto yy19;
++ }
++yy2:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00:
++ case '"':
++ case '\'':
++ case '-':
++ case '/':
++ case ':':
++ case '?': goto yy3;
++ default: goto yy2;
++ }
++yy3:
++ { RET(PDO_PARSER_TEXT); }
++yy4:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych >= 0x01) goto yy13;
++yy5:
++ { SKIP_ONE(PDO_PARSER_TEXT); }
++yy6:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych <= 0x00) goto yy5;
++ goto yy17;
++yy7:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '-': goto yy20;
++ default: goto yy5;
++ }
++yy8:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '*': goto yy22;
++ default: goto yy5;
++ }
++yy9:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case 'A':
++ case 'B':
++ case 'C':
++ case 'D':
++ case 'E':
++ case 'F':
++ case 'G':
++ case 'H':
++ case 'I':
++ case 'J':
++ case 'K':
++ case 'L':
++ case 'M':
++ case 'N':
++ case 'O':
++ case 'P':
++ case 'Q':
++ case 'R':
++ case 'S':
++ case 'T':
++ case 'U':
++ case 'V':
++ case 'W':
++ case 'X':
++ case 'Y':
++ case 'Z':
++ case '_':
++ case 'a':
++ case 'b':
++ case 'c':
++ case 'd':
++ case 'e':
++ case 'f':
++ case 'g':
++ case 'h':
++ case 'i':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'm':
++ case 'n':
++ case 'o':
++ case 'p':
++ case 'q':
++ case 'r':
++ case 's':
++ case 't':
++ case 'u':
++ case 'v':
++ case 'w':
++ case 'x':
++ case 'y':
++ case 'z': goto yy23;
++ case ':': goto yy25;
++ default: goto yy5;
++ }
++yy10:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '?': goto yy27;
++ default: goto yy11;
++ }
++yy11:
++ { RET(PDO_PARSER_BIND_POS); }
++yy12:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy13:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '"': goto yy14;
++ default: goto yy12;
++ }
++yy14:
++ yyaccept = 1;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '"': goto yy12;
++ default: goto yy15;
++ }
++yy15:
++ { RET(PDO_PARSER_TEXT); }
++yy16:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy17:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '\'': goto yy18;
++ default: goto yy16;
++ }
++yy18:
++ yyaccept = 2;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '\'': goto yy16;
++ default: goto yy19;
++ }
++yy19:
++ { RET(PDO_PARSER_TEXT); }
++yy20:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '\n': goto yy21;
++ default: goto yy20;
++ }
++yy21:
++ { RET(PDO_PARSER_TEXT); }
++yy22:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '*': goto yy28;
++ default: goto yy22;
++ }
++yy23:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case 'A':
++ case 'B':
++ case 'C':
++ case 'D':
++ case 'E':
++ case 'F':
++ case 'G':
++ case 'H':
++ case 'I':
++ case 'J':
++ case 'K':
++ case 'L':
++ case 'M':
++ case 'N':
++ case 'O':
++ case 'P':
++ case 'Q':
++ case 'R':
++ case 'S':
++ case 'T':
++ case 'U':
++ case 'V':
++ case 'W':
++ case 'X':
++ case 'Y':
++ case 'Z':
++ case '_':
++ case 'a':
++ case 'b':
++ case 'c':
++ case 'd':
++ case 'e':
++ case 'f':
++ case 'g':
++ case 'h':
++ case 'i':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'm':
++ case 'n':
++ case 'o':
++ case 'p':
++ case 'q':
++ case 'r':
++ case 's':
++ case 't':
++ case 'u':
++ case 'v':
++ case 'w':
++ case 'x':
++ case 'y':
++ case 'z': goto yy23;
++ default: goto yy24;
++ }
++yy24:
++ { RET(PDO_PARSER_BIND); }
++yy25:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case ':': goto yy25;
++ default: goto yy26;
++ }
++yy26:
++ { RET(PDO_PARSER_TEXT); }
++yy27:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '?': goto yy27;
++ default: goto yy26;
++ }
++yy28:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '*': goto yy28;
++ case '/': goto yy29;
++ default: goto yy22;
++ }
++yy29:
++ ++YYCURSOR;
++ goto yy21;
++}
++
++}
++
++struct placeholder {
++ const char *pos;
++ size_t len;
++ zend_string *quoted; /* quoted value */
++ int bindno;
++ struct placeholder *next;
++};
++
++struct custom_quote {
++ const char *pos;
++ size_t len;
++};
++
++static void free_param_name(zval *el) {
++ zend_string_release(Z_PTR_P(el));
++}
++
++PDO_API int pdo_parse_params(pdo_stmt_t *stmt, zend_string *inquery, zend_string **outquery)
++{
++ pdo_scanner_t s;
++ char *newbuffer;
++ ptrdiff_t t;
++ uint32_t bindno = 0;
++ int ret = 0, escapes = 0;
++ size_t newbuffer_len;
++ HashTable *params;
++ struct pdo_bound_param_data *param;
++ int query_type = PDO_PLACEHOLDER_NONE;
++ struct placeholder *placeholders = NULL, *placetail = NULL, *plc = NULL;
++ int (*scan)(pdo_scanner_t *s);
++ struct custom_quote custom_quote = {NULL, 0};
++
++ scan = stmt->dbh->methods->scanner ? stmt->dbh->methods->scanner : default_scanner;
++
++ s.cur = ZSTR_VAL(inquery);
++ s.end = s.cur + ZSTR_LEN(inquery) + 1;
++
++ /* phase 1: look for args */
++ while((t = scan(&s)) != PDO_PARSER_EOI) {
++ if (custom_quote.pos) {
++ /* Inside a custom quote */
++ if (t == PDO_PARSER_CUSTOM_QUOTE && custom_quote.len == s.cur - s.tok && !strncmp(s.tok, custom_quote.pos, custom_quote.len)) {
++ /* Matching closing quote found, end custom quoting */
++ custom_quote.pos = NULL;
++ custom_quote.len = 0;
++ } else if (t == PDO_PARSER_ESCAPED_QUESTION) {
++ /* An escaped question mark has been used inside a dollar quoted string, most likely as a workaround
++ * as a single "?" would have been parsed as placeholder, due to the lack of support for dollar quoted
++ * strings. For now, we emit a deprecation notice, but still process it */
++ php_error_docref(NULL, E_DEPRECATED, "Escaping question marks inside dollar quoted strings is not required anymore and is deprecated");
++
++ goto placeholder;
++ }
++
++ continue;
++ }
++
++ if (t == PDO_PARSER_CUSTOM_QUOTE) {
++ /* Start of a custom quote, keep a reference to search for the matching closing quote */
++ custom_quote.pos = s.tok;
++ custom_quote.len = s.cur - s.tok;
++
++ continue;
++ }
++
++ if (t == PDO_PARSER_BIND || t == PDO_PARSER_BIND_POS || t == PDO_PARSER_ESCAPED_QUESTION) {
++ if (t == PDO_PARSER_ESCAPED_QUESTION && stmt->supports_placeholders == PDO_PLACEHOLDER_POSITIONAL) {
++ /* escaped question marks unsupported, treat as text */
++ continue;
++ }
++
++ if (t == PDO_PARSER_BIND) {
++ ptrdiff_t len = s.cur - s.tok;
++ if ((ZSTR_VAL(inquery) < (s.cur - len)) && isalnum(*(s.cur - len - 1))) {
++ continue;
++ }
++ query_type |= PDO_PLACEHOLDER_NAMED;
++ } else if (t == PDO_PARSER_BIND_POS) {
++ query_type |= PDO_PLACEHOLDER_POSITIONAL;
++ }
++
++placeholder:
++ plc = emalloc(sizeof(*plc));
++ memset(plc, 0, sizeof(*plc));
++ plc->next = NULL;
++ plc->pos = s.tok;
++ plc->len = s.cur - s.tok;
++
++ if (t == PDO_PARSER_ESCAPED_QUESTION) {
++ plc->bindno = PDO_PARSER_BINDNO_ESCAPED_CHAR;
++ plc->quoted = ZSTR_CHAR('?');
++ escapes++;
++ } else {
++ plc->bindno = bindno++;
++ }
++
++ if (placetail) {
++ placetail->next = plc;
++ } else {
++ placeholders = plc;
++ }
++ placetail = plc;
++ }
++ }
++
++ /* did the query make sense to me? */
++ if (query_type == (PDO_PLACEHOLDER_NAMED|PDO_PLACEHOLDER_POSITIONAL)) {
++ /* they mixed both types; punt */
++ pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "mixed named and positional parameters");
++ ret = -1;
++ goto clean_up;
++ }
++
++ params = stmt->bound_params;
++ if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE && params && bindno != zend_hash_num_elements(params)) {
++ /* extra bit of validation for instances when same params are bound more than once */
++ if (query_type != PDO_PLACEHOLDER_POSITIONAL && bindno > zend_hash_num_elements(params)) {
++ int ok = 1;
++ for (plc = placeholders; plc; plc = plc->next) {
++ if ((param = zend_hash_str_find_ptr(params, plc->pos, plc->len)) == NULL) {
++ ok = 0;
++ break;
++ }
++ }
++ if (ok) {
++ goto safe;
++ }
++ }
++ pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "number of bound variables does not match number of tokens");
++ ret = -1;
++ goto clean_up;
++ }
++
++ if (!placeholders) {
++ /* nothing to do; good! */
++ return 0;
++ }
++
++ if (stmt->supports_placeholders == query_type && !stmt->named_rewrite_template) {
++ /* query matches native syntax */
++ if (escapes) {
++ newbuffer_len = ZSTR_LEN(inquery);
++ goto rewrite;
++ }
++
++ ret = 0;
++ goto clean_up;
++ }
++
++ if (query_type == PDO_PLACEHOLDER_NAMED && stmt->named_rewrite_template) {
++ /* magic/hack.
++ * We we pretend that the query was positional even if
++ * it was named so that we fall into the
++ * named rewrite case below. Not too pretty,
++ * but it works. */
++ query_type = PDO_PLACEHOLDER_POSITIONAL;
++ }
++
++safe:
++ /* what are we going to do ? */
++ if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) {
++ /* query generation */
++
++ newbuffer_len = ZSTR_LEN(inquery);
++
++ /* let's quote all the values */
++ for (plc = placeholders; plc && params; plc = plc->next) {
++ if (plc->bindno == PDO_PARSER_BINDNO_ESCAPED_CHAR) {
++ /* escaped character */
++ continue;
++ }
++
++ if (query_type == PDO_PLACEHOLDER_NONE) {
++ continue;
++ }
++
++ if (query_type == PDO_PLACEHOLDER_POSITIONAL) {
++ param = zend_hash_index_find_ptr(params, plc->bindno);
++ } else {
++ param = zend_hash_str_find_ptr(params, plc->pos, plc->len);
++ }
++ if (param == NULL) {
++ /* parameter was not defined */
++ ret = -1;
++ pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "parameter was not defined");
++ goto clean_up;
++ }
++ if (stmt->dbh->methods->quoter) {
++ zval *parameter;
++ if (Z_ISREF(param->parameter)) {
++ parameter = Z_REFVAL(param->parameter);
++ } else {
++ parameter = &param->parameter;
++ }
++ if (param->param_type == PDO_PARAM_LOB && Z_TYPE_P(parameter) == IS_RESOURCE) {
++ php_stream *stm;
++
++ php_stream_from_zval_no_verify(stm, parameter);
++ if (stm) {
++ zend_string *buf;
++
++ buf = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0);
++ if (!buf) {
++ buf = ZSTR_EMPTY_ALLOC();
++ }
++
++ plc->quoted = stmt->dbh->methods->quoter(stmt->dbh, buf, param->param_type);
++
++ if (buf) {
++ zend_string_release_ex(buf, 0);
++ }
++ if (plc->quoted == NULL) {
++ /* bork */
++ ret = -1;
++ strncpy(stmt->error_code, stmt->dbh->error_code, 6);
++ goto clean_up;
++ }
++
++ } else {
++ pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource");
++ ret = -1;
++ goto clean_up;
++ }
++ } else {
++ enum pdo_param_type param_type = param->param_type;
++ zend_string *buf = NULL;
++
++ /* assume all types are nullable */
++ if (Z_TYPE_P(parameter) == IS_NULL) {
++ param_type = PDO_PARAM_NULL;
++ }
++
++ switch (param_type) {
++ case PDO_PARAM_BOOL:
++ plc->quoted = zend_is_true(parameter) ? ZSTR_CHAR('1') : ZSTR_CHAR('0');
++ break;
++
++ case PDO_PARAM_INT:
++ plc->quoted = zend_long_to_str(zval_get_long(parameter));
++ break;
++
++ case PDO_PARAM_NULL:
++ plc->quoted = ZSTR_KNOWN(ZEND_STR_NULL);
++ break;
++
++ default: {
++ buf = zval_try_get_string(parameter);
++ /* parameter does not have a string representation, buf == NULL */
++ if (EG(exception)) {
++ /* bork */
++ ret = -1;
++ strncpy(stmt->error_code, stmt->dbh->error_code, 6);
++ goto clean_up;
++ }
++
++ plc->quoted = stmt->dbh->methods->quoter(stmt->dbh, buf, param_type);
++ }
++ }
++
++ if (buf) {
++ zend_string_release_ex(buf, 0);
++ }
++ }
++ } else {
++ zval *parameter;
++ if (Z_ISREF(param->parameter)) {
++ parameter = Z_REFVAL(param->parameter);
++ } else {
++ parameter = &param->parameter;
++ }
++ plc->quoted = zend_string_copy(Z_STR_P(parameter));
++ }
++ newbuffer_len += ZSTR_LEN(plc->quoted);
++ }
++
++rewrite:
++ /* allocate output buffer */
++ *outquery = zend_string_alloc(newbuffer_len, 0);
++ newbuffer = ZSTR_VAL(*outquery);
++
++ /* and build the query */
++ const char *ptr = ZSTR_VAL(inquery);
++ plc = placeholders;
++
++ do {
++ t = plc->pos - ptr;
++ if (t) {
++ memcpy(newbuffer, ptr, t);
++ newbuffer += t;
++ }
++ if (plc->quoted) {
++ memcpy(newbuffer, ZSTR_VAL(plc->quoted), ZSTR_LEN(plc->quoted));
++ newbuffer += ZSTR_LEN(plc->quoted);
++ } else {
++ memcpy(newbuffer, plc->pos, plc->len);
++ newbuffer += plc->len;
++ }
++ ptr = plc->pos + plc->len;
++
++ plc = plc->next;
++ } while (plc);
++
++ t = ZSTR_VAL(inquery) + ZSTR_LEN(inquery) - ptr;
++ if (t) {
++ memcpy(newbuffer, ptr, t);
++ newbuffer += t;
++ }
++ *newbuffer = '\0';
++ ZSTR_LEN(*outquery) = newbuffer - ZSTR_VAL(*outquery);
++
++ ret = 1;
++ goto clean_up;
++
++ } else if (query_type == PDO_PLACEHOLDER_POSITIONAL) {
++ /* rewrite ? to :pdoX */
++ const char *tmpl = stmt->named_rewrite_template ? stmt->named_rewrite_template : ":pdo%d";
++ int bind_no = 1;
++
++ newbuffer_len = ZSTR_LEN(inquery);
++
++ if (stmt->bound_param_map == NULL) {
++ ALLOC_HASHTABLE(stmt->bound_param_map);
++ zend_hash_init(stmt->bound_param_map, 13, NULL, free_param_name, 0);
++ }
++
++ for (plc = placeholders; plc; plc = plc->next) {
++ int skip_map = 0;
++ zend_string *p;
++ zend_string *idxbuf;
++
++ if (plc->bindno == PDO_PARSER_BINDNO_ESCAPED_CHAR) {
++ continue;
++ }
++
++ zend_string *name = zend_string_init(plc->pos, plc->len, 0);
++
++ /* check if bound parameter is already available */
++ if (zend_string_equals_literal(name, "?") || (p = zend_hash_find_ptr(stmt->bound_param_map, name)) == NULL) {
++ idxbuf = zend_strpprintf(0, tmpl, bind_no++);
++ } else {
++ idxbuf = zend_string_copy(p);
++ skip_map = 1;
++ }
++
++ plc->quoted = idxbuf;
++ newbuffer_len += ZSTR_LEN(plc->quoted);
++
++ if (!skip_map && stmt->named_rewrite_template) {
++ /* create a mapping */
++ zend_hash_update_ptr(stmt->bound_param_map, name, zend_string_copy(plc->quoted));
++ }
++
++ /* map number to name */
++ zend_hash_index_update_ptr(stmt->bound_param_map, plc->bindno, zend_string_copy(plc->quoted));
++
++ zend_string_release(name);
++ }
++
++ goto rewrite;
++
++ } else {
++ /* rewrite :name to ? */
++
++ newbuffer_len = ZSTR_LEN(inquery);
++
++ if (stmt->bound_param_map == NULL) {
++ ALLOC_HASHTABLE(stmt->bound_param_map);
++ zend_hash_init(stmt->bound_param_map, 13, NULL, free_param_name, 0);
++ }
++
++ for (plc = placeholders; plc; plc = plc->next) {
++ zend_string *name = zend_string_init(plc->pos, plc->len, 0);
++ zend_hash_index_update_ptr(stmt->bound_param_map, plc->bindno, name);
++ plc->quoted = ZSTR_CHAR('?');
++ newbuffer_len -= plc->len - 1;
++ }
++
++ goto rewrite;
++ }
++
++clean_up:
++
++ while (placeholders) {
++ plc = placeholders;
++ placeholders = plc->next;
++ if (plc->quoted) {
++ zend_string_release_ex(plc->quoted, 0);
++ }
++ efree(plc);
++ }
++
++ return ret;
++}
diff --git a/databases/php85-pdo_dblib/Makefile b/databases/php85-pdo_dblib/Makefile
new file mode 100644
index 000000000000..1861a409bc3c
--- /dev/null
+++ b/databases/php85-pdo_dblib/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -pdo_dblib
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-pdo_firebird/Makefile b/databases/php85-pdo_firebird/Makefile
new file mode 100644
index 000000000000..2f22894505f4
--- /dev/null
+++ b/databases/php85-pdo_firebird/Makefile
@@ -0,0 +1,9 @@
+CATEGORIES= databases
+
+PORTREVISION= 0
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -pdo_firebird
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-pdo_mysql/Makefile b/databases/php85-pdo_mysql/Makefile
new file mode 100644
index 000000000000..c61de9bbc13d
--- /dev/null
+++ b/databases/php85-pdo_mysql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -pdo_mysql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-pdo_mysql/files/patch-mysql__sql__parser.c b/databases/php85-pdo_mysql/files/patch-mysql__sql__parser.c
new file mode 100644
index 000000000000..9a6c3b11bb6e
--- /dev/null
+++ b/databases/php85-pdo_mysql/files/patch-mysql__sql__parser.c
@@ -0,0 +1,398 @@
+--- mysql_sql_parser.c.orig 2025-07-02 13:18:02 UTC
++++ mysql_sql_parser.c
+@@ -0,0 +1,395 @@
++/* Generated by re2c 3.1 */
++/*
++ +----------------------------------------------------------------------+
++ | Copyright (c) The PHP Group |
++ +----------------------------------------------------------------------+
++ | This source file is subject to version 3.01 of the PHP license, |
++ | that is bundled with this package in the file LICENSE, and is |
++ | available through the world-wide-web at the following url: |
++ | https://www.php.net/license/3_01.txt |
++ | If you did not receive a copy of the PHP license and are unable to |
++ | obtain it through the world-wide-web, please send a note to |
++ | license@php.net so we can mail you a copy immediately. |
++ +----------------------------------------------------------------------+
++ | Author: Matteo Beccati <mbeccati@php.net> |
++ +----------------------------------------------------------------------+
++*/
++
++
++#include "php.h"
++#include "ext/pdo/php_pdo_driver.h"
++#include "ext/pdo/pdo_sql_parser.h"
++
++int pdo_mysql_scanner(pdo_scanner_t *s)
++{
++ const char *cursor = s->cur;
++
++ s->tok = cursor;
++
++
++
++{
++ YYCTYPE yych;
++ unsigned int yyaccept = 0;
++ if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '"': goto yy4;
++ case '#': goto yy6;
++ case '\'': goto yy7;
++ case '-': goto yy8;
++ case '/': goto yy9;
++ case ':': goto yy10;
++ case '?': goto yy11;
++ case '`': goto yy13;
++ default: goto yy2;
++ }
++yy1:
++ YYCURSOR = YYMARKER;
++ switch (yyaccept) {
++ case 0: goto yy5;
++ case 1: goto yy17;
++ case 2: goto yy24;
++ default: goto yy36;
++ }
++yy2:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00:
++ case '"':
++ case '#':
++ case '\'':
++ case '-':
++ case '/':
++ case ':':
++ case '?':
++ case '`': goto yy3;
++ default: goto yy2;
++ }
++yy3:
++ { RET(PDO_PARSER_TEXT); }
++yy4:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych >= 0x01) goto yy15;
++yy5:
++ { SKIP_ONE(PDO_PARSER_TEXT); }
++yy6:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '\n': goto yy5;
++ default: goto yy19;
++ }
++yy7:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych <= 0x00) goto yy5;
++ goto yy22;
++yy8:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ switch (yych) {
++ case '-': goto yy26;
++ default: goto yy5;
++ }
++yy9:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '*': goto yy27;
++ default: goto yy5;
++ }
++yy10:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case 'A':
++ case 'B':
++ case 'C':
++ case 'D':
++ case 'E':
++ case 'F':
++ case 'G':
++ case 'H':
++ case 'I':
++ case 'J':
++ case 'K':
++ case 'L':
++ case 'M':
++ case 'N':
++ case 'O':
++ case 'P':
++ case 'Q':
++ case 'R':
++ case 'S':
++ case 'T':
++ case 'U':
++ case 'V':
++ case 'W':
++ case 'X':
++ case 'Y':
++ case 'Z':
++ case '_':
++ case 'a':
++ case 'b':
++ case 'c':
++ case 'd':
++ case 'e':
++ case 'f':
++ case 'g':
++ case 'h':
++ case 'i':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'm':
++ case 'n':
++ case 'o':
++ case 'p':
++ case 'q':
++ case 'r':
++ case 's':
++ case 't':
++ case 'u':
++ case 'v':
++ case 'w':
++ case 'x':
++ case 'y':
++ case 'z': goto yy28;
++ case ':': goto yy30;
++ default: goto yy5;
++ }
++yy11:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '?': goto yy32;
++ default: goto yy12;
++ }
++yy12:
++ { RET(PDO_PARSER_BIND_POS); }
++yy13:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych <= 0x00) goto yy5;
++ goto yy34;
++yy14:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy15:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '"': goto yy16;
++ case '\\': goto yy18;
++ default: goto yy14;
++ }
++yy16:
++ yyaccept = 1;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '"': goto yy14;
++ default: goto yy17;
++ }
++yy17:
++ { RET(PDO_PARSER_TEXT); }
++yy18:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ if (yych <= 0x00) goto yy1;
++ goto yy14;
++yy19:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '\n': goto yy20;
++ default: goto yy19;
++ }
++yy20:
++ { RET(PDO_PARSER_TEXT); }
++yy21:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy22:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '\'': goto yy23;
++ case '\\': goto yy25;
++ default: goto yy21;
++ }
++yy23:
++ yyaccept = 2;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '\'': goto yy21;
++ default: goto yy24;
++ }
++yy24:
++ { RET(PDO_PARSER_TEXT); }
++yy25:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ if (yych <= 0x00) goto yy1;
++ goto yy21;
++yy26:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '\t':
++ case '\v':
++ case '\f':
++ case '\r':
++ case ' ': goto yy19;
++ default: goto yy1;
++ }
++yy27:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '*': goto yy37;
++ default: goto yy27;
++ }
++yy28:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case 'A':
++ case 'B':
++ case 'C':
++ case 'D':
++ case 'E':
++ case 'F':
++ case 'G':
++ case 'H':
++ case 'I':
++ case 'J':
++ case 'K':
++ case 'L':
++ case 'M':
++ case 'N':
++ case 'O':
++ case 'P':
++ case 'Q':
++ case 'R':
++ case 'S':
++ case 'T':
++ case 'U':
++ case 'V':
++ case 'W':
++ case 'X':
++ case 'Y':
++ case 'Z':
++ case '_':
++ case 'a':
++ case 'b':
++ case 'c':
++ case 'd':
++ case 'e':
++ case 'f':
++ case 'g':
++ case 'h':
++ case 'i':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'm':
++ case 'n':
++ case 'o':
++ case 'p':
++ case 'q':
++ case 'r':
++ case 's':
++ case 't':
++ case 'u':
++ case 'v':
++ case 'w':
++ case 'x':
++ case 'y':
++ case 'z': goto yy28;
++ default: goto yy29;
++ }
++yy29:
++ { RET(PDO_PARSER_BIND); }
++yy30:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case ':': goto yy30;
++ default: goto yy31;
++ }
++yy31:
++ { RET(PDO_PARSER_TEXT); }
++yy32:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '?': goto yy32;
++ default: goto yy31;
++ }
++yy33:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy34:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '`': goto yy35;
++ default: goto yy33;
++ }
++yy35:
++ yyaccept = 3;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '`': goto yy33;
++ default: goto yy36;
++ }
++yy36:
++ { RET(PDO_PARSER_TEXT); }
++yy37:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '*': goto yy37;
++ case '/': goto yy38;
++ default: goto yy27;
++ }
++yy38:
++ ++YYCURSOR;
++ goto yy20;
++}
++
++}
diff --git a/databases/php85-pdo_odbc/Makefile b/databases/php85-pdo_odbc/Makefile
new file mode 100644
index 000000000000..41bf11b6e9b1
--- /dev/null
+++ b/databases/php85-pdo_odbc/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -pdo_odbc
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-pdo_pgsql/Makefile b/databases/php85-pdo_pgsql/Makefile
new file mode 100644
index 000000000000..5956ab7c84cf
--- /dev/null
+++ b/databases/php85-pdo_pgsql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -pdo_pgsql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-pdo_pgsql/files/patch-pgsql__sql__parser.c b/databases/php85-pdo_pgsql/files/patch-pgsql__sql__parser.c
new file mode 100644
index 000000000000..e2f535ec545e
--- /dev/null
+++ b/databases/php85-pdo_pgsql/files/patch-pgsql__sql__parser.c
@@ -0,0 +1,528 @@
+--- pgsql_sql_parser.c.orig 2025-07-02 13:28:41 UTC
++++ pgsql_sql_parser.c
+@@ -0,0 +1,525 @@
++/* Generated by re2c 3.1 */
++/*
++ +----------------------------------------------------------------------+
++ | Copyright (c) The PHP Group |
++ +----------------------------------------------------------------------+
++ | This source file is subject to version 3.01 of the PHP license, |
++ | that is bundled with this package in the file LICENSE, and is |
++ | available through the world-wide-web at the following url: |
++ | https://www.php.net/license/3_01.txt |
++ | If you did not receive a copy of the PHP license and are unable to |
++ | obtain it through the world-wide-web, please send a note to |
++ | license@php.net so we can mail you a copy immediately. |
++ +----------------------------------------------------------------------+
++ | Author: Matteo Beccati <mbeccati@php.net> |
++ +----------------------------------------------------------------------+
++*/
++
++
++#include "php.h"
++#include "ext/pdo/php_pdo_driver.h"
++#include "ext/pdo/pdo_sql_parser.h"
++
++int pdo_pgsql_scanner(pdo_scanner_t *s)
++{
++ const char *cursor = s->cur;
++
++ s->tok = cursor;
++
++
++
++{
++ YYCTYPE yych;
++ unsigned int yyaccept = 0;
++ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '"': goto yy4;
++ case '$': goto yy6;
++ case '\'': goto yy7;
++ case '-': goto yy8;
++ case '/': goto yy9;
++ case ':': goto yy10;
++ case '?': goto yy11;
++ case 'E':
++ case 'e': goto yy13;
++ default: goto yy2;
++ }
++yy1:
++ YYCURSOR = YYMARKER;
++ switch (yyaccept) {
++ case 0: goto yy5;
++ case 1: goto yy17;
++ case 2: goto yy23;
++ default: goto yy35;
++ }
++yy2:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00:
++ case '"':
++ case '$':
++ case '\'':
++ case '-':
++ case '/':
++ case ':':
++ case '?':
++ case 'E':
++ case 'e': goto yy3;
++ default: goto yy2;
++ }
++yy3:
++ { RET(PDO_PARSER_TEXT); }
++yy4:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych >= 0x01) goto yy15;
++yy5:
++ { SKIP_ONE(PDO_PARSER_TEXT); }
++yy6:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ switch (yych) {
++ case 0x00:
++ case 0x01:
++ case 0x02:
++ case 0x03:
++ case 0x04:
++ case 0x05:
++ case 0x06:
++ case 0x07:
++ case 0x08:
++ case '\t':
++ case '\n':
++ case '\v':
++ case '\f':
++ case '\r':
++ case 0x0E:
++ case 0x0F:
++ case 0x10:
++ case 0x11:
++ case 0x12:
++ case 0x13:
++ case 0x14:
++ case 0x15:
++ case 0x16:
++ case 0x17:
++ case 0x18:
++ case 0x19:
++ case 0x1A:
++ case 0x1B:
++ case 0x1C:
++ case 0x1D:
++ case 0x1E:
++ case 0x1F:
++ case ' ':
++ case '!':
++ case '"':
++ case '#':
++ case '%':
++ case '&':
++ case '\'':
++ case '(':
++ case ')':
++ case '*':
++ case '+':
++ case ',':
++ case '-':
++ case '.':
++ case '/':
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case ':':
++ case ';':
++ case '<':
++ case '=':
++ case '>':
++ case '?':
++ case '@':
++ case '[':
++ case '\\':
++ case ']':
++ case '^':
++ case '`':
++ case '{':
++ case '|':
++ case '}':
++ case '~':
++ case 0x7F: goto yy5;
++ case '$': goto yy18;
++ default: goto yy19;
++ }
++yy7:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych <= 0x00) goto yy5;
++ goto yy21;
++yy8:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '-': goto yy24;
++ default: goto yy5;
++ }
++yy9:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '*': goto yy26;
++ default: goto yy5;
++ }
++yy10:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case 'A':
++ case 'B':
++ case 'C':
++ case 'D':
++ case 'E':
++ case 'F':
++ case 'G':
++ case 'H':
++ case 'I':
++ case 'J':
++ case 'K':
++ case 'L':
++ case 'M':
++ case 'N':
++ case 'O':
++ case 'P':
++ case 'Q':
++ case 'R':
++ case 'S':
++ case 'T':
++ case 'U':
++ case 'V':
++ case 'W':
++ case 'X':
++ case 'Y':
++ case 'Z':
++ case '_':
++ case 'a':
++ case 'b':
++ case 'c':
++ case 'd':
++ case 'e':
++ case 'f':
++ case 'g':
++ case 'h':
++ case 'i':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'm':
++ case 'n':
++ case 'o':
++ case 'p':
++ case 'q':
++ case 'r':
++ case 's':
++ case 't':
++ case 'u':
++ case 'v':
++ case 'w':
++ case 'x':
++ case 'y':
++ case 'z': goto yy27;
++ case ':': goto yy29;
++ default: goto yy5;
++ }
++yy11:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '?': goto yy31;
++ default: goto yy12;
++ }
++yy12:
++ { RET(PDO_PARSER_BIND_POS); }
++yy13:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ switch (yych) {
++ case '\'': goto yy32;
++ default: goto yy5;
++ }
++yy14:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy15:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '"': goto yy16;
++ default: goto yy14;
++ }
++yy16:
++ yyaccept = 1;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '"': goto yy14;
++ default: goto yy17;
++ }
++yy17:
++ { RET(PDO_PARSER_TEXT); }
++yy18:
++ ++YYCURSOR;
++ { RET(PDO_PARSER_CUSTOM_QUOTE); }
++yy19:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00:
++ case 0x01:
++ case 0x02:
++ case 0x03:
++ case 0x04:
++ case 0x05:
++ case 0x06:
++ case 0x07:
++ case 0x08:
++ case '\t':
++ case '\n':
++ case '\v':
++ case '\f':
++ case '\r':
++ case 0x0E:
++ case 0x0F:
++ case 0x10:
++ case 0x11:
++ case 0x12:
++ case 0x13:
++ case 0x14:
++ case 0x15:
++ case 0x16:
++ case 0x17:
++ case 0x18:
++ case 0x19:
++ case 0x1A:
++ case 0x1B:
++ case 0x1C:
++ case 0x1D:
++ case 0x1E:
++ case 0x1F:
++ case ' ':
++ case '!':
++ case '"':
++ case '#':
++ case '%':
++ case '&':
++ case '\'':
++ case '(':
++ case ')':
++ case '*':
++ case '+':
++ case ',':
++ case '-':
++ case '.':
++ case '/':
++ case ':':
++ case ';':
++ case '<':
++ case '=':
++ case '>':
++ case '?':
++ case '@':
++ case '[':
++ case '\\':
++ case ']':
++ case '^':
++ case '`':
++ case '{':
++ case '|':
++ case '}':
++ case '~':
++ case 0x7F: goto yy1;
++ case '$': goto yy18;
++ default: goto yy19;
++ }
++yy20:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy21:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '\'': goto yy22;
++ default: goto yy20;
++ }
++yy22:
++ yyaccept = 2;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '\'': goto yy20;
++ default: goto yy23;
++ }
++yy23:
++ { RET(PDO_PARSER_TEXT); }
++yy24:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '\n': goto yy25;
++ default: goto yy24;
++ }
++yy25:
++ { RET(PDO_PARSER_TEXT); }
++yy26:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '*': goto yy33;
++ default: goto yy26;
++ }
++yy27:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case 'A':
++ case 'B':
++ case 'C':
++ case 'D':
++ case 'E':
++ case 'F':
++ case 'G':
++ case 'H':
++ case 'I':
++ case 'J':
++ case 'K':
++ case 'L':
++ case 'M':
++ case 'N':
++ case 'O':
++ case 'P':
++ case 'Q':
++ case 'R':
++ case 'S':
++ case 'T':
++ case 'U':
++ case 'V':
++ case 'W':
++ case 'X':
++ case 'Y':
++ case 'Z':
++ case '_':
++ case 'a':
++ case 'b':
++ case 'c':
++ case 'd':
++ case 'e':
++ case 'f':
++ case 'g':
++ case 'h':
++ case 'i':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'm':
++ case 'n':
++ case 'o':
++ case 'p':
++ case 'q':
++ case 'r':
++ case 's':
++ case 't':
++ case 'u':
++ case 'v':
++ case 'w':
++ case 'x':
++ case 'y':
++ case 'z': goto yy27;
++ default: goto yy28;
++ }
++yy28:
++ { RET(PDO_PARSER_BIND); }
++yy29:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case ':': goto yy29;
++ default: goto yy30;
++ }
++yy30:
++ { RET(PDO_PARSER_TEXT); }
++yy31:
++ ++YYCURSOR;
++ { RET(PDO_PARSER_ESCAPED_QUESTION); }
++yy32:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '\'': goto yy34;
++ case '\\': goto yy36;
++ default: goto yy32;
++ }
++yy33:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '*': goto yy33;
++ case '/': goto yy37;
++ default: goto yy26;
++ }
++yy34:
++ yyaccept = 3;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '\'': goto yy32;
++ default: goto yy35;
++ }
++yy35:
++ { RET(PDO_PARSER_TEXT); }
++yy36:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ if (yych <= 0x00) goto yy1;
++ goto yy32;
++yy37:
++ ++YYCURSOR;
++ goto yy25;
++}
++
++}
diff --git a/databases/php85-pdo_sqlite/Makefile b/databases/php85-pdo_sqlite/Makefile
new file mode 100644
index 000000000000..c18fe80e2621
--- /dev/null
+++ b/databases/php85-pdo_sqlite/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -pdo_sqlite
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-pdo_sqlite/files/patch-sqlite__sql__parser.c b/databases/php85-pdo_sqlite/files/patch-sqlite__sql__parser.c
new file mode 100644
index 000000000000..5770c5cf3f7f
--- /dev/null
+++ b/databases/php85-pdo_sqlite/files/patch-sqlite__sql__parser.c
@@ -0,0 +1,398 @@
+--- sqlite_sql_parser.c.orig 2025-07-02 13:27:28 UTC
++++ sqlite_sql_parser.c
+@@ -0,0 +1,395 @@
++/* Generated by re2c 3.1 */
++/*
++ +----------------------------------------------------------------------+
++ | Copyright (c) The PHP Group |
++ +----------------------------------------------------------------------+
++ | This source file is subject to version 3.01 of the PHP license, |
++ | that is bundled with this package in the file LICENSE, and is |
++ | available through the world-wide-web at the following url: |
++ | https://www.php.net/license/3_01.txt |
++ | If you did not receive a copy of the PHP license and are unable to |
++ | obtain it through the world-wide-web, please send a note to |
++ | license@php.net so we can mail you a copy immediately. |
++ +----------------------------------------------------------------------+
++ | Author: Matteo Beccati <mbeccati@php.net> |
++ +----------------------------------------------------------------------+
++*/
++
++
++#include "php.h"
++#include "ext/pdo/php_pdo_driver.h"
++#include "ext/pdo/pdo_sql_parser.h"
++
++int pdo_sqlite_scanner(pdo_scanner_t *s)
++{
++ const char *cursor = s->cur;
++
++ s->tok = cursor;
++
++
++
++{
++ YYCTYPE yych;
++ unsigned int yyaccept = 0;
++ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '"': goto yy4;
++ case '\'': goto yy6;
++ case '-': goto yy7;
++ case '/': goto yy8;
++ case ':': goto yy9;
++ case '?': goto yy10;
++ case '[': goto yy12;
++ case '`': goto yy13;
++ default: goto yy2;
++ }
++yy1:
++ YYCURSOR = YYMARKER;
++ switch (yyaccept) {
++ case 0: goto yy5;
++ case 1: goto yy17;
++ case 2: goto yy21;
++ case 3: goto yy33;
++ default: goto yy37;
++ }
++yy2:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00:
++ case '"':
++ case '\'':
++ case '-':
++ case '/':
++ case ':':
++ case '?':
++ case '[':
++ case '`': goto yy3;
++ default: goto yy2;
++ }
++yy3:
++ { RET(PDO_PARSER_TEXT); }
++yy4:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych >= 0x01) goto yy15;
++yy5:
++ { SKIP_ONE(PDO_PARSER_TEXT); }
++yy6:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych <= 0x00) goto yy5;
++ goto yy19;
++yy7:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '-': goto yy22;
++ default: goto yy5;
++ }
++yy8:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '*': goto yy24;
++ default: goto yy5;
++ }
++yy9:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case 'A':
++ case 'B':
++ case 'C':
++ case 'D':
++ case 'E':
++ case 'F':
++ case 'G':
++ case 'H':
++ case 'I':
++ case 'J':
++ case 'K':
++ case 'L':
++ case 'M':
++ case 'N':
++ case 'O':
++ case 'P':
++ case 'Q':
++ case 'R':
++ case 'S':
++ case 'T':
++ case 'U':
++ case 'V':
++ case 'W':
++ case 'X':
++ case 'Y':
++ case 'Z':
++ case '_':
++ case 'a':
++ case 'b':
++ case 'c':
++ case 'd':
++ case 'e':
++ case 'f':
++ case 'g':
++ case 'h':
++ case 'i':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'm':
++ case 'n':
++ case 'o':
++ case 'p':
++ case 'q':
++ case 'r':
++ case 's':
++ case 't':
++ case 'u':
++ case 'v':
++ case 'w':
++ case 'x':
++ case 'y':
++ case 'z': goto yy25;
++ case ':': goto yy27;
++ default: goto yy5;
++ }
++yy10:
++ yych = *++YYCURSOR;
++ switch (yych) {
++ case '?': goto yy29;
++ default: goto yy11;
++ }
++yy11:
++ { RET(PDO_PARSER_BIND_POS); }
++yy12:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych <= 0x00) goto yy5;
++ goto yy31;
++yy13:
++ yyaccept = 0;
++ yych = *(YYMARKER = ++YYCURSOR);
++ if (yych <= 0x00) goto yy5;
++ goto yy35;
++yy14:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy15:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '"': goto yy16;
++ default: goto yy14;
++ }
++yy16:
++ yyaccept = 1;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy17;
++ case '"': goto yy16;
++ default: goto yy14;
++ }
++yy17:
++ { RET(PDO_PARSER_TEXT); }
++yy18:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy19:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '\'': goto yy20;
++ default: goto yy18;
++ }
++yy20:
++ yyaccept = 2;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy21;
++ case '\'': goto yy20;
++ default: goto yy18;
++ }
++yy21:
++ { RET(PDO_PARSER_TEXT); }
++yy22:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '\n': goto yy23;
++ default: goto yy22;
++ }
++yy23:
++ { RET(PDO_PARSER_TEXT); }
++yy24:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '*': goto yy38;
++ default: goto yy24;
++ }
++yy25:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '0':
++ case '1':
++ case '2':
++ case '3':
++ case '4':
++ case '5':
++ case '6':
++ case '7':
++ case '8':
++ case '9':
++ case 'A':
++ case 'B':
++ case 'C':
++ case 'D':
++ case 'E':
++ case 'F':
++ case 'G':
++ case 'H':
++ case 'I':
++ case 'J':
++ case 'K':
++ case 'L':
++ case 'M':
++ case 'N':
++ case 'O':
++ case 'P':
++ case 'Q':
++ case 'R':
++ case 'S':
++ case 'T':
++ case 'U':
++ case 'V':
++ case 'W':
++ case 'X':
++ case 'Y':
++ case 'Z':
++ case '_':
++ case 'a':
++ case 'b':
++ case 'c':
++ case 'd':
++ case 'e':
++ case 'f':
++ case 'g':
++ case 'h':
++ case 'i':
++ case 'j':
++ case 'k':
++ case 'l':
++ case 'm':
++ case 'n':
++ case 'o':
++ case 'p':
++ case 'q':
++ case 'r':
++ case 's':
++ case 't':
++ case 'u':
++ case 'v':
++ case 'w':
++ case 'x':
++ case 'y':
++ case 'z': goto yy25;
++ default: goto yy26;
++ }
++yy26:
++ { RET(PDO_PARSER_BIND); }
++yy27:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case ':': goto yy27;
++ default: goto yy28;
++ }
++yy28:
++ { RET(PDO_PARSER_TEXT); }
++yy29:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '?': goto yy29;
++ default: goto yy28;
++ }
++yy30:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy31:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case ']': goto yy32;
++ default: goto yy30;
++ }
++yy32:
++ yyaccept = 3;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy33;
++ case ']': goto yy32;
++ default: goto yy30;
++ }
++yy33:
++ { RET(PDO_PARSER_TEXT); }
++yy34:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++yy35:
++ switch (yych) {
++ case 0x00: goto yy1;
++ case '`': goto yy36;
++ default: goto yy34;
++ }
++yy36:
++ yyaccept = 4;
++ YYMARKER = ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case 0x00: goto yy37;
++ case '`': goto yy36;
++ default: goto yy34;
++ }
++yy37:
++ { RET(PDO_PARSER_TEXT); }
++yy38:
++ ++YYCURSOR;
++ if (YYLIMIT <= YYCURSOR) YYFILL(1);
++ yych = *YYCURSOR;
++ switch (yych) {
++ case '*': goto yy38;
++ case '/': goto yy39;
++ default: goto yy24;
++ }
++yy39:
++ ++YYCURSOR;
++ goto yy23;
++}
++
++}
diff --git a/databases/php85-pgsql/Makefile b/databases/php85-pgsql/Makefile
new file mode 100644
index 000000000000..429049846f13
--- /dev/null
+++ b/databases/php85-pgsql/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -pgsql
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/php85-sqlite3/Makefile b/databases/php85-sqlite3/Makefile
new file mode 100644
index 000000000000..a82d71c80d62
--- /dev/null
+++ b/databases/php85-sqlite3/Makefile
@@ -0,0 +1,7 @@
+CATEGORIES= databases
+
+MASTERDIR= ${.CURDIR}/../../lang/php85
+
+PKGNAMESUFFIX= -sqlite3
+
+.include "${MASTERDIR}/Makefile"
diff --git a/databases/postgresql-promscale/Makefile b/databases/postgresql-promscale/Makefile
index a4af459964af..940d81c3d9d0 100644
--- a/databases/postgresql-promscale/Makefile
+++ b/databases/postgresql-promscale/Makefile
@@ -1,6 +1,6 @@
PORTNAME= promscale
PORTVERSION= 0.8.0
-PORTREVISION= 21
+PORTREVISION= 22
CATEGORIES= databases
PKGNAMEPREFIX= postgresql${PGSQL_VER:S/.//}-
diff --git a/databases/py-sqlframe/Makefile b/databases/py-sqlframe/Makefile
index 4da584bca7e1..12a1482936ec 100644
--- a/databases/py-sqlframe/Makefile
+++ b/databases/py-sqlframe/Makefile
@@ -1,5 +1,5 @@
PORTNAME= sqlframe
-PORTVERSION= 3.35.1
+PORTVERSION= 3.36.0
CATEGORIES= databases python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
@@ -16,7 +16,7 @@ BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools>=0:devel/py-setuptools@${PY_FLA
${PYTHON_PKGNAMEPREFIX}setuptools-scm>=0:devel/py-setuptools-scm@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}prettytable>=0<4:devel/py-prettytable@${PY_FLAVOR} \
- ${PYTHON_PKGNAMEPREFIX}sqlglot>=24.0.0<26.26:databases/py-sqlglot@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}sqlglot>=24.0.0<26.32:databases/py-sqlglot@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}typing-extensions>=0:devel/py-typing-extensions@${PY_FLAVOR}
USES= python
diff --git a/databases/py-sqlframe/distinfo b/databases/py-sqlframe/distinfo
index 362e7b8c0333..237cb50fcbf3 100644
--- a/databases/py-sqlframe/distinfo
+++ b/databases/py-sqlframe/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1750188050
-SHA256 (sqlframe-3.35.1.tar.gz) = d7bfca67fa1490aebcbdf49127cfab261590da78976a0ac6570de9bfc46449ec
-SIZE (sqlframe-3.35.1.tar.gz) = 29477918
+TIMESTAMP = 1751208150
+SHA256 (sqlframe-3.36.0.tar.gz) = c6966b56559ce63e08d8eacd73ab6fb3070651b25cb3c62a44882c7ade586e77
+SIZE (sqlframe-3.36.0.tar.gz) = 29480398
diff --git a/databases/py-sqlglot/Makefile b/databases/py-sqlglot/Makefile
index 98b7069ed3e7..cf511dfac9b1 100644
--- a/databases/py-sqlglot/Makefile
+++ b/databases/py-sqlglot/Makefile
@@ -1,5 +1,5 @@
PORTNAME= sqlglot
-PORTVERSION= 26.25.3
+PORTVERSION= 26.31.0
CATEGORIES= databases python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/databases/py-sqlglot/distinfo b/databases/py-sqlglot/distinfo
index b9a87f01ef0e..fb751280939a 100644
--- a/databases/py-sqlglot/distinfo
+++ b/databases/py-sqlglot/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1750188052
-SHA256 (sqlglot-26.25.3.tar.gz) = ca362b33c030538c8f5c8ae66ac5ae5e6c95be74170c328ad008a428687e2513
-SIZE (sqlglot-26.25.3.tar.gz) = 5322840
+TIMESTAMP = 1751208152
+SHA256 (sqlglot-26.31.0.tar.gz) = e9b8f52d02e21636cd7e463af29db0b86707437b9d468b7b2166b67fa96cdd87
+SIZE (sqlglot-26.31.0.tar.gz) = 5341968
diff --git a/databases/py-sqlglotrs/Makefile b/databases/py-sqlglotrs/Makefile
index 93e64667b26c..db0f1bd63426 100644
--- a/databases/py-sqlglotrs/Makefile
+++ b/databases/py-sqlglotrs/Makefile
@@ -1,5 +1,6 @@
PORTNAME= sqlglotrs
PORTVERSION= 0.6.1
+PORTREVISION= 1
CATEGORIES= databases python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/databases/py-sqloxide/Makefile b/databases/py-sqloxide/Makefile
index 1021564ac519..d6d0fec64100 100644
--- a/databases/py-sqloxide/Makefile
+++ b/databases/py-sqloxide/Makefile
@@ -1,6 +1,6 @@
PORTNAME= sqloxide
PORTVERSION= 0.1.48
-PORTREVISION= 6
+PORTREVISION= 7
CATEGORIES= databases python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/databases/py-unqlite/Makefile b/databases/py-unqlite/Makefile
index 55be1c6d00e8..a5a9dc5c24ef 100644
--- a/databases/py-unqlite/Makefile
+++ b/databases/py-unqlite/Makefile
@@ -1,5 +1,5 @@
PORTNAME= unqlite
-DISTVERSION= 0.9.8
+DISTVERSION= 0.9.9
CATEGORIES= databases python
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/databases/py-unqlite/distinfo b/databases/py-unqlite/distinfo
index ca214a83d054..f50cff353b67 100644
--- a/databases/py-unqlite/distinfo
+++ b/databases/py-unqlite/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1738990510
-SHA256 (unqlite-0.9.8.tar.gz) = 182c1764616f0f3a5caa52ca3bdeac3d44cce7a56b2801c4fcaf79eb2b6f30be
-SIZE (unqlite-0.9.8.tar.gz) = 634010
+TIMESTAMP = 1751442862
+SHA256 (unqlite-0.9.9.tar.gz) = 63a79975d67e3896af269c1885c2cc363fb646ff26e58541365fb5fb9e645691
+SIZE (unqlite-0.9.9.tar.gz) = 633945
diff --git a/databases/qdrant/Makefile b/databases/qdrant/Makefile
index 01fcb1f352a1..5dcce0c3f3a0 100644
--- a/databases/qdrant/Makefile
+++ b/databases/qdrant/Makefile
@@ -1,6 +1,7 @@
PORTNAME= qdrant
DISTVERSIONPREFIX= v
DISTVERSION= 1.14.1
+PORTREVISION= 1
PORTEPOCH= 1
CATEGORIES= databases
diff --git a/databases/quake/Makefile b/databases/quake/Makefile
index 12f6f31acecd..664e3a26309f 100644
--- a/databases/quake/Makefile
+++ b/databases/quake/Makefile
@@ -2,7 +2,7 @@ PORTNAME= quake
DISTVERSIONPREFIX= v
DISTVERSION= 0.5.1-57
DISTVERSIONSUFFIX= -gbb8ae55
-PORTREVISION= 12
+PORTREVISION= 13
CATEGORIES= databases
PKGNAMESUFFIX= -framework
diff --git a/databases/redisjson/Makefile b/databases/redisjson/Makefile
index e1b61699411f..d44e7eaeb560 100644
--- a/databases/redisjson/Makefile
+++ b/databases/redisjson/Makefile
@@ -1,7 +1,7 @@
PORTNAME= redisjson
DISTVERSIONPREFIX= v
DISTVERSION= 2.0.8
-PORTREVISION= 28
+PORTREVISION= 29
CATEGORIES= databases
MAINTAINER= ports@FreeBSD.org
diff --git a/databases/rubygem-flipper-active_record/Makefile b/databases/rubygem-flipper-active_record/Makefile
index d41f10d94685..32809d6adbc2 100644
--- a/databases/rubygem-flipper-active_record/Makefile
+++ b/databases/rubygem-flipper-active_record/Makefile
@@ -1,5 +1,5 @@
PORTNAME= flipper-active_record
-PORTVERSION= 1.3.4
+PORTVERSION= 1.3.5
CATEGORIES= databases rubygems
MASTER_SITES= RG
diff --git a/databases/rubygem-flipper-active_record/distinfo b/databases/rubygem-flipper-active_record/distinfo
index 331c9e27b892..00f974fa6be9 100644
--- a/databases/rubygem-flipper-active_record/distinfo
+++ b/databases/rubygem-flipper-active_record/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1742070490
-SHA256 (rubygem/flipper-active_record-1.3.4.gem) = 8cda954ebf76668ae451915fbff87670939c9178b4cbcc77816aa918c2e8612e
-SIZE (rubygem/flipper-active_record-1.3.4.gem) = 12800
+TIMESTAMP = 1751208188
+SHA256 (rubygem/flipper-active_record-1.3.5.gem) = 77867d6226d54fbd66e6fc4646595ba6b9b8305ff5efc58597d7190fde31d5a1
+SIZE (rubygem/flipper-active_record-1.3.5.gem) = 12800
diff --git a/databases/sqlx-cli/Makefile b/databases/sqlx-cli/Makefile
index 98ba7a7ec210..c6fcda0461cc 100644
--- a/databases/sqlx-cli/Makefile
+++ b/databases/sqlx-cli/Makefile
@@ -1,7 +1,7 @@
PORTNAME= sqlx
DISTVERSIONPREFIX= v
DISTVERSION= 0.8.5
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= databases
PKGNAMESUFFIX= -cli
diff --git a/databases/surrealdb/Makefile b/databases/surrealdb/Makefile
index db45d274162b..58252a3401de 100644
--- a/databases/surrealdb/Makefile
+++ b/databases/surrealdb/Makefile
@@ -1,6 +1,7 @@
PORTNAME= surrealdb
DISTVERSIONPREFIX= v
DISTVERSION= 2.3.4
+PORTREVISION= 1
CATEGORIES= databases
MAINTAINER= yuri@FreeBSD.org
diff --git a/databases/xls2txt/Makefile b/databases/xls2txt/Makefile
index 925fb7e0ec69..a2f5a5ebb37a 100644
--- a/databases/xls2txt/Makefile
+++ b/databases/xls2txt/Makefile
@@ -1,6 +1,6 @@
PORTNAME= xls2txt
DISTVERSION= 1.0.1
-PORTREVISION= 41
+PORTREVISION= 42
CATEGORIES= databases textproc
MAINTAINER= yuri@FreeBSD.org
diff --git a/databases/xtrabackup80/Makefile b/databases/xtrabackup80/Makefile
index e8db161f55b9..600a5f6b380f 100644
--- a/databases/xtrabackup80/Makefile
+++ b/databases/xtrabackup80/Makefile
@@ -1,7 +1,7 @@
PORTNAME= xtrabackup80
PORTVERSION= 8.0.35
DISTVERSIONSUFFIX= -30
-PORTREVISION= 8
+PORTREVISION= 9
CATEGORIES= databases
MASTER_SITES= https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/source/tarball/:percona \
SF/boost/boost/${BOOST_VERSION}:boost
diff --git a/databases/xtrabackup80/files/patch-sql_binlog__ostream.cc b/databases/xtrabackup80/files/patch-sql_binlog__ostream.cc
new file mode 100644
index 000000000000..870b55e23bf3
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-sql_binlog__ostream.cc
@@ -0,0 +1,11 @@
+--- sql/binlog_ostream.cc.orig 2023-11-24 10:33:10 UTC
++++ sql/binlog_ostream.cc
+@@ -239,7 +239,7 @@ bool IO_CACHE_binlog_cache_storage::setup_ciphers_pass
+
+ /* Generate password, it is a random string. */
+ if (my_rand_buffer(password, sizeof(password))) return true;
+- password_str.append(password, sizeof(password));
++ password_str.insert(password_str.end(), password, password + sizeof(password));
+
+ m_io_cache.m_encryptor->close();
+ m_io_cache.m_decryptor->close();
diff --git a/databases/xtrabackup80/files/patch-sql_mdl__context__backup.cc b/databases/xtrabackup80/files/patch-sql_mdl__context__backup.cc
new file mode 100644
index 000000000000..0d670ed2d1a2
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-sql_mdl__context__backup.cc
@@ -0,0 +1,36 @@
+--- sql/mdl_context_backup.cc.orig 2023-11-24 10:33:10 UTC
++++ sql/mdl_context_backup.cc
+@@ -159,7 +159,7 @@ bool MDL_context_backup_manager::create_backup(const M
+ DBUG_TRACE;
+
+ try {
+- MDL_context_backup_key key_obj(key, keylen);
++ MDL_context_backup_key key_obj(key, key + keylen);
+
+ /*
+ Since this method is called as part of THD cleaning up, every XA
+@@ -192,7 +192,7 @@ bool MDL_context_backup_manager::create_backup(MDL_req
+
+ bool result = false;
+ try {
+- MDL_context_backup_key key_obj(key, keylen);
++ MDL_context_backup_key key_obj(key, key + keylen);
+ /*
+ Check for presence a record with specified key in the collection of
+ MDL_context_backup elements. It is ok to already have a record with
+@@ -238,7 +238,7 @@ bool MDL_context_backup_manager::restore_backup(MDL_co
+
+ MUTEX_LOCK(guard, &m_LOCK_mdl_context_backup);
+
+- auto result = m_backup_map.find(MDL_context_backup_key(key, keylen));
++ auto result = m_backup_map.find(MDL_context_backup_key(key, key + keylen));
+ if (result != m_backup_map.end()) {
+ element = result->second.get();
+ res = mdl_context->clone_tickets(element->get_context(), MDL_TRANSACTION);
+@@ -251,5 +251,5 @@ void MDL_context_backup_manager::delete_backup(const u
+ const size_t keylen) {
+ DBUG_TRACE;
+ MUTEX_LOCK(guard, &m_LOCK_mdl_context_backup);
+- m_backup_map.erase(MDL_context_backup_key(key, keylen));
++ m_backup_map.erase(MDL_context_backup_key(key, key + keylen));
+ }
diff --git a/databases/xtrabackup80/files/patch-sql_mdl__context__backup.h b/databases/xtrabackup80/files/patch-sql_mdl__context__backup.h
new file mode 100644
index 000000000000..3c9fc1e28992
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-sql_mdl__context__backup.h
@@ -0,0 +1,11 @@
+--- sql/mdl_context_backup.h.orig 2023-11-24 10:33:10 UTC
++++ sql/mdl_context_backup.h
+@@ -46,7 +46,7 @@ class MDL_context_backup_manager {
+ /**
+ Key for uniquely identifying MDL_context in the MDL_context_backup map.
+ */
+- typedef std::basic_string<uchar> MDL_context_backup_key;
++ typedef std::vector<uchar> MDL_context_backup_key;
+
+ class MDL_context_backup;
+
diff --git a/databases/xtrabackup80/files/patch-sql_range__optimizer_index__range__scan__plan.cc b/databases/xtrabackup80/files/patch-sql_range__optimizer_index__range__scan__plan.cc
new file mode 100644
index 000000000000..7dda71eef0e1
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-sql_range__optimizer_index__range__scan__plan.cc
@@ -0,0 +1,39 @@
+--- sql/range_optimizer/index_range_scan_plan.cc.orig 2023-11-24 10:33:10 UTC
++++ sql/range_optimizer/index_range_scan_plan.cc
+@@ -1015,11 +1015,11 @@ static bool null_part_in_key(KEY_PART *key_part, const
+ return false;
+ }
+
+-// TODO(sgunders): This becomes a bit simpler with C++20's string_view
+-// constructors.
+-static inline std::basic_string_view<uchar> make_string_view(const uchar *start,
+- const uchar *end) {
+- return {start, static_cast<size_t>(end - start)};
++static inline bool equal(const uchar *start1, const uchar *end1,
++ const uchar *start2, const uchar *end2) {
++ auto diff1 = end1 - start1;
++ auto diff2 = end2 - start2;
++ return diff1 == diff2 && memcmp(start1, start2, diff1) == 0;
+ }
+
+ /**
+@@ -1082,8 +1082,7 @@ static bool get_ranges_from_tree_given_base(
+ node->next_key_part->type == SEL_ROOT::Type::KEY_RANGE &&
+ node->next_key_part->root->part == part + 1) {
+ if (node->min_flag == 0 && node->max_flag == 0 &&
+- make_string_view(min_key, tmp_min_key) ==
+- make_string_view(max_key, tmp_max_key)) {
++ equal(min_key, tmp_min_key, max_key, tmp_max_key)) {
+ // This range was an equality predicate, and we have more
+ // keyparts to scan, so use its range as a base for ranges on
+ // the next keypart(s). E.g. if we have (a = 3) on this keypart,
+@@ -1159,8 +1158,7 @@ static bool get_ranges_from_tree_given_base(
+ else
+ flag |= NO_MAX_RANGE;
+ }
+- if (flag == 0 && make_string_view(base_min_key, tmp_min_key) ==
+- make_string_view(base_max_key, tmp_max_key)) {
++ if (flag == 0 && equal(base_min_key, tmp_min_key, base_max_key, tmp_max_key)) {
+ flag |= EQ_RANGE;
+ /*
+ Note that keys which are extended with PK parts have no
diff --git a/databases/xtrabackup80/files/patch-sql_rpl__log__encryption.cc b/databases/xtrabackup80/files/patch-sql_rpl__log__encryption.cc
new file mode 100644
index 000000000000..3acbfdd9b46c
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-sql_rpl__log__encryption.cc
@@ -0,0 +1,143 @@
+--- sql/rpl_log_encryption.cc.orig 2023-11-24 10:33:10 UTC
++++ sql/rpl_log_encryption.cc
+@@ -212,7 +212,7 @@ bool Rpl_encryption::recover_master_key() {
+ Rpl_encryption_header::seqno_to_key_id(m_master_key_seqno);
+ auto master_key =
+ get_key(m_master_key.m_id, Rpl_encryption_header::get_key_type());
+- m_master_key.m_value.assign(master_key.second);
++ m_master_key.m_value = master_key.second;
+ /* No keyring error */
+ if (master_key.first == Keyring_status::KEYRING_ERROR_FETCHING) goto err1;
+ }
+@@ -289,7 +289,7 @@ bool Rpl_encryption::recover_master_key() {
+
+ if (new_master_key.first == Keyring_status::SUCCESS) {
+ m_master_key.m_id = new_master_key_id;
+- m_master_key.m_value.assign(new_master_key.second);
++ m_master_key.m_value = new_master_key.second;
+ if (new_master_key_seqno.second > m_master_key_seqno &&
+ new_master_key_seqno.second > old_master_key_seqno.second) {
+ if (m_master_key_seqno > 0) {
+@@ -379,8 +379,8 @@ std::pair<Rpl_encryption::Keyring_status, Key_string>
+ reinterpret_cast<unsigned char *>(std::get<1>(tuple));
+ first[0] = ~(first[0]);
+ });
+- key_str.append(reinterpret_cast<unsigned char *>(std::get<1>(tuple)),
+- std::get<2>(tuple));
++ auto *first = reinterpret_cast<unsigned char *>(std::get<1>(tuple));
++ key_str.insert(key_str.end(), first, first + std::get<2>(tuple));
+ my_free(std::get<1>(tuple));
+ }
+
+@@ -395,7 +395,7 @@ std::pair<Rpl_encryption::Keyring_status, Key_string>
+ if (pair.first == Keyring_status::SUCCESS) {
+ DBUG_EXECUTE_IF("corrupt_replication_encryption_key_size",
+ { pair.second.resize(key_size / 2); });
+- if (pair.second.length() != key_size)
++ if (pair.second.size() != key_size)
+ pair.first = Keyring_status::UNEXPECTED_KEY_SIZE;
+ }
+ return pair;
+@@ -449,7 +449,7 @@ bool Rpl_encryption::enable_for_xtrabackup() {
+ Rpl_encryption_header::seqno_to_key_id(m_master_key_seqno);
+ auto master_key =
+ get_key(m_master_key.m_id, Rpl_encryption_header::get_key_type());
+- m_master_key.m_value.assign(master_key.second);
++ m_master_key.m_value = master_key.second;
+ /* No keyring error */
+ if (master_key.first == Keyring_status::KEYRING_ERROR_FETCHING) res = true;
+ }
+@@ -770,7 +770,7 @@ Rpl_encryption::get_seqno_from_keyring(std::string key
+ auto fetched_key = get_key(key_id, SEQNO_KEY_TYPE, SEQNO_KEY_LENGTH);
+ uint32_t seqno = 0;
+ if (fetched_key.first == Keyring_status::SUCCESS) {
+- const void *key = fetched_key.second.c_str();
++ const void *key = fetched_key.second.data();
+ memcpy(&seqno, key, sizeof(seqno));
+ seqno = le32toh(seqno);
+ }
+@@ -975,7 +975,7 @@ bool Rpl_encryption::generate_master_key_on_keyring(ui
+
+ /* Store the generated key as the new master key */
+ m_master_key.m_id = key_id;
+- m_master_key.m_value.assign(pair.second);
++ m_master_key.m_value = pair.second;
+
+ return false;
+ }
+@@ -1078,12 +1078,12 @@ bool Rpl_encryption_header_v1::serialize(Basic_ostream
+
+ assert(m_encrypted_password.length() == PASSWORD_FIELD_SIZE);
+ *ptr++ = ENCRYPTED_FILE_PASSWORD;
+- memcpy(ptr, m_encrypted_password.data(), m_encrypted_password.length());
++ memcpy(ptr, m_encrypted_password.data(), m_encrypted_password.size());
+ ptr += PASSWORD_FIELD_SIZE;
+
+ assert(m_iv.length() == IV_FIELD_SIZE);
+ *ptr++ = IV_FOR_FILE_PASSWORD;
+- memcpy(ptr, m_iv.data(), m_iv.length());
++ memcpy(ptr, m_iv.data(), m_iv.size());
+
+ bool res = DBUG_EVALUATE_IF("fail_to_serialize_encryption_header", true,
+ ostream->write(header, HEADER_SIZE));
+@@ -1138,13 +1138,13 @@ bool Rpl_encryption_header_v1::deserialize(Basic_istre
+ reinterpret_cast<const unsigned char *>(
+ reader.ptr(PASSWORD_FIELD_SIZE));
+ if (!reader.has_error())
+- m_encrypted_password.assign(password_ptr, PASSWORD_FIELD_SIZE);
++ m_encrypted_password.assign(password_ptr, password_ptr + PASSWORD_FIELD_SIZE);
+ break;
+ }
+ case IV_FOR_FILE_PASSWORD: {
+ const unsigned char *iv_ptr =
+ reinterpret_cast<const unsigned char *>(reader.ptr(IV_FIELD_SIZE));
+- if (!reader.has_error()) m_iv.assign(iv_ptr, IV_FIELD_SIZE);
++ if (!reader.has_error()) m_iv.assign(iv_ptr, iv_ptr + IV_FIELD_SIZE);
+ break;
+ }
+ default:
+@@ -1204,11 +1204,11 @@ Key_string Rpl_encryption_header_v1::decrypt_file_pass
+ unsigned char buffer[Aes_ctr::PASSWORD_LENGTH];
+
+ if (my_aes_decrypt(m_encrypted_password.data(),
+- m_encrypted_password.length(), buffer,
++ m_encrypted_password.size(), buffer,
+ error_and_key.second.data(),
+- error_and_key.second.length(), my_aes_256_cbc,
++ error_and_key.second.size(), my_aes_256_cbc,
+ m_iv.data(), false) != MY_AES_BAD_DATA)
+- file_password.append(buffer, Aes_ctr::PASSWORD_LENGTH);
++ file_password.insert(file_password.end(), buffer, buffer + Aes_ctr::PASSWORD_LENGTH);
+ }
+ }
+ #endif
+@@ -1239,16 +1239,16 @@ bool Rpl_encryption_header_v1::encrypt_file_password(K
+
+ /* Generate iv, it is a random string. */
+ error = my_rand_buffer(iv, Aes_ctr::AES_BLOCK_SIZE);
+- m_iv = Key_string(iv, sizeof(iv));
++ m_iv = Key_string(iv, iv + sizeof(iv));
+
+ /* Encrypt password */
+ if (!error) {
+- error = (my_aes_encrypt(password_str.data(), password_str.length(),
++ error = (my_aes_encrypt(password_str.data(), password_str.size(),
+ encrypted_password, master_key.m_value.data(),
+- master_key.m_value.length(), my_aes_256_cbc, iv,
++ master_key.m_value.size(), my_aes_256_cbc, iv,
+ false) == MY_AES_BAD_DATA);
+ m_encrypted_password =
+- Key_string(encrypted_password, sizeof(encrypted_password));
++ Key_string(encrypted_password, encrypted_password + sizeof(encrypted_password));
+ }
+
+ return error;
+@@ -1264,7 +1264,7 @@ Key_string Rpl_encryption_header_v1::generate_new_file
+ /* Generate password, it is a random string. */
+ error = my_rand_buffer(password, sizeof(password));
+ if (!error) {
+- password_str.append(password, sizeof(password));
++ password_str.insert(password_str.end(), password, password + sizeof(password));
+ }
+
+ if (error || encrypt_file_password(password_str) ||
diff --git a/databases/xtrabackup80/files/patch-sql_stream__cipher.cc b/databases/xtrabackup80/files/patch-sql_stream__cipher.cc
new file mode 100644
index 000000000000..e9b1b0e5a573
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-sql_stream__cipher.cc
@@ -0,0 +1,11 @@
+--- sql/stream_cipher.cc.orig 2023-11-24 10:33:10 UTC
++++ sql/stream_cipher.cc
+@@ -45,7 +45,7 @@ bool Aes_ctr_cipher<TYPE>::open(const Key_string &pass
+ m_header_size = header_size;
+ #ifdef HAVE_BYTESTOKEY_SHA512_HANDLING
+ if (EVP_BytesToKey(Aes_ctr::get_evp_cipher(), Aes_ctr::get_evp_md(), nullptr,
+- password.data(), password.length(), 1, m_file_key,
++ password.data(), password.size(), 1, m_file_key,
+ m_iv) == 0)
+ return true;
+ #else
diff --git a/databases/xtrabackup80/files/patch-sql_stream__cipher.h b/databases/xtrabackup80/files/patch-sql_stream__cipher.h
new file mode 100644
index 000000000000..dfef2c2b2246
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-sql_stream__cipher.h
@@ -0,0 +1,20 @@
+--- sql/stream_cipher.h.orig 2023-11-24 10:33:10 UTC
++++ sql/stream_cipher.h
+@@ -25,7 +25,7 @@
+
+ #include <openssl/evp.h>
+ #include <memory>
+-#include <string>
++#include <vector>
+
+ /**
+ @file stream_cipher.h
+@@ -34,7 +34,7 @@
+ binary log files.
+ */
+
+-typedef std::basic_string<unsigned char> Key_string;
++typedef std::vector<unsigned char> Key_string;
+
+ /**
+ @class Stream_cipher
diff --git a/databases/xtrabackup80/files/patch-storage_innobase_log__log0recv.cc b/databases/xtrabackup80/files/patch-storage_innobase_log__log0recv.cc
deleted file mode 100644
index 4f6c96125878..000000000000
--- a/databases/xtrabackup80/files/patch-storage_innobase_log__log0recv.cc
+++ /dev/null
@@ -1,29 +0,0 @@
---- storage/innobase/log/log0recv.cc.orig 2023-11-24 13:33:10.000000000 +0300
-+++ storage/innobase/log/log0recv.cc 2024-02-16 15:16:49.528584000 +0300
-@@ -3702,7 +3702,7 @@
- #else /* !UNIV_HOTBACKUP */
- bool meb_scan_log_recs(
- #endif /* !UNIV_HOTBACKUP */
-- size_t *max_memory, const byte *buf, size_t len,
-+ size_t max_memory, const byte *buf, size_t len,
- lsn_t start_lsn, lsn_t *read_upto_lsn,
- lsn_t to_lsn) {
- const byte *log_block = buf;
-@@ -3975,7 +3975,7 @@
- recv_parse_log_recs();
-
- #ifndef UNIV_HOTBACKUP
-- if (recv_heap_used() > *max_memory) {
-+ if (recv_heap_used() > max_memory) {
- recv_apply_hashed_log_recs(log, false);
- }
- #endif /* !UNIV_HOTBACKUP */
-@@ -4161,7 +4161,7 @@
- break;
- }
-
-- finished = recv_scan_log_recs(log, &max_mem, log.buf, end_lsn - start_lsn,
-+ finished = recv_scan_log_recs(log, max_mem, log.buf, end_lsn - start_lsn,
- start_lsn, &log.m_scanned_lsn, to_lsn);
-
- start_lsn = end_lsn;
diff --git a/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_src_keyring__plugins.cc b/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_src_keyring__plugins.cc
new file mode 100644
index 000000000000..5a1124f11f87
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_src_keyring__plugins.cc
@@ -0,0 +1,11 @@
+--- storage/innobase/xtrabackup/src/keyring_plugins.cc.orig 2023-11-24 10:33:10 UTC
++++ storage/innobase/xtrabackup/src/keyring_plugins.cc
+@@ -890,7 +890,7 @@ bool xb_binlog_password_reencrypt(const char *binlog_f
+ return (false);
+ }
+
+- Key_string file_password(key, Encryption::KEY_LEN);
++ Key_string file_password(key, key + Encryption::KEY_LEN);
+ header->encrypt_file_password(file_password);
+
+ IO_CACHE_ostream ostream;
diff --git a/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_src_utils.cc b/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_src_utils.cc
deleted file mode 100644
index 34feee9867f6..000000000000
--- a/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_src_utils.cc
+++ /dev/null
@@ -1,59 +0,0 @@
---- storage/innobase/xtrabackup/src/utils.cc.orig 2023-01-30 20:34:34.000000000 +0700
-+++ storage/innobase/xtrabackup/src/utils.cc 2023-02-25 02:50:31.899561000 +0700
-@@ -21,6 +21,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Bos
-
- #ifdef __APPLE__
- #include <mach/mach_host.h>
-+#endif
-+#if defined(__APPLE__) || defined(__FreeBSD__)
- #include <sys/sysctl.h>
- #else
- #include <proc/sysinfo.h>
-@@ -112,12 +114,14 @@ unsigned long get_version_number(std::string version_s
- return major * 10000 + minor * 100 + version;
- }
-
--#ifdef __APPLE__
-+#if defined(__APPLE__) || defined(__FreeBSD__)
- unsigned long host_total_memory() {
- unsigned long total_mem = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE);
- return total_mem;
- }
-+#endif
-
-+#ifdef __APPLE__
- unsigned long host_free_memory() {
- unsigned long total_mem = host_total_memory();
- int64_t used_mem;
-@@ -138,6 +142,31 @@ unsigned long host_free_memory() {
- return total_mem - (unsigned long)used_mem;
- }
- return 0;
-+}
-+#elif defined(__FreeBSD__)
-+unsigned long host_free_memory() {
-+ static int mib_free[2] = { -1, 0 };
-+ static int mib_inactive[2] = { -1, 0 };
-+ size_t miblen = sizeof(mib_free) / sizeof(mib_free[0]);
-+ uint32_t free_pages, inactive_pages;
-+ size_t sz = sizeof(free_pages);
-+
-+ free_pages = inactive_pages = 0;
-+
-+ if (mib_free[0] < 0 &&
-+ sysctlnametomib("vm.stats.vm.v_free_count", mib_free, &miblen) < 0)
-+ mib_free[0] = 0;
-+ if (mib_inactive[0] < 0 &&
-+ sysctlnametomib("vm.stats.vm.v_inactive_count", mib_inactive, &miblen) < 0)
-+ mib_inactive[0] = 0;
-+
-+ if (mib_free[0] &&
-+ sysctl(mib_free, 2, &free_pages, &sz, NULL, 0) < 0)
-+ free_pages = 0; /* should not happen */
-+ if (mib_inactive[0] && sysctl(mib_inactive, 2, &inactive_pages, &sz, NULL, 0) < 0)
-+ inactive_pages = 0; /* should not happen, too */
-+
-+ return (free_pages + inactive_pages) * sysconf(_SC_PAGESIZE);
- }
- #else
- unsigned long host_total_memory() {
diff --git a/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_xbcloud__osenv.sh b/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_xbcloud__osenv.sh
deleted file mode 100644
index 37b1e45afc66..000000000000
--- a/databases/xtrabackup80/files/patch-storage_innobase_xtrabackup_xbcloud__osenv.sh
+++ /dev/null
@@ -1,15 +0,0 @@
---- storage/innobase/xtrabackup/xbcloud_osenv.sh.orig 2020-08-28 21:02:32 UTC
-+++ storage/innobase/xtrabackup/xbcloud_osenv.sh
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
-
- # Copyright (C) 2015 Percona LLC and/or its affiliates.
- # This software comes with ABSOLUTELY NO WARRANTY. This is free software,
-@@ -105,5 +105,5 @@ fi
-
- # do it
- # shellcheck disable=SC2086,SC2048
--${XBCLOUD_BIN} $* ${XBCLOUD_OS_ENV}
-+${XBCLOUD_BIN} "$@" ${XBCLOUD_OS_ENV}
-
diff --git a/databases/xtrabackup80/files/patch-storage_temptable_include_temptable_lock_free_type.h b/databases/xtrabackup80/files/patch-storage_temptable_include_temptable_lock_free_type.h
deleted file mode 100644
index a229da5b0adc..000000000000
--- a/databases/xtrabackup80/files/patch-storage_temptable_include_temptable_lock_free_type.h
+++ /dev/null
@@ -1,17 +0,0 @@
---- storage/temptable/include/temptable/lock_free_type.h.orig 2020-06-16 16:31:03 UTC
-+++ storage/temptable/include/temptable/lock_free_type.h
-@@ -31,6 +31,14 @@ Lock-free type (selection) implementation. */
-
- #include "storage/temptable/include/temptable/constants.h"
-
-+#if defined(__i386__) //&& defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)
-+/* Fix for clang setting __GCC_ATOMIC_LLONG_LOCK_FREE incorrectly for x86
-+ * https://llvm.org/bugs/show_bug.cgi?id=19355
-+ */
-+#undef ATOMIC_LLONG_LOCK_FREE
-+#define ATOMIC_LLONG_LOCK_FREE 2
-+#endif
-+
- namespace temptable {
-
- /** Enum class describing alignment-requirements. */
diff --git a/databases/xtrabackup80/files/patch-utils.cc b/databases/xtrabackup80/files/patch-utils.cc
new file mode 100644
index 000000000000..7cc27bc79dd7
--- /dev/null
+++ b/databases/xtrabackup80/files/patch-utils.cc
@@ -0,0 +1,83 @@
+--- storage/innobase/xtrabackup/src/utils.cc.orig 2025-06-26 11:44:12.347914000 +0300
++++ storage/innobase/xtrabackup/src/utils.cc 2025-06-26 11:47:31.087768000 +0300
+@@ -19,16 +19,6 @@
+ #include <my_default.h>
+ #include <mysqld.h>
+
+-#ifdef __APPLE__
+-#include <mach/mach_host.h>
+-#include <sys/sysctl.h>
+-#else
+-#ifdef HAVE_PROCPS_V3
+-#include <proc/sysinfo.h>
+-#else
+-#include <libproc2/meminfo.h>
+-#endif // HAVE_PROCPS_V3
+-#endif // __APPLE__
+ #include <boost/uuid/uuid.hpp> // uuid class
+ #include <boost/uuid/uuid_generators.hpp> // generators
+ #include <boost/uuid/uuid_io.hpp> // streaming operators etc.
+@@ -116,62 +106,13 @@
+ return major * 10000 + minor * 100 + version;
+ }
+
+-#ifdef __APPLE__
+ unsigned long host_total_memory() {
+- unsigned long total_mem = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE);
+- return total_mem;
++ return 0;
+ }
+
+ unsigned long host_free_memory() {
+- unsigned long total_mem = host_total_memory();
+- int64_t used_mem;
+- vm_size_t page_size;
+- mach_msg_type_number_t count;
+- vm_statistics_data_t vm_stats;
+-
+- // Get used memory
+- mach_port_t host = mach_host_self();
+- count = sizeof(vm_stats) / sizeof(natural_t);
+- if (KERN_SUCCESS == host_page_size(host, &page_size) &&
+- KERN_SUCCESS ==
+- host_statistics(host, HOST_VM_INFO, (host_info_t)&vm_stats, &count)) {
+- used_mem = ((int64_t)vm_stats.active_count + (int64_t)vm_stats.wire_count) *
+- (int64_t)page_size;
+-
+- ut_a(total_mem >= (unsigned long)used_mem);
+- return total_mem - (unsigned long)used_mem;
+- }
+ return 0;
+ }
+-#else
+-unsigned long host_total_memory() {
+-#ifdef HAVE_PROCPS_V3
+- meminfo();
+- return kb_main_total * 1024;
+-#else
+- struct meminfo_info *mem_info;
+- if (procps_meminfo_new(&mem_info) < 0) {
+- return 0;
+- }
+-
+- return MEMINFO_GET(mem_info, MEMINFO_MEM_TOTAL, ul_int) * 1024;
+-#endif // HAVE_PROCPS_V3
+-}
+-
+-unsigned long host_free_memory() {
+-#ifdef HAVE_PROCPS_V3
+- meminfo();
+- return kb_main_available * 1024;
+-#else
+- struct meminfo_info *mem_info;
+- if (procps_meminfo_new(&mem_info) < 0) {
+- return 0;
+- }
+-
+- return MEMINFO_GET(mem_info, MEMINFO_MEM_AVAILABLE, ul_int) * 1024;
+-#endif // HAVE_PROCPS_V3
+-}
+-#endif
+
+ std::string generate_uuid() {
+ boost::uuids::uuid uuid = gen();