mirror of
https://github.com/vrana/adminer.git
synced 2025-08-08 07:36:44 +02:00
PostgreSQL: Simplify OID
This commit is contained in:
@@ -207,6 +207,8 @@ if (isset($_GET["pgsql"])) {
|
|||||||
public $functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper");
|
public $functions = array("char_length", "lower", "round", "to_hex", "to_timestamp", "upper");
|
||||||
public $grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
public $grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||||
|
|
||||||
|
public string $nsOid = "(SELECT oid FROM pg_namespace WHERE nspname = current_schema())";
|
||||||
|
|
||||||
static function connect(?string $server, string $username, string $password) {
|
static function connect(?string $server, string $username, string $password) {
|
||||||
$connection = parent::connect($server, $username, $password);
|
$connection = parent::connect($server, $username, $password);
|
||||||
if (is_string($connection)) {
|
if (is_string($connection)) {
|
||||||
@@ -325,23 +327,15 @@ if (isset($_GET["pgsql"])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function inheritsFrom(string $table): array {
|
function inheritsFrom(string $table): array {
|
||||||
return get_vals("SELECT p.relname
|
return get_vals("SELECT relname FROM pg_class JOIN pg_inherits ON inhparent = oid WHERE inhrelid = " . $this->tableOid($table) . " ORDER BY 1");
|
||||||
FROM pg_class c
|
|
||||||
JOIN pg_namespace n ON n.nspname = current_schema() AND n.oid = c.relnamespace
|
|
||||||
JOIN pg_inherits ON inhrelid = c.oid
|
|
||||||
JOIN pg_class p ON inhparent = p.oid
|
|
||||||
WHERE c.relname = " . q($table) . " AND c.relkind = 'r'
|
|
||||||
ORDER BY 1");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function inheritedTables(string $table): array {
|
function inheritedTables(string $table): array {
|
||||||
return get_vals("SELECT c.relname
|
return get_vals("SELECT relname FROM pg_inherits JOIN pg_class ON inhrelid = oid WHERE inhparent = " . $this->tableOid($table) . " ORDER BY 1");
|
||||||
FROM pg_class p
|
}
|
||||||
JOIN pg_namespace n ON n.nspname = current_schema() AND n.oid = p.relnamespace
|
|
||||||
JOIN pg_inherits ON inhparent = p.oid
|
function tableOid(string $table): string {
|
||||||
JOIN pg_class c ON inhrelid = c.oid
|
return "(SELECT oid FROM pg_class WHERE relnamespace = $this->nsOid AND relname = " . q($table) . " AND relkind IN ('r', 'm', 'v', 'f', 'p'))";
|
||||||
WHERE p.relname = " . q($table) . " AND p.relkind = 'p'
|
|
||||||
ORDER BY 1");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function supportsIndex(array $table_status): bool {
|
function supportsIndex(array $table_status): bool {
|
||||||
@@ -433,12 +427,12 @@ ORDER BY 1";
|
|||||||
obj_description(c.oid, 'pg_class') AS \"Comment\",
|
obj_description(c.oid, 'pg_class') AS \"Comment\",
|
||||||
" . (min_version(12) ? "''" : "CASE WHEN c.relhasoids THEN 'oid' ELSE '' END") . " AS \"Oid\",
|
" . (min_version(12) ? "''" : "CASE WHEN c.relhasoids THEN 'oid' ELSE '' END") . " AS \"Oid\",
|
||||||
c.reltuples as \"Rows\",
|
c.reltuples as \"Rows\",
|
||||||
n.nspname
|
current_schema() AS nspname
|
||||||
FROM pg_class c
|
FROM pg_class c
|
||||||
JOIN pg_namespace n ON n.nspname = current_schema() AND n.oid = c.relnamespace
|
|
||||||
LEFT JOIN pg_inherits ON inhrelid = c.oid
|
LEFT JOIN pg_inherits ON inhrelid = c.oid
|
||||||
WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
||||||
" . ($name != "" ? "AND relname = " . q($name) : "AND inhparent IS NULL ORDER BY relname")) as $row //! Auto_increment
|
AND c.relnamespace = " . driver()->nsOid . "
|
||||||
|
AND " . ($name != "" ? "relname = " . q($name) : "inhparent IS NULL ORDER BY relname")) as $row //! Auto_increment
|
||||||
) {
|
) {
|
||||||
$return[$row["Name"]] = $row;
|
$return[$row["Name"]] = $row;
|
||||||
}
|
}
|
||||||
@@ -465,15 +459,12 @@ WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
|
|||||||
format_type(a.atttypid, a.atttypmod) AS full_type,
|
format_type(a.atttypid, a.atttypmod) AS full_type,
|
||||||
pg_get_expr(d.adbin, d.adrelid) AS default,
|
pg_get_expr(d.adbin, d.adrelid) AS default,
|
||||||
a.attnotnull::int,
|
a.attnotnull::int,
|
||||||
col_description(c.oid, a.attnum) AS comment" . (min_version(10) ? ",
|
col_description(a.attrelid, a.attnum) AS comment" . (min_version(10) ? ",
|
||||||
a.attidentity" . (min_version(12) ? ",
|
a.attidentity" . (min_version(12) ? ",
|
||||||
a.attgenerated" : "") : "") . "
|
a.attgenerated" : "") : "") . "
|
||||||
FROM pg_class c
|
FROM pg_attribute a
|
||||||
JOIN pg_namespace n ON c.relnamespace = n.oid
|
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
|
||||||
JOIN pg_attribute a ON c.oid = a.attrelid
|
WHERE a.attrelid = " . driver()->tableOid($table) . "
|
||||||
LEFT JOIN pg_attrdef d ON c.oid = d.adrelid AND a.attnum = d.adnum
|
|
||||||
WHERE c.relname = " . q($table) . "
|
|
||||||
AND n.nspname = current_schema()
|
|
||||||
AND NOT a.attisdropped
|
AND NOT a.attisdropped
|
||||||
AND a.attnum > 0
|
AND a.attnum > 0
|
||||||
ORDER BY a.attnum") as $row
|
ORDER BY a.attnum") as $row
|
||||||
@@ -509,12 +500,13 @@ ORDER BY a.attnum") as $row
|
|||||||
function indexes($table, $connection2 = null) {
|
function indexes($table, $connection2 = null) {
|
||||||
$connection2 = connection($connection2);
|
$connection2 = connection($connection2);
|
||||||
$return = array();
|
$return = array();
|
||||||
$table_oid = get_val("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($table), 0, $connection2);
|
$table_oid = driver()->tableOid($table);
|
||||||
$columns = get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0", $connection2);
|
$columns = get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0", $connection2);
|
||||||
foreach (
|
foreach (
|
||||||
get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, (indpred IS NOT NULL)::int as indispartial
|
get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, (indpred IS NOT NULL)::int as indispartial
|
||||||
FROM pg_index i, pg_class ci
|
FROM pg_index i
|
||||||
WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid
|
JOIN pg_class c ON i.indexrelid = c.oid
|
||||||
|
WHERE i.indrelid = $table_oid
|
||||||
ORDER BY indisprimary DESC, indisunique DESC", $connection2) as $row
|
ORDER BY indisprimary DESC, indisunique DESC", $connection2) as $row
|
||||||
) {
|
) {
|
||||||
$relname = $row["relname"];
|
$relname = $row["relname"];
|
||||||
@@ -539,7 +531,7 @@ ORDER BY indisprimary DESC, indisunique DESC", $connection2) as $row
|
|||||||
foreach (
|
foreach (
|
||||||
get_rows("SELECT conname, condeferrable::int AS deferrable, pg_get_constraintdef(oid) AS definition
|
get_rows("SELECT conname, condeferrable::int AS deferrable, pg_get_constraintdef(oid) AS definition
|
||||||
FROM pg_constraint
|
FROM pg_constraint
|
||||||
WHERE conrelid = (SELECT pc.oid FROM pg_class AS pc INNER JOIN pg_namespace AS pn ON (pn.oid = pc.relnamespace) WHERE pc.relname = " . q($table) . " AND pn.nspname = current_schema())
|
WHERE conrelid = " . driver()->tableOid($table) . "
|
||||||
AND contype = 'f'::char
|
AND contype = 'f'::char
|
||||||
ORDER BY conkey, conname") as $row
|
ORDER BY conkey, conname") as $row
|
||||||
) {
|
) {
|
||||||
@@ -559,7 +551,7 @@ ORDER BY conkey, conname") as $row
|
|||||||
}
|
}
|
||||||
|
|
||||||
function view($name) {
|
function view($name) {
|
||||||
return array("select" => trim(get_val("SELECT pg_get_viewdef(" . get_val("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = " . q($name)) . ")")));
|
return array("select" => trim(get_val("SELECT pg_get_viewdef(" . driver()->tableOid($name) . ")")));
|
||||||
}
|
}
|
||||||
|
|
||||||
function collations() {
|
function collations() {
|
||||||
@@ -819,7 +811,7 @@ ORDER BY SPECIFIC_NAME');
|
|||||||
return get_key_vals(
|
return get_key_vals(
|
||||||
"SELECT oid, typname
|
"SELECT oid, typname
|
||||||
FROM pg_type
|
FROM pg_type
|
||||||
WHERE typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())
|
WHERE typnamespace = " . driver()->nsOid . "
|
||||||
AND typtype IN ('b','d','e')
|
AND typtype IN ('b','d','e')
|
||||||
AND typelem = 0"
|
AND typelem = 0"
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user