removed MySQL < 5 code
This commit is contained in:
@@ -200,7 +200,6 @@ function PMA_DBI_get_tables($database, $link = null)
|
|||||||
* PMA_DBI_get_tables_full('my_database', 'my_tables_', 'comment'));
|
* PMA_DBI_get_tables_full('my_database', 'my_tables_', 'comment'));
|
||||||
* </code>
|
* </code>
|
||||||
*
|
*
|
||||||
* @uses PMA_MYSQL_INT_VERSION
|
|
||||||
* @uses PMA_DBI_fetch_result()
|
* @uses PMA_DBI_fetch_result()
|
||||||
* @uses PMA_escape_mysql_wildcards()
|
* @uses PMA_escape_mysql_wildcards()
|
||||||
* @uses PMA_backquote()
|
* @uses PMA_backquote()
|
||||||
@@ -230,68 +229,67 @@ function PMA_DBI_get_tables_full($database, $table = false,
|
|||||||
|
|
||||||
$tables = array();
|
$tables = array();
|
||||||
|
|
||||||
if (PMA_MYSQL_INT_VERSION >= 50002) {
|
// get table information from information_schema
|
||||||
// get table information from information_schema
|
if ($table) {
|
||||||
if ($table) {
|
if (true === $tbl_is_group) {
|
||||||
if (true === $tbl_is_group) {
|
$sql_where_table = 'AND `TABLE_NAME` LIKE \''
|
||||||
$sql_where_table = 'AND `TABLE_NAME` LIKE \''
|
. PMA_escape_mysql_wildcards(addslashes($table)) . '%\'';
|
||||||
. PMA_escape_mysql_wildcards(addslashes($table)) . '%\'';
|
} elseif ('comment' === $tbl_is_group) {
|
||||||
} elseif ('comment' === $tbl_is_group) {
|
$sql_where_table = 'AND `TABLE_COMMENT` LIKE \''
|
||||||
$sql_where_table = 'AND `TABLE_COMMENT` LIKE \''
|
. PMA_escape_mysql_wildcards(addslashes($table)) . '%\'';
|
||||||
. PMA_escape_mysql_wildcards(addslashes($table)) . '%\'';
|
|
||||||
} else {
|
|
||||||
$sql_where_table = 'AND `TABLE_NAME` = \'' . addslashes($table) . '\'';
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$sql_where_table = '';
|
$sql_where_table = 'AND `TABLE_NAME` = \'' . addslashes($table) . '\'';
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
// for PMA bc:
|
$sql_where_table = '';
|
||||||
// `SCHEMA_FIELD_NAME` AS `SHOW_TABLE_STATUS_FIELD_NAME`
|
|
||||||
//
|
|
||||||
// on non-Windows servers,
|
|
||||||
// added BINARY in the WHERE clause to force a case sensitive
|
|
||||||
// comparison (if we are looking for the db Aa we don't want
|
|
||||||
// to find the db aa)
|
|
||||||
$this_databases = array_map('PMA_sqlAddslashes', $databases);
|
|
||||||
|
|
||||||
$sql = '
|
|
||||||
SELECT *,
|
|
||||||
`TABLE_SCHEMA` AS `Db`,
|
|
||||||
`TABLE_NAME` AS `Name`,
|
|
||||||
`ENGINE` AS `Engine`,
|
|
||||||
`ENGINE` AS `Type`,
|
|
||||||
`VERSION` AS `Version`,
|
|
||||||
`ROW_FORMAT` AS `Row_format`,
|
|
||||||
`TABLE_ROWS` AS `Rows`,
|
|
||||||
`AVG_ROW_LENGTH` AS `Avg_row_length`,
|
|
||||||
`DATA_LENGTH` AS `Data_length`,
|
|
||||||
`MAX_DATA_LENGTH` AS `Max_data_length`,
|
|
||||||
`INDEX_LENGTH` AS `Index_length`,
|
|
||||||
`DATA_FREE` AS `Data_free`,
|
|
||||||
`AUTO_INCREMENT` AS `Auto_increment`,
|
|
||||||
`CREATE_TIME` AS `Create_time`,
|
|
||||||
`UPDATE_TIME` AS `Update_time`,
|
|
||||||
`CHECK_TIME` AS `Check_time`,
|
|
||||||
`TABLE_COLLATION` AS `Collation`,
|
|
||||||
`CHECKSUM` AS `Checksum`,
|
|
||||||
`CREATE_OPTIONS` AS `Create_options`,
|
|
||||||
`TABLE_COMMENT` AS `Comment`
|
|
||||||
FROM `information_schema`.`TABLES`
|
|
||||||
WHERE ' . (PMA_IS_WINDOWS ? '' : 'BINARY') . ' `TABLE_SCHEMA` IN (\'' . implode("', '", $this_databases) . '\')
|
|
||||||
' . $sql_where_table;
|
|
||||||
|
|
||||||
if ($limit_count) {
|
|
||||||
$sql .= ' LIMIT ' . $limit_count . ' OFFSET ' . $limit_offset;
|
|
||||||
}
|
|
||||||
$tables = PMA_DBI_fetch_result($sql, array('TABLE_SCHEMA', 'TABLE_NAME'),
|
|
||||||
null, $link);
|
|
||||||
unset($sql_where_table, $sql);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for PMA bc:
|
||||||
|
// `SCHEMA_FIELD_NAME` AS `SHOW_TABLE_STATUS_FIELD_NAME`
|
||||||
|
//
|
||||||
|
// on non-Windows servers,
|
||||||
|
// added BINARY in the WHERE clause to force a case sensitive
|
||||||
|
// comparison (if we are looking for the db Aa we don't want
|
||||||
|
// to find the db aa)
|
||||||
|
$this_databases = array_map('PMA_sqlAddslashes', $databases);
|
||||||
|
|
||||||
|
$sql = '
|
||||||
|
SELECT *,
|
||||||
|
`TABLE_SCHEMA` AS `Db`,
|
||||||
|
`TABLE_NAME` AS `Name`,
|
||||||
|
`ENGINE` AS `Engine`,
|
||||||
|
`ENGINE` AS `Type`,
|
||||||
|
`VERSION` AS `Version`,
|
||||||
|
`ROW_FORMAT` AS `Row_format`,
|
||||||
|
`TABLE_ROWS` AS `Rows`,
|
||||||
|
`AVG_ROW_LENGTH` AS `Avg_row_length`,
|
||||||
|
`DATA_LENGTH` AS `Data_length`,
|
||||||
|
`MAX_DATA_LENGTH` AS `Max_data_length`,
|
||||||
|
`INDEX_LENGTH` AS `Index_length`,
|
||||||
|
`DATA_FREE` AS `Data_free`,
|
||||||
|
`AUTO_INCREMENT` AS `Auto_increment`,
|
||||||
|
`CREATE_TIME` AS `Create_time`,
|
||||||
|
`UPDATE_TIME` AS `Update_time`,
|
||||||
|
`CHECK_TIME` AS `Check_time`,
|
||||||
|
`TABLE_COLLATION` AS `Collation`,
|
||||||
|
`CHECKSUM` AS `Checksum`,
|
||||||
|
`CREATE_OPTIONS` AS `Create_options`,
|
||||||
|
`TABLE_COMMENT` AS `Comment`
|
||||||
|
FROM `information_schema`.`TABLES`
|
||||||
|
WHERE ' . (PMA_IS_WINDOWS ? '' : 'BINARY') . ' `TABLE_SCHEMA` IN (\'' . implode("', '", $this_databases) . '\')
|
||||||
|
' . $sql_where_table;
|
||||||
|
|
||||||
|
if ($limit_count) {
|
||||||
|
$sql .= ' LIMIT ' . $limit_count . ' OFFSET ' . $limit_offset;
|
||||||
|
}
|
||||||
|
$tables = PMA_DBI_fetch_result($sql, array('TABLE_SCHEMA', 'TABLE_NAME'),
|
||||||
|
null, $link);
|
||||||
|
unset($sql_where_table, $sql);
|
||||||
|
|
||||||
// If permissions are wrong on even one database directory,
|
// If permissions are wrong on even one database directory,
|
||||||
// information_schema does not return any table info for any database
|
// information_schema does not return any table info for any database
|
||||||
// this is why we fall back to SHOW TABLE STATUS even for MySQL >= 50002
|
// this is why we fall back to SHOW TABLE STATUS even for MySQL >= 50002
|
||||||
if (PMA_MYSQL_INT_VERSION < 50002 || empty($tables)) {
|
if (empty($tables)) {
|
||||||
foreach ($databases as $each_database) {
|
foreach ($databases as $each_database) {
|
||||||
if (true === $tbl_is_group) {
|
if (true === $tbl_is_group) {
|
||||||
$sql = 'SHOW TABLE STATUS FROM '
|
$sql = 'SHOW TABLE STATUS FROM '
|
||||||
@@ -412,124 +410,81 @@ function PMA_DBI_get_databases_full($database = null, $force_stats = false,
|
|||||||
|
|
||||||
$apply_limit_and_order_manual = true;
|
$apply_limit_and_order_manual = true;
|
||||||
|
|
||||||
if (PMA_MYSQL_INT_VERSION >= 50002) {
|
/**
|
||||||
/**
|
* if $GLOBALS['cfg']['NaturalOrder'] is enabled, we cannot use LIMIT
|
||||||
* if $GLOBALS['cfg']['NaturalOrder'] is enabled, we cannot use LIMIT
|
* cause MySQL does not support natural ordering, we have to do it afterward
|
||||||
* cause MySQL does not support natural ordering, we have to do it afterward
|
*/
|
||||||
*/
|
if ($GLOBALS['cfg']['NaturalOrder']) {
|
||||||
if ($GLOBALS['cfg']['NaturalOrder']) {
|
$limit = '';
|
||||||
$limit = '';
|
|
||||||
} else {
|
|
||||||
if ($limit_count) {
|
|
||||||
$limit = ' LIMIT ' . $limit_count . ' OFFSET ' . $limit_offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
$apply_limit_and_order_manual = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get table information from information_schema
|
|
||||||
if ($database) {
|
|
||||||
$sql_where_schema = 'WHERE `SCHEMA_NAME` LIKE \''
|
|
||||||
. addslashes($database) . '\'';
|
|
||||||
} else {
|
|
||||||
$sql_where_schema = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// for PMA bc:
|
|
||||||
// `SCHEMA_FIELD_NAME` AS `SHOW_TABLE_STATUS_FIELD_NAME`
|
|
||||||
$sql = '
|
|
||||||
SELECT `information_schema`.`SCHEMATA`.*';
|
|
||||||
if ($force_stats) {
|
|
||||||
$sql .= ',
|
|
||||||
COUNT(`information_schema`.`TABLES`.`TABLE_SCHEMA`)
|
|
||||||
AS `SCHEMA_TABLES`,
|
|
||||||
SUM(`information_schema`.`TABLES`.`TABLE_ROWS`)
|
|
||||||
AS `SCHEMA_TABLE_ROWS`,
|
|
||||||
SUM(`information_schema`.`TABLES`.`DATA_LENGTH`)
|
|
||||||
AS `SCHEMA_DATA_LENGTH`,
|
|
||||||
SUM(`information_schema`.`TABLES`.`MAX_DATA_LENGTH`)
|
|
||||||
AS `SCHEMA_MAX_DATA_LENGTH`,
|
|
||||||
SUM(`information_schema`.`TABLES`.`INDEX_LENGTH`)
|
|
||||||
AS `SCHEMA_INDEX_LENGTH`,
|
|
||||||
SUM(`information_schema`.`TABLES`.`DATA_LENGTH`
|
|
||||||
+ `information_schema`.`TABLES`.`INDEX_LENGTH`)
|
|
||||||
AS `SCHEMA_LENGTH`,
|
|
||||||
SUM(`information_schema`.`TABLES`.`DATA_FREE`)
|
|
||||||
AS `SCHEMA_DATA_FREE`';
|
|
||||||
}
|
|
||||||
$sql .= '
|
|
||||||
FROM `information_schema`.`SCHEMATA`';
|
|
||||||
if ($force_stats) {
|
|
||||||
$sql .= '
|
|
||||||
LEFT JOIN `information_schema`.`TABLES`
|
|
||||||
ON BINARY `information_schema`.`TABLES`.`TABLE_SCHEMA`
|
|
||||||
= BINARY `information_schema`.`SCHEMATA`.`SCHEMA_NAME`';
|
|
||||||
}
|
|
||||||
$sql .= '
|
|
||||||
' . $sql_where_schema . '
|
|
||||||
GROUP BY BINARY `information_schema`.`SCHEMATA`.`SCHEMA_NAME`
|
|
||||||
ORDER BY BINARY ' . PMA_backquote($sort_by) . ' ' . $sort_order
|
|
||||||
. $limit;
|
|
||||||
$databases = PMA_DBI_fetch_result($sql, 'SCHEMA_NAME', null, $link);
|
|
||||||
|
|
||||||
$mysql_error = PMA_DBI_getError($link);
|
|
||||||
if (! count($databases) && $GLOBALS['errno']) {
|
|
||||||
PMA_mysqlDie($mysql_error, $sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
// display only databases also in official database list
|
|
||||||
// f.e. to apply hide_db and only_db
|
|
||||||
$drops = array_diff(array_keys($databases), $GLOBALS['PMA_List_Database']->items);
|
|
||||||
if (count($drops)) {
|
|
||||||
foreach ($drops as $drop) {
|
|
||||||
unset($databases[$drop]);
|
|
||||||
}
|
|
||||||
unset($drop);
|
|
||||||
}
|
|
||||||
unset($sql_where_schema, $sql, $drops);
|
|
||||||
} else {
|
} else {
|
||||||
foreach ($GLOBALS['PMA_List_Database']->items as $database_name) {
|
if ($limit_count) {
|
||||||
// MySQL forward compatibility
|
$limit = ' LIMIT ' . $limit_count . ' OFFSET ' . $limit_offset;
|
||||||
// so pma could use this array as if every server is of version >5.0
|
|
||||||
$databases[$database_name]['SCHEMA_NAME'] = $database_name;
|
|
||||||
|
|
||||||
if ($force_stats) {
|
|
||||||
require_once 'mysql_charsets.lib.php';
|
|
||||||
|
|
||||||
$databases[$database_name]['DEFAULT_COLLATION_NAME']
|
|
||||||
= PMA_getDbCollation($database_name);
|
|
||||||
|
|
||||||
// get additonal info about tables
|
|
||||||
$databases[$database_name]['SCHEMA_TABLES'] = 0;
|
|
||||||
$databases[$database_name]['SCHEMA_TABLE_ROWS'] = 0;
|
|
||||||
$databases[$database_name]['SCHEMA_DATA_LENGTH'] = 0;
|
|
||||||
$databases[$database_name]['SCHEMA_MAX_DATA_LENGTH'] = 0;
|
|
||||||
$databases[$database_name]['SCHEMA_INDEX_LENGTH'] = 0;
|
|
||||||
$databases[$database_name]['SCHEMA_LENGTH'] = 0;
|
|
||||||
$databases[$database_name]['SCHEMA_DATA_FREE'] = 0;
|
|
||||||
|
|
||||||
$res = PMA_DBI_query('SHOW TABLE STATUS FROM ' . PMA_backquote($database_name) . ';');
|
|
||||||
while ($row = PMA_DBI_fetch_assoc($res)) {
|
|
||||||
$databases[$database_name]['SCHEMA_TABLES']++;
|
|
||||||
$databases[$database_name]['SCHEMA_TABLE_ROWS']
|
|
||||||
+= $row['Rows'];
|
|
||||||
$databases[$database_name]['SCHEMA_DATA_LENGTH']
|
|
||||||
+= $row['Data_length'];
|
|
||||||
$databases[$database_name]['SCHEMA_MAX_DATA_LENGTH']
|
|
||||||
+= $row['Max_data_length'];
|
|
||||||
$databases[$database_name]['SCHEMA_INDEX_LENGTH']
|
|
||||||
+= $row['Index_length'];
|
|
||||||
$databases[$database_name]['SCHEMA_DATA_FREE']
|
|
||||||
+= $row['Data_free'];
|
|
||||||
$databases[$database_name]['SCHEMA_LENGTH']
|
|
||||||
+= $row['Data_length'] + $row['Index_length'];
|
|
||||||
}
|
|
||||||
PMA_DBI_free_result($res);
|
|
||||||
unset($res);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$apply_limit_and_order_manual = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get table information from information_schema
|
||||||
|
if ($database) {
|
||||||
|
$sql_where_schema = 'WHERE `SCHEMA_NAME` LIKE \''
|
||||||
|
. addslashes($database) . '\'';
|
||||||
|
} else {
|
||||||
|
$sql_where_schema = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// for PMA bc:
|
||||||
|
// `SCHEMA_FIELD_NAME` AS `SHOW_TABLE_STATUS_FIELD_NAME`
|
||||||
|
$sql = '
|
||||||
|
SELECT `information_schema`.`SCHEMATA`.*';
|
||||||
|
if ($force_stats) {
|
||||||
|
$sql .= ',
|
||||||
|
COUNT(`information_schema`.`TABLES`.`TABLE_SCHEMA`)
|
||||||
|
AS `SCHEMA_TABLES`,
|
||||||
|
SUM(`information_schema`.`TABLES`.`TABLE_ROWS`)
|
||||||
|
AS `SCHEMA_TABLE_ROWS`,
|
||||||
|
SUM(`information_schema`.`TABLES`.`DATA_LENGTH`)
|
||||||
|
AS `SCHEMA_DATA_LENGTH`,
|
||||||
|
SUM(`information_schema`.`TABLES`.`MAX_DATA_LENGTH`)
|
||||||
|
AS `SCHEMA_MAX_DATA_LENGTH`,
|
||||||
|
SUM(`information_schema`.`TABLES`.`INDEX_LENGTH`)
|
||||||
|
AS `SCHEMA_INDEX_LENGTH`,
|
||||||
|
SUM(`information_schema`.`TABLES`.`DATA_LENGTH`
|
||||||
|
+ `information_schema`.`TABLES`.`INDEX_LENGTH`)
|
||||||
|
AS `SCHEMA_LENGTH`,
|
||||||
|
SUM(`information_schema`.`TABLES`.`DATA_FREE`)
|
||||||
|
AS `SCHEMA_DATA_FREE`';
|
||||||
|
}
|
||||||
|
$sql .= '
|
||||||
|
FROM `information_schema`.`SCHEMATA`';
|
||||||
|
if ($force_stats) {
|
||||||
|
$sql .= '
|
||||||
|
LEFT JOIN `information_schema`.`TABLES`
|
||||||
|
ON BINARY `information_schema`.`TABLES`.`TABLE_SCHEMA`
|
||||||
|
= BINARY `information_schema`.`SCHEMATA`.`SCHEMA_NAME`';
|
||||||
|
}
|
||||||
|
$sql .= '
|
||||||
|
' . $sql_where_schema . '
|
||||||
|
GROUP BY BINARY `information_schema`.`SCHEMATA`.`SCHEMA_NAME`
|
||||||
|
ORDER BY BINARY ' . PMA_backquote($sort_by) . ' ' . $sort_order
|
||||||
|
. $limit;
|
||||||
|
$databases = PMA_DBI_fetch_result($sql, 'SCHEMA_NAME', null, $link);
|
||||||
|
|
||||||
|
$mysql_error = PMA_DBI_getError($link);
|
||||||
|
if (! count($databases) && $GLOBALS['errno']) {
|
||||||
|
PMA_mysqlDie($mysql_error, $sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
// display only databases also in official database list
|
||||||
|
// f.e. to apply hide_db and only_db
|
||||||
|
$drops = array_diff(array_keys($databases), $GLOBALS['PMA_List_Database']->items);
|
||||||
|
if (count($drops)) {
|
||||||
|
foreach ($drops as $drop) {
|
||||||
|
unset($databases[$drop]);
|
||||||
|
}
|
||||||
|
unset($drop);
|
||||||
|
}
|
||||||
|
unset($sql_where_schema, $sql, $drops);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* apply limit and order manually now
|
* apply limit and order manually now
|
||||||
* (caused by older MySQL < 5 or $GLOBALS['cfg']['NaturalOrder'])
|
* (caused by older MySQL < 5 or $GLOBALS['cfg']['NaturalOrder'])
|
||||||
@@ -578,117 +533,45 @@ function PMA_DBI_get_columns_full($database = null, $table = null,
|
|||||||
{
|
{
|
||||||
$columns = array();
|
$columns = array();
|
||||||
|
|
||||||
if (PMA_MYSQL_INT_VERSION >= 50002) {
|
$sql_wheres = array();
|
||||||
$sql_wheres = array();
|
$array_keys = array();
|
||||||
$array_keys = array();
|
|
||||||
|
|
||||||
// get columns information from information_schema
|
// get columns information from information_schema
|
||||||
if (null !== $database) {
|
if (null !== $database) {
|
||||||
$sql_wheres[] = '`TABLE_SCHEMA` = \'' . addslashes($database) . '\' ';
|
$sql_wheres[] = '`TABLE_SCHEMA` = \'' . addslashes($database) . '\' ';
|
||||||
} else {
|
|
||||||
$array_keys[] = 'TABLE_SCHEMA';
|
|
||||||
}
|
|
||||||
if (null !== $table) {
|
|
||||||
$sql_wheres[] = '`TABLE_NAME` = \'' . addslashes($table) . '\' ';
|
|
||||||
} else {
|
|
||||||
$array_keys[] = 'TABLE_NAME';
|
|
||||||
}
|
|
||||||
if (null !== $column) {
|
|
||||||
$sql_wheres[] = '`COLUMN_NAME` = \'' . addslashes($column) . '\' ';
|
|
||||||
} else {
|
|
||||||
$array_keys[] = 'COLUMN_NAME';
|
|
||||||
}
|
|
||||||
|
|
||||||
// for PMA bc:
|
|
||||||
// `[SCHEMA_FIELD_NAME]` AS `[SHOW_FULL_COLUMNS_FIELD_NAME]`
|
|
||||||
$sql = '
|
|
||||||
SELECT *,
|
|
||||||
`COLUMN_NAME` AS `Field`,
|
|
||||||
`COLUMN_TYPE` AS `Type`,
|
|
||||||
`COLLATION_NAME` AS `Collation`,
|
|
||||||
`IS_NULLABLE` AS `Null`,
|
|
||||||
`COLUMN_KEY` AS `Key`,
|
|
||||||
`COLUMN_DEFAULT` AS `Default`,
|
|
||||||
`EXTRA` AS `Extra`,
|
|
||||||
`PRIVILEGES` AS `Privileges`,
|
|
||||||
`COLUMN_COMMENT` AS `Comment`
|
|
||||||
FROM `information_schema`.`COLUMNS`';
|
|
||||||
if (count($sql_wheres)) {
|
|
||||||
$sql .= "\n" . ' WHERE ' . implode(' AND ', $sql_wheres);
|
|
||||||
}
|
|
||||||
|
|
||||||
$columns = PMA_DBI_fetch_result($sql, $array_keys, null, $link);
|
|
||||||
unset($sql_wheres, $sql);
|
|
||||||
} else {
|
} else {
|
||||||
if (null === $database) {
|
$array_keys[] = 'TABLE_SCHEMA';
|
||||||
foreach ($GLOBALS['PMA_List_Database']->items as $database) {
|
}
|
||||||
$columns[$database] = PMA_DBI_get_columns_full($database, null,
|
if (null !== $table) {
|
||||||
null, $link);
|
$sql_wheres[] = '`TABLE_NAME` = \'' . addslashes($table) . '\' ';
|
||||||
}
|
} else {
|
||||||
return $columns;
|
$array_keys[] = 'TABLE_NAME';
|
||||||
} elseif (null === $table) {
|
}
|
||||||
$tables = PMA_DBI_get_tables($database);
|
if (null !== $column) {
|
||||||
foreach ($tables as $table) {
|
$sql_wheres[] = '`COLUMN_NAME` = \'' . addslashes($column) . '\' ';
|
||||||
$columns[$table] = PMA_DBI_get_columns_full(
|
} else {
|
||||||
$database, $table, null, $link);
|
$array_keys[] = 'COLUMN_NAME';
|
||||||
}
|
|
||||||
return $columns;
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql = 'SHOW FULL COLUMNS FROM '
|
|
||||||
. PMA_backquote($database) . '.' . PMA_backquote($table);
|
|
||||||
if (null !== $column) {
|
|
||||||
$sql .= " LIKE '" . $column . "'";
|
|
||||||
}
|
|
||||||
|
|
||||||
$columns = PMA_DBI_fetch_result($sql, 'Field', null, $link);
|
|
||||||
|
|
||||||
$ordinal_position = 1;
|
|
||||||
foreach ($columns as $column_name => $each_column) {
|
|
||||||
|
|
||||||
// MySQL forward compatibility
|
|
||||||
// so pma could use this array as if every server is of version >5.0
|
|
||||||
$columns[$column_name]['COLUMN_NAME'] =& $columns[$column_name]['Field'];
|
|
||||||
$columns[$column_name]['COLUMN_TYPE'] =& $columns[$column_name]['Type'];
|
|
||||||
$columns[$column_name]['COLLATION_NAME'] =& $columns[$column_name]['Collation'];
|
|
||||||
$columns[$column_name]['IS_NULLABLE'] =& $columns[$column_name]['Null'];
|
|
||||||
$columns[$column_name]['COLUMN_KEY'] =& $columns[$column_name]['Key'];
|
|
||||||
$columns[$column_name]['COLUMN_DEFAULT'] =& $columns[$column_name]['Default'];
|
|
||||||
$columns[$column_name]['EXTRA'] =& $columns[$column_name]['Extra'];
|
|
||||||
$columns[$column_name]['PRIVILEGES'] =& $columns[$column_name]['Privileges'];
|
|
||||||
$columns[$column_name]['COLUMN_COMMENT'] =& $columns[$column_name]['Comment'];
|
|
||||||
|
|
||||||
$columns[$column_name]['TABLE_CATALOG'] = null;
|
|
||||||
$columns[$column_name]['TABLE_SCHEMA'] = $database;
|
|
||||||
$columns[$column_name]['TABLE_NAME'] = $table;
|
|
||||||
$columns[$column_name]['ORDINAL_POSITION'] = $ordinal_position;
|
|
||||||
$columns[$column_name]['DATA_TYPE'] =
|
|
||||||
substr($columns[$column_name]['COLUMN_TYPE'], 0,
|
|
||||||
strpos($columns[$column_name]['COLUMN_TYPE'], '('));
|
|
||||||
/**
|
|
||||||
* @todo guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE
|
|
||||||
*/
|
|
||||||
$columns[$column_name]['CHARACTER_MAXIMUM_LENGTH'] = null;
|
|
||||||
/**
|
|
||||||
* @todo guess CHARACTER_OCTET_LENGTH from CHARACTER_MAXIMUM_LENGTH
|
|
||||||
*/
|
|
||||||
$columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null;
|
|
||||||
$columns[$column_name]['NUMERIC_PRECISION'] = null;
|
|
||||||
$columns[$column_name]['NUMERIC_SCALE'] = null;
|
|
||||||
$columns[$column_name]['CHARACTER_SET_NAME'] =
|
|
||||||
substr($columns[$column_name]['COLLATION_NAME'], 0,
|
|
||||||
strpos($columns[$column_name]['COLLATION_NAME'], '_'));
|
|
||||||
|
|
||||||
$ordinal_position++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null !== $column) {
|
|
||||||
reset($columns);
|
|
||||||
$columns = current($columns);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $columns;
|
// for PMA bc:
|
||||||
|
// `[SCHEMA_FIELD_NAME]` AS `[SHOW_FULL_COLUMNS_FIELD_NAME]`
|
||||||
|
$sql = '
|
||||||
|
SELECT *,
|
||||||
|
`COLUMN_NAME` AS `Field`,
|
||||||
|
`COLUMN_TYPE` AS `Type`,
|
||||||
|
`COLLATION_NAME` AS `Collation`,
|
||||||
|
`IS_NULLABLE` AS `Null`,
|
||||||
|
`COLUMN_KEY` AS `Key`,
|
||||||
|
`COLUMN_DEFAULT` AS `Default`,
|
||||||
|
`EXTRA` AS `Extra`,
|
||||||
|
`PRIVILEGES` AS `Privileges`,
|
||||||
|
`COLUMN_COMMENT` AS `Comment`
|
||||||
|
FROM `information_schema`.`COLUMNS`';
|
||||||
|
if (count($sql_wheres)) {
|
||||||
|
$sql .= "\n" . ' WHERE ' . implode(' AND ', $sql_wheres);
|
||||||
|
}
|
||||||
|
|
||||||
|
return PMA_DBI_fetch_result($sql, $array_keys, null, $link);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -752,9 +635,7 @@ function PMA_DBI_get_variable($var, $type = PMA_DBI_GETVAR_SESSION, $link = null
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (PMA_MYSQL_INT_VERSION < 40002) {
|
|
||||||
$type = 0;
|
|
||||||
}
|
|
||||||
switch ($type) {
|
switch ($type) {
|
||||||
case PMA_DBI_GETVAR_SESSION:
|
case PMA_DBI_GETVAR_SESSION:
|
||||||
$modifier = ' SESSION';
|
$modifier = ' SESSION';
|
||||||
@@ -816,47 +697,39 @@ function PMA_DBI_postConnect($link, $is_controluser = false)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!defined('PMA_ENGINE_KEYWORD')) {
|
if (!defined('PMA_ENGINE_KEYWORD')) {
|
||||||
if (PMA_MYSQL_INT_VERSION >= 40102) {
|
define('PMA_ENGINE_KEYWORD','ENGINE');
|
||||||
define('PMA_ENGINE_KEYWORD','ENGINE');
|
|
||||||
} else {
|
|
||||||
define('PMA_ENGINE_KEYWORD','TYPE');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PMA_MYSQL_INT_VERSION >= 40100) {
|
$mysql_charset = $GLOBALS['mysql_charset_map'][$GLOBALS['charset']];
|
||||||
$mysql_charset = $GLOBALS['mysql_charset_map'][$GLOBALS['charset']];
|
if ($is_controluser
|
||||||
if ($is_controluser
|
|| empty($GLOBALS['collation_connection'])
|
||||||
|| empty($GLOBALS['collation_connection'])
|
|| (strpos($GLOBALS['collation_connection'], '_')
|
||||||
|| (strpos($GLOBALS['collation_connection'], '_')
|
? substr($GLOBALS['collation_connection'], 0, strpos($GLOBALS['collation_connection'], '_'))
|
||||||
? substr($GLOBALS['collation_connection'], 0, strpos($GLOBALS['collation_connection'], '_'))
|
: $GLOBALS['collation_connection']) == $mysql_charset) {
|
||||||
: $GLOBALS['collation_connection']) == $mysql_charset) {
|
|
||||||
|
|
||||||
PMA_DBI_query('SET NAMES ' . $mysql_charset . ';', $link,
|
PMA_DBI_query('SET NAMES ' . $mysql_charset . ';', $link,
|
||||||
PMA_DBI_QUERY_STORE);
|
PMA_DBI_QUERY_STORE);
|
||||||
} else {
|
|
||||||
PMA_DBI_query('SET CHARACTER SET ' . $mysql_charset . ';', $link,
|
|
||||||
PMA_DBI_QUERY_STORE);
|
|
||||||
}
|
|
||||||
if (!empty($GLOBALS['collation_connection'])) {
|
|
||||||
PMA_DBI_query('SET collation_connection = \'' . $GLOBALS['collation_connection'] . '\';',
|
|
||||||
$link, PMA_DBI_QUERY_STORE);
|
|
||||||
}
|
|
||||||
if (!$is_controluser) {
|
|
||||||
$GLOBALS['collation_connection'] = PMA_DBI_get_variable('collation_connection',
|
|
||||||
PMA_DBI_GETVAR_SESSION, $link);
|
|
||||||
$GLOBALS['charset_connection'] = PMA_DBI_get_variable('character_set_connection',
|
|
||||||
PMA_DBI_GETVAR_SESSION, $link);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add some field types to the list, this needs to be done once per session!
|
|
||||||
if (!in_array('BINARY', $GLOBALS['cfg']['ColumnTypes'])) {
|
|
||||||
$GLOBALS['cfg']['ColumnTypes'][] = 'BINARY';
|
|
||||||
}
|
|
||||||
if (!in_array('VARBINARY', $GLOBALS['cfg']['ColumnTypes'])) {
|
|
||||||
$GLOBALS['cfg']['ColumnTypes'][] = 'VARBINARY';
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
require_once './libraries/charset_conversion.lib.php';
|
PMA_DBI_query('SET CHARACTER SET ' . $mysql_charset . ';', $link,
|
||||||
|
PMA_DBI_QUERY_STORE);
|
||||||
|
}
|
||||||
|
if (!empty($GLOBALS['collation_connection'])) {
|
||||||
|
PMA_DBI_query('SET collation_connection = \'' . $GLOBALS['collation_connection'] . '\';',
|
||||||
|
$link, PMA_DBI_QUERY_STORE);
|
||||||
|
}
|
||||||
|
if (!$is_controluser) {
|
||||||
|
$GLOBALS['collation_connection'] = PMA_DBI_get_variable('collation_connection',
|
||||||
|
PMA_DBI_GETVAR_SESSION, $link);
|
||||||
|
$GLOBALS['charset_connection'] = PMA_DBI_get_variable('character_set_connection',
|
||||||
|
PMA_DBI_GETVAR_SESSION, $link);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add some field types to the list, this needs to be done once per session!
|
||||||
|
if (!in_array('BINARY', $GLOBALS['cfg']['ColumnTypes'])) {
|
||||||
|
$GLOBALS['cfg']['ColumnTypes'][] = 'BINARY';
|
||||||
|
}
|
||||||
|
if (!in_array('VARBINARY', $GLOBALS['cfg']['ColumnTypes'])) {
|
||||||
|
$GLOBALS['cfg']['ColumnTypes'][] = 'VARBINARY';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1109,11 +982,7 @@ function PMA_DBI_fetch_result($result, $key = null, $value = null,
|
|||||||
*/
|
*/
|
||||||
function PMA_DBI_get_default_engine()
|
function PMA_DBI_get_default_engine()
|
||||||
{
|
{
|
||||||
if (PMA_MYSQL_INT_VERSION > 50002) {
|
return PMA_DBI_fetch_value('SHOW VARIABLES LIKE \'storage_engine\';', 0, 1);
|
||||||
return PMA_DBI_fetch_value('SHOW VARIABLES LIKE \'storage_engine\';', 0, 1);
|
|
||||||
} else {
|
|
||||||
return PMA_DBI_fetch_value('SHOW VARIABLES LIKE \'table_type\';', 0, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1123,25 +992,19 @@ function PMA_DBI_get_default_engine()
|
|||||||
*/
|
*/
|
||||||
function PMA_DBI_getCompatibilities()
|
function PMA_DBI_getCompatibilities()
|
||||||
{
|
{
|
||||||
if (PMA_MYSQL_INT_VERSION < 40100) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
$compats = array('NONE');
|
$compats = array('NONE');
|
||||||
if (PMA_MYSQL_INT_VERSION >= 40101) {
|
$compats[] = 'ANSI';
|
||||||
$compats[] = 'ANSI';
|
$compats[] = 'DB2';
|
||||||
$compats[] = 'DB2';
|
$compats[] = 'MAXDB';
|
||||||
$compats[] = 'MAXDB';
|
$compats[] = 'MYSQL323';
|
||||||
$compats[] = 'MYSQL323';
|
$compats[] = 'MYSQL40';
|
||||||
$compats[] = 'MYSQL40';
|
$compats[] = 'MSSQL';
|
||||||
$compats[] = 'MSSQL';
|
$compats[] = 'ORACLE';
|
||||||
$compats[] = 'ORACLE';
|
// removed; in MySQL 5.0.33, this produces exports that
|
||||||
// removed; in MySQL 5.0.33, this produces exports that
|
// can't be read by POSTGRESQL (see our bug #1596328)
|
||||||
// can't be read by POSTGRESQL (see our bug #1596328)
|
//$compats[] = 'POSTGRESQL';
|
||||||
//$compats[] = 'POSTGRESQL';
|
$compats[] = 'TRADITIONAL';
|
||||||
if (PMA_MYSQL_INT_VERSION >= 50002) {
|
|
||||||
$compats[] = 'TRADITIONAL';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $compats;
|
return $compats;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1155,10 +1018,6 @@ function PMA_DBI_getCompatibilities()
|
|||||||
*/
|
*/
|
||||||
function PMA_DBI_get_warnings($link = null)
|
function PMA_DBI_get_warnings($link = null)
|
||||||
{
|
{
|
||||||
if (PMA_MYSQL_INT_VERSION < 40100) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($link)) {
|
if (empty($link)) {
|
||||||
if (isset($GLOBALS['userlink'])) {
|
if (isset($GLOBALS['userlink'])) {
|
||||||
$link = $GLOBALS['userlink'];
|
$link = $GLOBALS['userlink'];
|
||||||
@@ -1235,24 +1094,21 @@ function PMA_DBI_get_triggers($db, $table) {
|
|||||||
|
|
||||||
$result = array();
|
$result = array();
|
||||||
|
|
||||||
// available in INFORMATION_SCHEMA since MySQL 5.0.10
|
$triggers = PMA_DBI_fetch_result("SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, ACTION_TIMING, ACTION_STATEMENT, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE FROM information_schema.TRIGGERS WHERE EVENT_OBJECT_SCHEMA= '" . PMA_sqlAddslashes($db,true) . "' and EVENT_OBJECT_TABLE = '" . PMA_sqlAddslashes($table, true) . "';");
|
||||||
if (PMA_MYSQL_INT_VERSION >= 50010) {
|
|
||||||
$triggers = PMA_DBI_fetch_result("SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, ACTION_TIMING, ACTION_STATEMENT, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE FROM information_schema.TRIGGERS WHERE EVENT_OBJECT_SCHEMA= '" . PMA_sqlAddslashes($db,true) . "' and EVENT_OBJECT_TABLE = '" . PMA_sqlAddslashes($table, true) . "';");
|
|
||||||
|
|
||||||
if ($triggers) {
|
if ($triggers) {
|
||||||
$delimiter = '//';
|
$delimiter = '//';
|
||||||
foreach ($triggers as $trigger) {
|
foreach ($triggers as $trigger) {
|
||||||
$one_result = array();
|
$one_result = array();
|
||||||
$one_result['name'] = $trigger['TRIGGER_NAME'];
|
$one_result['name'] = $trigger['TRIGGER_NAME'];
|
||||||
$one_result['action_timing'] = $trigger['ACTION_TIMING'];
|
$one_result['action_timing'] = $trigger['ACTION_TIMING'];
|
||||||
$one_result['event_manipulation'] = $trigger['EVENT_MANIPULATION'];
|
$one_result['event_manipulation'] = $trigger['EVENT_MANIPULATION'];
|
||||||
|
|
||||||
$one_result['full_trigger_name'] = PMA_backquote($trigger['TRIGGER_SCHEMA']) . '.' . PMA_backquote($trigger['TRIGGER_NAME']);
|
$one_result['full_trigger_name'] = PMA_backquote($trigger['TRIGGER_SCHEMA']) . '.' . PMA_backquote($trigger['TRIGGER_NAME']);
|
||||||
$one_result['drop'] = 'DROP TRIGGER ' . $one_result['full_trigger_name'];
|
$one_result['drop'] = 'DROP TRIGGER ' . $one_result['full_trigger_name'];
|
||||||
$one_result['create'] = 'CREATE TRIGGER ' . $one_result['full_trigger_name'] . ' ' . $trigger['ACTION_TIMING']. ' ' . $trigger['EVENT_MANIPULATION'] . ' ON ' . PMA_backquote($trigger['EVENT_OBJECT_SCHEMA']) . '.' . PMA_backquote($trigger['EVENT_OBJECT_TABLE']) . "\n" . ' FOR EACH ROW ' . $trigger['ACTION_STATEMENT'] . "\n" . $delimiter . "\n";
|
$one_result['create'] = 'CREATE TRIGGER ' . $one_result['full_trigger_name'] . ' ' . $trigger['ACTION_TIMING']. ' ' . $trigger['EVENT_MANIPULATION'] . ' ON ' . PMA_backquote($trigger['EVENT_OBJECT_SCHEMA']) . '.' . PMA_backquote($trigger['EVENT_OBJECT_TABLE']) . "\n" . ' FOR EACH ROW ' . $trigger['ACTION_STATEMENT'] . "\n" . $delimiter . "\n";
|
||||||
|
|
||||||
$result[] = $one_result;
|
$result[] = $one_result;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return($result);
|
return($result);
|
||||||
|
Reference in New Issue
Block a user