@ -207,6 +207,8 @@ if (isset($_GET["pgsql"])) {
public $functions = array ( " char_length " , " lower " , " round " , " to_hex " , " to_timestamp " , " upper " );
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 ) {
$connection = parent :: connect ( $server , $username , $password );
if ( is_string ( $connection )) {
@ -325,23 +327,15 @@ if (isset($_GET["pgsql"])) {
}
function inheritsFrom ( string $table ) : array {
return get_vals ( " SELECT p.relname
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 " );
return get_vals ( " SELECT relname FROM pg_class JOIN pg_inherits ON inhparent = oid WHERE inhrelid = " . $this -> tableOid ( $table ) . " ORDER BY 1 " );
}
function inheritedTables ( string $table ) : array {
return get_vals ( " SELECT c.relname
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
JOIN pg_class c ON inhrelid = c . oid
WHERE p . relname = " . q( $table ) . " AND p . relkind = 'p'
ORDER BY 1 " );
return get_vals ( " SELECT relname FROM pg_inherits JOIN pg_class ON inhrelid = oid WHERE inhparent = " . $this -> tableOid ( $table ) . " ORDER BY 1 " );
}
function tableOid ( string $table ) : string {
return " (SELECT oid FROM pg_class WHERE relnamespace = $this->nsOid AND relname = " . q ( $table ) . " AND relkind IN ('r', 'm', 'v', 'f', 'p')) " ;
}
function supportsIndex ( array $table_status ) : bool {
@ -433,12 +427,12 @@ ORDER BY 1";
obj_description ( c . oid , 'pg_class' ) AS \ " Comment \" ,
" . (min_version(12) ? " '' " : " CASE WHEN c . relhasoids THEN 'oid' ELSE '' END " ) . " AS \ " Oid \" ,
c . reltuples as \ " Rows \" ,
n . nspname
current_schema () AS nspname
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
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 ;
}
@ -465,15 +459,12 @@ WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
format_type ( a . atttypid , a . atttypmod ) AS full_type ,
pg_get_expr ( d . adbin , d . adrelid ) AS default ,
a . attnotnull :: int ,
col_description ( c . o id, a . attnum ) AS comment " . (min_version(10) ? " ,
col_description ( a . attrel id, a . attnum ) AS comment " . (min_version(10) ? " ,
a . attidentity " . (min_version(12) ? " ,
a . attgenerated " : " " ) : " " ) . "
FROM pg_class c
JOIN pg_namespace n ON c . relnamespace = n . oid
JOIN pg_attribute a ON c . oid = a . attrelid
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 ()
FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a . attrelid = d . adrelid AND a . attnum = d . adnum
WHERE a . attrelid = " . driver()->tableOid( $table ) . "
AND NOT a . attisdropped
AND a . attnum > 0
ORDER BY a . attnum " ) as $row
@ -509,12 +500,13 @@ ORDER BY a.attnum") as $row
function indexes ( $table , $connection2 = null ) {
$connection2 = connection ( $connection2 );
$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 );
foreach (
get_rows ( " SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, (indpred IS NOT NULL)::int as indispartial
FROM pg_index i , pg_class ci
WHERE i . indrelid = $table_oid AND ci . oid = i . indexrelid
FROM pg_index i
JOIN pg_class c ON i . indexrelid = c . oid
WHERE i . indrelid = $table_oid
ORDER BY indisprimary DESC , indisunique DESC " , $connection2 ) as $row
) {
$relname = $row [ " relname " ];
@ -539,7 +531,7 @@ ORDER BY indisprimary DESC, indisunique DESC", $connection2) as $row
foreach (
get_rows ( " SELECT conname, condeferrable::int AS deferrable, pg_get_constraintdef(oid) AS definition
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
ORDER BY conkey , conname " ) as $row
) {
@ -559,7 +551,7 @@ ORDER BY conkey, conname") as $row
}
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 () {
@ -819,7 +811,7 @@ ORDER BY SPECIFIC_NAME');
return get_key_vals (
" SELECT oid, typname
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 typelem = 0 "
);