User types support for PostgreSQL

This commit is contained in:
Jakub Vrana 2010-05-21 16:07:22 +02:00
parent e678e46797
commit 3308856f9e
7 changed files with 76 additions and 10 deletions

View file

@ -126,6 +126,21 @@ if ($_GET["ns"] !== "") {
echo "<p><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n"; echo "<p><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n";
} }
if (support("type")) {
echo "<h3>" . lang('User types') . "</h3>\n";
$types = types();
if ($types) {
echo "<table cellspacing='0'>\n";
echo "<thead><tr><th>" . lang('Name') . "</thead>\n";
odd('');
foreach ($types as $val) {
echo "<tr" . odd() . "><th><a href='" . h(ME) . "type=" . urlencode($val) . "'>" . h($val) . "</a>\n";
}
echo "</table>\n";
}
echo "<p><a href='" . h(ME) . "type='>" . lang('Create type') . "</a>\n";
}
if (support("event")) { if (support("event")) {
echo "<h3>" . lang('Events') . "</h3>\n"; echo "<h3>" . lang('Events') . "</h3>\n";
$result = $connection->query("SHOW EVENTS"); $result = $connection->query("SHOW EVENTS");

View file

@ -777,6 +777,13 @@ if (!defined("DRIVER")) {
return $connection->query("EXPLAIN $query"); return $connection->query("EXPLAIN $query");
} }
/** Get user defined types
* @return array
*/
function types() {
return array();
}
/** Get existing schemas /** Get existing schemas
* @return array * @return array
*/ */
@ -854,7 +861,7 @@ if (!defined("DRIVER")) {
*/ */
function support($feature) { function support($feature) {
global $connection; global $connection;
return !ereg("scheme|sequence" . ($connection->server_info < 5.1 ? "|event|partitioning" . ($connection->server_info < 5 ? "|view|routine|trigger" : "") : ""), $feature); return !ereg("scheme|sequence|type" . ($connection->server_info < 5.1 ? "|event|partitioning" . ($connection->server_info < 5 ? "|view|routine|trigger" : "") : ""), $feature);
} }
$jush = "sql"; ///< @var string JUSH identifier $jush = "sql"; ///< @var string JUSH identifier

View file

@ -469,6 +469,15 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . $connection->qu
return $connection->query("EXPLAIN $query"); return $connection->query("EXPLAIN $query");
} }
function types() {
return get_vals("SELECT typname
FROM pg_type
WHERE typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())
AND typtype IN ('b','d','e')
AND typelem = 0"
);
}
function schemas() { function schemas() {
return get_vals("SELECT nspname FROM pg_namespace"); return get_vals("SELECT nspname FROM pg_namespace");
} }
@ -480,18 +489,14 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . $connection->qu
function set_schema($schema) { function set_schema($schema) {
global $connection, $types, $structured_types; global $connection, $types, $structured_types;
foreach (get_vals("SELECT typname $return = $connection->query("SET search_path TO " . idf_escape($schema));
FROM pg_type foreach (types() as $type) { //! get types from current_schemas('t')
WHERE typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = " . $connection->quote($schema) . ")
AND typtype IN ('b','d','e')
AND typelem = 0"
) as $type) { //! get types from current_schemas('t')
if (!isset($types[$type])) { if (!isset($types[$type])) {
$types[$type] = 0; $types[$type] = 0;
$structured_types[lang('User types')][] = $type; $structured_types[lang('User types')][] = $type;
} }
} }
return $connection->query("SET search_path TO " . idf_escape($schema)); return $return;
} }
function use_sql($database) { function use_sql($database) {
@ -503,7 +508,7 @@ AND typelem = 0"
} }
function support($feature) { function support($feature) {
return ereg('^(comment|view|scheme|sequence|trigger|variables|drop_col)$', $feature); //! routine| return ereg('^(comment|view|scheme|sequence|trigger|type|variables|drop_col)$', $feature); //! routine|
} }
$jush = "pgsql"; $jush = "pgsql";

View file

@ -54,6 +54,8 @@ if (isset($_GET["download"])) {
include "./procedure.inc.php"; include "./procedure.inc.php";
} elseif (isset($_GET["sequence"])) { } elseif (isset($_GET["sequence"])) {
include "./sequence.inc.php"; include "./sequence.inc.php";
} elseif (isset($_GET["type"])) {
include "./type.inc.php";
} elseif (isset($_GET["trigger"])) { } elseif (isset($_GET["trigger"])) {
include "./trigger.inc.php"; include "./trigger.inc.php";
} elseif (isset($_GET["user"])) { } elseif (isset($_GET["user"])) {

View file

@ -251,5 +251,9 @@ $translations = array(
'Sequence has been altered.' => 'Sekvence byla změněna.', 'Sequence has been altered.' => 'Sekvence byla změněna.',
'Alter sequence' => 'Pozměnit sekvenci', 'Alter sequence' => 'Pozměnit sekvenci',
'User types' => 'Uživatelské typy', 'User types' => 'Uživatelské typy',
'Create type' => 'Vytvořit typ',
'Type has been dropped.' => 'Typ byl odstraněn.',
'Type has been created.' => 'Typ byl vytvořen.',
'Alter type' => 'Pozměnit typ',
'Search data in tables' => 'Vyhledat data v tabulkách', 'Search data in tables' => 'Vyhledat data v tabulkách',
); );

33
adminer/type.inc.php Normal file
View file

@ -0,0 +1,33 @@
<?php
$TYPE = $_GET["type"];
if ($_POST && !$error) {
$link = substr(ME, 0, -1);
if ($_POST["drop"]) {
query_redirect("DROP TYPE " . idf_escape($TYPE), $link, lang('Type has been dropped.'));
} else {
query_redirect("CREATE TYPE " . idf_escape($_POST["name"]) . " $_POST[as]", $link, lang('Type has been created.'));
}
}
page_header($TYPE != "" ? lang('Alter type') . ": " . h($TYPE) : lang('Create type'), $error);
$row["as"] = "AS ";
if ($_POST) {
$row = $_POST;
}
?>
<form action="" method="post">
<p>
<input type="hidden" name="token" value="<?php echo $token; ?>">
<?php
if ($TYPE != "") {
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'$confirm>\n";
} else {
echo "<input name='name' value='" . h($row['name']) . "'>\n";
textarea("as", $row["as"]);
echo "<p><input type='submit' value='" . lang('Save') . "'>\n";
}
?>
</form>

View file

@ -8,7 +8,7 @@ Show number of tables in server overview
Operator LIKE %% Operator LIKE %%
Remember export parameters in cookie Remember export parameters in cookie
Allow semicolon as CSV separator Allow semicolon as CSV separator
Schema and sequences support (PostgreSQL) Schemas, sequences and types support (PostgreSQL)
Autofocus username in login form Autofocus username in login form
Disable spellchecking in SQL textareas Disable spellchecking in SQL textareas
Display auto_increment value of inserted item Display auto_increment value of inserted item