From ca0167c83e1b73f884788726b945f76b6bcf2585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Tue, 7 Jul 2026 16:25:00 +0200 Subject: [PATCH] Enable SQLite column metadata Build Unix SQLite with SQLITE_ENABLE_COLUMN_METADATA so the metadata APIs are available on macOS and Linux. Remove the pdo_sqlite configure override that forced PHP to treat sqlite3_column_table_name() as unavailable, and add sanity checks for both SQLite compile options and PDO column metadata. --- src/Package/Extension/pdo_sqlite.php | 25 ------------------------- src/Package/Library/sqlite.php | 7 ++++++- src/globals/ext-tests/pdo_sqlite.php | 16 ++++++++++++++++ src/globals/ext-tests/sqlite3.php | 10 ++++++++++ 4 files changed, 32 insertions(+), 26 deletions(-) delete mode 100644 src/Package/Extension/pdo_sqlite.php create mode 100644 src/globals/ext-tests/pdo_sqlite.php create mode 100644 src/globals/ext-tests/sqlite3.php diff --git a/src/Package/Extension/pdo_sqlite.php b/src/Package/Extension/pdo_sqlite.php deleted file mode 100644 index b0429f62..00000000 --- a/src/Package/Extension/pdo_sqlite.php +++ /dev/null @@ -1,25 +0,0 @@ -getTargetPackage('php')->getSourceDir()}/configure", - '/sqlite3_column_table_name=yes/', - 'sqlite3_column_table_name=no' - ); - } -} diff --git a/src/Package/Library/sqlite.php b/src/Package/Library/sqlite.php index a3d15f9b..9d4ce0f5 100644 --- a/src/Package/Library/sqlite.php +++ b/src/Package/Library/sqlite.php @@ -19,7 +19,12 @@ class sqlite #[BuildFor('Linux')] public function buildUnix(LibraryPackage $lib): void { - UnixAutoconfExecutor::create($lib)->configure()->make(); + UnixAutoconfExecutor::create($lib) + ->appendEnv([ + 'CFLAGS' => '-DSQLITE_ENABLE_COLUMN_METADATA=1', + ]) + ->configure() + ->make(); $lib->patchPkgconfPrefix(['sqlite3.pc']); } diff --git a/src/globals/ext-tests/pdo_sqlite.php b/src/globals/ext-tests/pdo_sqlite.php new file mode 100644 index 00000000..9e5e7f14 --- /dev/null +++ b/src/globals/ext-tests/pdo_sqlite.php @@ -0,0 +1,16 @@ +exec('CREATE TABLE spc_column_metadata_test (id INTEGER)'); + +$stmt = $pdo->query('SELECT id FROM spc_column_metadata_test'); +if ($stmt === false) { + throw new RuntimeException('Failed to query SQLite metadata test table.'); +} + +$metadata = $stmt->getColumnMeta(0); +if (($metadata['table'] ?? null) !== 'spc_column_metadata_test') { + throw new RuntimeException('PDO SQLite column metadata does not include the origin table.'); +} diff --git a/src/globals/ext-tests/sqlite3.php b/src/globals/ext-tests/sqlite3.php new file mode 100644 index 00000000..c3221e35 --- /dev/null +++ b/src/globals/ext-tests/sqlite3.php @@ -0,0 +1,10 @@ +querySingle("SELECT sqlite_compileoption_used('ENABLE_COLUMN_METADATA')"); + +if ((int) $enabled !== 1) { + throw new RuntimeException('SQLite was not built with SQLITE_ENABLE_COLUMN_METADATA.'); +}