From 2b52a9b653c0fed66b669db5697715b2927ab76a Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Wed, 18 Jun 2025 09:00:34 +0200 Subject: [PATCH] PostgreSQL: Allow comparing json columns (fix #1107) --- CHANGELOG.md | 1 + adminer/include/functions.inc.php | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22b67e90..8fd6492e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - PostgreSQL: Display index expressions - PostgreSQL: Add SQL operator to select - PostgreSQL: Hide only partitions, not all inherited tables from menu +- PostgreSQL: Allow comparing json columns (bug #1107) - PostgreSQL 11-: Avoid duplicate oid in table status (bug #1089) - Elasticsearch: Support dropping aliases - Plugins: Methods processList() and killProcess() diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index d4df33d0..12701e28 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -264,9 +264,10 @@ function where(array $where, array $fields = array()): string { $field_type = $field["type"]; $return[] = $column . (JUSH == "sql" && $field_type == "json" ? " = CAST(" . q($val) . " AS JSON)" + : (JUSH == "pgsql" && preg_match('~^json~', $field_type) ? "::jsonb = " . q($val) . "::jsonb" : (JUSH == "sql" && is_numeric($val) && preg_match('~\.~', $val) ? " LIKE " . q($val) // LIKE because of floats but slow with ints : (JUSH == "mssql" && strpos($field_type, "datetime") === false ? " LIKE " . q(preg_replace('~[_%[]~', '[\0]', $val)) // LIKE because of text but it does not work with datetime - : " = " . unconvert_field($field, q($val))))) + : " = " . unconvert_field($field, q($val)))))) ; //! enum and set if (JUSH == "sql" && preg_match('~char|text~', $field_type) && preg_match("~[^ -@]~", $val)) { // not just [a-z] to catch non-ASCII characters $return[] = "$column = " . q($val) . " COLLATE " . charset(connection()) . "_bin";