diff --git a/adminer/check.inc.php b/adminer/check.inc.php index 37c5348d..0d8b06db 100644 --- a/adminer/check.inc.php +++ b/adminer/check.inc.php @@ -4,7 +4,7 @@ $name = $_GET["name"]; $row = $_POST; if ($row && !$error) { - $result = ($name == "" || queries("ALTER TABLE " . table($TABLE) . " DROP CHECK " . idf_escape($name))); + $result = ($name == "" || queries("ALTER TABLE " . table($TABLE) . " DROP CONSTRAINT " . idf_escape($name))); if (!$row["drop"] && $result) { $result = queries("ALTER TABLE " . table($TABLE) . " ADD" . ($row["name"] != "" ? " CONSTRAINT " . idf_escape($row["name"]) . "" : "") . " CHECK ($row[clause])"); //! SQL injection } diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index abddc771..d3d52726 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -864,18 +864,6 @@ if (!defined("DRIVER")) { return true; } - /** Get defined check constraints - * @param string - * @return array array($name => $statement) - */ - function check_constraints($table) { - // MariaDB contains CHECK_CONSTRAINTS.TABLE_NAME, MySQL not - return get_key_vals("SELECT c.CONSTRAINT_NAME, c.CHECK_CLAUSE -FROM information_schema.CHECK_CONSTRAINTS c -JOIN information_schema.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME -WHERE c.CONSTRAINT_SCHEMA = " . q(DB) . " AND t.TABLE_NAME = " . q($table)); - } - /** Get information about trigger * @param string trigger name * @return array array("Trigger" => , "Timing" => , "Event" => , "Of" => , "Type" => , "Statement" => ) diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 2cc438c8..77cfc418 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -911,7 +911,7 @@ AND typelem = 0" } function support($feature) { - return preg_match('~^(database|table|columns|sql|indexes|descidx|comment|view|' . (min_version(9.3) ? 'materializedview|' : '') . 'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~', $feature); + return preg_match('~^(check|database|table|columns|sql|indexes|descidx|comment|view|' . (min_version(9.3) ? 'materializedview|' : '') . 'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~', $feature); } function kill_process($val) { diff --git a/adminer/include/editing.inc.php b/adminer/include/editing.inc.php index 5d358218..27c182b9 100644 --- a/adminer/include/editing.inc.php +++ b/adminer/include/editing.inc.php @@ -532,6 +532,20 @@ function create_routine($routine, $row) { ; } +/** Get defined check constraints +* @param string +* @return array array($name => $clause) +*/ +function check_constraints($table) { + // MariaDB contains CHECK_CONSTRAINTS.TABLE_NAME, MySQL and PostrgreSQL not + return get_key_vals("SELECT c.CONSTRAINT_NAME, CHECK_CLAUSE +FROM information_schema.CHECK_CONSTRAINTS c +JOIN information_schema.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME +WHERE c.CONSTRAINT_SCHEMA = " . q($_GET["ns"] != "" ? $_GET["ns"] : DB) . " +AND t.TABLE_NAME = " . q($table) . " +AND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'"); // ignore default IS NOT NULL checks in PostrgreSQL +} + /** Remove current user definer from SQL command * @param string * @return string diff --git a/changes.txt b/changes.txt index 2df0b59e..ded6505f 100644 --- a/changes.txt +++ b/changes.txt @@ -1,6 +1,6 @@ Adminer 4.17.0-dev: Hide index column options by default -MySQL: Support CHECK constraint +MySQL, PostgreSQL: Support CHECK constraint PostgreSQL: Link user defined types PostgreSQL: Constraint enum values in editing (bug #270) SQLite: Show all supported pragmas in Variables