]> git.joonet.de Git - adminer.git/commitdiff
PostgreSQL: Cast to string when searching using LIKE (bug #325)
authorJakub Vrana <jakub@vrana.cz>
Tue, 6 Feb 2018 12:39:44 +0000 (13:39 +0100)
committerJakub Vrana <jakub@vrana.cz>
Tue, 6 Feb 2018 12:51:53 +0000 (13:51 +0100)
adminer/drivers/mysql.inc.php
adminer/drivers/pgsql.inc.php
adminer/include/adminer.inc.php
adminer/include/driver.inc.php
changes.txt

index 249b3dd2068e9721f27523db425f7c7db82c8b50..8fa8e3443be74b0227fd17f47378fccaaad46ecb 100644 (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
index 57961c8c91e11869c34f0ee2a07352968e6e8c02..440bc1a86bfe6992a820db6b2365b2d34615772f 100644 (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();
                }
index 4a1f2aae8a93b247f66e4c07b5940f320ea13310..bbe43c5e839bb526982505785bd93419fa3c602c 100644 (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");
index c16481aad14cf985149a5b8bde67e1bf68b5e401..4a2ae22242a616f5d7261f2bfe298c266ab5df51 100644 (file)
        }
        
        /** 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;
        }
        
index d3289bcf3d9e759b2d99b7fc24f8d1d074195ed7..7cbe57c09db1f95d9157e5fca239b667363ea32c 100644 (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