From f9dd7aad69c87dd6e4f4398f1a09aa1bf93e9825 Mon Sep 17 00:00:00 2001 From: jakubvrana Date: Thu, 22 Apr 2010 15:53:42 +0000 Subject: [PATCH] Driver specific trigger options git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1478 7c3ca157-0c34-0410-bff1-cbf682f78f5c --- adminer/drivers/mssql.inc.php | 13 +++++++++++-- adminer/drivers/mysql.inc.php | 10 +++++++++- adminer/drivers/pgsql.inc.php | 9 ++++++++- adminer/drivers/sqlite.inc.php | 7 +++++++ adminer/trigger.inc.php | 13 ++++++++----- 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index 110f3a4a..0ad496e8 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -412,12 +412,14 @@ WHERE OBJECT_NAME(indexes.object_id) = " . $connection2->quote($table) $result = $connection->query("SELECT s.name [Trigger], CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event], CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing], -c.text [Statement] +c.text FROM sysobjects s JOIN syscomments c ON s.id = c.id WHERE s.xtype = 'TR' AND s.name = " . $connection->quote($name) ); - return $result->fetch_assoc(); + $row = $result->fetch_assoc(); + $row["Statement"] = preg_replace('~^.+\\s+AS\\s+~isU', '', $row["text"]); //! identifiers, comments + return $row; } function triggers($table) { @@ -436,6 +438,13 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . $connection->quote($table) return $return; } + function trigger_options() { + return array( + "Timing" => array("AFTER", "INSTEAD OF"), + "Type" => array("AS"), + ); + } + function support($feature) { return ereg('^(view|routine|trigger)$', $feature); } diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index 630095ad..a99dd153 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -454,7 +454,7 @@ if (!defined("DRIVER")) { */ function view($name) { global $connection; - return array("select" => preg_replace('~^(?:[^`]|`[^`]*`)* AS ~U', '', $connection->result("SHOW CREATE VIEW " . idf_escape($name), 1))); + return array("select" => preg_replace('~^(?:[^`]|`[^`]*`)*\\s+AS\\s+~isU', '', $connection->result("SHOW CREATE VIEW " . idf_escape($name), 1))); } /** Get sorted grouped list of collations @@ -648,6 +648,14 @@ if (!defined("DRIVER")) { return $return; } + function trigger_options() { + return array( + "Timing" => array("BEFORE", "AFTER"), + // Event is always INSERT, UPDATE, DELETE + "Type" => array("FOR EACH ROW"), + ); + } + /** Explain select * @param Min_DB * @param string diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index a584808c..8a3bf846 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -397,7 +397,7 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . $connection->qu function trigger($name) { global $connection; - $result = $connection->query('SELECT trigger_name AS "Trigger", condition_timing AS "Timing", event_manipulation AS "Event", action_statement AS "Statement" FROM information_schema.triggers WHERE event_object_table = ' . $connection->quote($_GET["trigger"]) . ' AND trigger_name = ' . $connection->quote($name)); + $result = $connection->query('SELECT trigger_name AS "Trigger", condition_timing AS "Timing", event_manipulation AS "Event", action_statement AS "Statement" FROM information_schema.triggers WHERE event_object_table = ' . $connection->quote($_GET["trigger"]) . ' AND trigger_name = ' . $connection->quote($name)); //! detect Type return $result->fetch_assoc(); } @@ -411,6 +411,13 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . $connection->qu return $return; } + function trigger_options() { + return array( + "Timing" => array("BEFORE", "AFTER"), + "Type" => array("FOR EACH STATEMENT", "FOR EACH ROW"), + ); + } + function explain($connection, $query) { return $connection->query("EXPLAIN $query"); } diff --git a/adminer/drivers/sqlite.inc.php b/adminer/drivers/sqlite.inc.php index b482a2cb..7e149311 100644 --- a/adminer/drivers/sqlite.inc.php +++ b/adminer/drivers/sqlite.inc.php @@ -453,6 +453,13 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) { return $return; } + function trigger_options() { + return array( + "Timing" => array("BEFORE", "AFTER", "INSTEAD OF"), + "Type" => array("FOR EACH ROW"), + ); + } + function explain($connection, $query) { return $connection->query("EXPLAIN $query"); } diff --git a/adminer/trigger.inc.php b/adminer/trigger.inc.php index 8612b1a9..c2df0ab6 100644 --- a/adminer/trigger.inc.php +++ b/adminer/trigger.inc.php @@ -1,13 +1,15 @@ -
+
-
" maxlength="64"> +

+: " maxlength="64"> >