User types support for PostgreSQL
This commit is contained in:
parent
e678e46797
commit
3308856f9e
|
@ -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");
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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"])) {
|
||||||
|
|
|
@ -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
33
adminer/type.inc.php
Normal 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>
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue