From 0c8168229dbbc8d40605eb84e48046451c6c39c6 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Mon, 20 Oct 2025 23:19:47 +0200 Subject: [PATCH 1/2] Use MYSQL_TYPE constants instead of FIELD_TYPE The FIELD_TYPE constants are for BC. The JSON/VECTOR types are not defined in FIELD_TYPE for libmysqlclient. MYSQL_TYPE is available since MYSQL 5.0.0, so switch to that. Since MYSQL_TYPEs are enums and not defines, we need version checks instead. JSON was added in mysql 8.0.0 in mysql/mysql-server@c24045514581 VECTOR was added in mysql 9.0.0 in mysql/mysql-server@8cd51511de7d Replaces GH-20245. --- ext/pdo_mysql/mysql_statement.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c index b3dc527b10919..d919b70be8379 100644 --- a/ext/pdo_mysql/mysql_statement.c +++ b/ext/pdo_mysql/mysql_statement.c @@ -715,7 +715,7 @@ static int pdo_mysql_stmt_get_col( static char *type_to_name_native(int type) /* {{{ */ { -#define PDO_MYSQL_NATIVE_TYPE_NAME(x) case FIELD_TYPE_##x: return #x; +#define PDO_MYSQL_NATIVE_TYPE_NAME(x) case MYSQL_TYPE_##x: return #x; switch (type) { PDO_MYSQL_NATIVE_TYPE_NAME(STRING) @@ -749,10 +749,11 @@ static char *type_to_name_native(int type) /* {{{ */ #ifdef FIELD_TYPE_NEWDATE PDO_MYSQL_NATIVE_TYPE_NAME(NEWDATE) #endif -#ifdef FIELD_TYPE_VECTOR + /* The following 2 don't have BC FIELD_TYPE_* aliases. */ +#if MYSQL_VERSION_ID >= 90000 && !defined(MARIADB_BASE_VERSION) /* TODO: mysqlnd support (added in 8.4 via a1ab846231aeff49c0441a30ebd44463fc7825b1) */ PDO_MYSQL_NATIVE_TYPE_NAME(VECTOR) #endif -#ifdef FIELD_TYPE_JSON +#if MYSQL_VERSION_ID >= 80000 || defined(PDO_USE_MYSQLND) PDO_MYSQL_NATIVE_TYPE_NAME(JSON) #endif PDO_MYSQL_NATIVE_TYPE_NAME(TIME) From 388ce875a4886713f7a7a61d3d7a4cea498904bb Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Tue, 21 Oct 2025 22:23:40 +0200 Subject: [PATCH 2/2] Adjust version JSON support was backported via mysql/mysql-server@3e14f9f in 5.7.8. --- ext/pdo_mysql/mysql_statement.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c index d919b70be8379..7dd51a166cac1 100644 --- a/ext/pdo_mysql/mysql_statement.c +++ b/ext/pdo_mysql/mysql_statement.c @@ -753,7 +753,7 @@ static char *type_to_name_native(int type) /* {{{ */ #if MYSQL_VERSION_ID >= 90000 && !defined(MARIADB_BASE_VERSION) /* TODO: mysqlnd support (added in 8.4 via a1ab846231aeff49c0441a30ebd44463fc7825b1) */ PDO_MYSQL_NATIVE_TYPE_NAME(VECTOR) #endif -#if MYSQL_VERSION_ID >= 80000 || defined(PDO_USE_MYSQLND) +#if MYSQL_VERSION_ID >= 50708 || defined(PDO_USE_MYSQLND) PDO_MYSQL_NATIVE_TYPE_NAME(JSON) #endif PDO_MYSQL_NATIVE_TYPE_NAME(TIME)