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";
}
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")) {
echo "<h3>" . lang('Events') . "</h3>\n";
$result = $connection->query("SHOW EVENTS");

View file

@ -777,6 +777,13 @@ if (!defined("DRIVER")) {
return $connection->query("EXPLAIN $query");
}
/** Get user defined types
* @return array
*/
function types() {
return array();
}
/** Get existing schemas
* @return array
*/
@ -854,7 +861,7 @@ if (!defined("DRIVER")) {
*/
function support($feature) {
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

View file

@ -469,6 +469,15 @@ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . $connection->qu
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() {
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) {
global $connection, $types, $structured_types;
foreach (get_vals("SELECT typname
FROM pg_type
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')
$return = $connection->query("SET search_path TO " . idf_escape($schema));
foreach (types() as $type) { //! get types from current_schemas('t')
if (!isset($types[$type])) {
$types[$type] = 0;
$structured_types[lang('User types')][] = $type;
}
}
return $connection->query("SET search_path TO " . idf_escape($schema));
return $return;
}
function use_sql($database) {
@ -503,7 +508,7 @@ AND typelem = 0"
}
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";

View file

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

View file

@ -251,5 +251,9 @@ $translations = array(
'Sequence has been altered.' => 'Sekvence byla změněna.',
'Alter sequence' => 'Pozměnit sekvenci',
'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',
);

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 %%
Remember export parameters in cookie
Allow semicolon as CSV separator
Schema and sequences support (PostgreSQL)
Schemas, sequences and types support (PostgreSQL)
Autofocus username in login form
Disable spellchecking in SQL textareas
Display auto_increment value of inserted item