PostgreSQL: Cast to string when searching using LIKE (bug #325)

This commit is contained in:
Jakub Vrana 2018-02-06 13:39:44 +01:00
parent 197abdcb70
commit d7f9b6b5de
5 changed files with 14 additions and 5 deletions

View file

@ -277,7 +277,7 @@ if (!defined("DRIVER")) {
return queries($prefix . implode(",\n", $values) . $suffix);
}
function convertSearch($idf, $field) {
function convertSearch($idf, $val, $field) {
return (preg_match('~char|text|enum|set~', $field["type"]) && !preg_match("~^utf8~", $field["collation"])
? "CONVERT($idf USING " . charset($this->_conn) . ")"
: $idf

View file

@ -181,6 +181,13 @@ if (isset($_GET["pgsql"])) {
return true;
}
function convertSearch($idf, $val, $field) {
return (preg_match('~char|text' . (is_numeric($val["val"]) && !preg_match('~LIKE~', $val["op"]) ? '|' . number_type() : '') . '~', $field["type"])
? $idf
: "CAST($idf AS text)"
);
}
function warnings() {
return $this->_conn->warnings();
}

View file

@ -534,7 +534,7 @@ class Adminer {
$cond .= " " . $this->processInput($fields[$val["col"]], $val["val"]);
}
if ($val["col"] != "") {
$return[] = $prefix . $driver->convertSearch(idf_escape($val["col"]), $fields[$val["col"]]) . $cond;
$return[] = $prefix . $driver->convertSearch(idf_escape($val["col"]), $val, $fields[$val["col"]]) . $cond;
} else {
// find anywhere
$cols = array();
@ -542,7 +542,7 @@ class Adminer {
if ((is_numeric($val["val"]) || !preg_match('~' . number_type() . '|bit~', $field["type"]))
&& (!preg_match("~[\x80-\xFF]~", $val["val"]) || preg_match('~char|text|enum|set~', $field["type"]))
) {
$cols[] = $prefix . $driver->convertSearch(idf_escape($name), $field) . $cond;
$cols[] = $prefix . $driver->convertSearch(idf_escape($name), $val, $field) . $cond;
}
}
$return[] = ($cols ? "(" . implode(" OR ", $cols) . ")" : "1 = 0");

View file

@ -114,11 +114,12 @@
}
/** Convert column to be searchable
* @param string escaped name
* @param string escaped column name
* @param array array("op" => , "val" => )
* @param array
* @return string
*/
function convertSearch($idf, $field) {
function convertSearch($idf, $val, $field) {
return $idf;
}

View file

@ -1,6 +1,7 @@
Adminer 4.6.1-dev:
MySQL: Support non-utf8 charset in search in column
MySQL: Support geometry in MySQL 8 (bug #574)
PostgreSQL: Cast to string when searching using LIKE (bug #325)
PostgreSQL: Don't treat interval type as number (bug #474)
PostgreSQL: Fix condition for selecting no rows