use @todo tag for todo items, to show up in generated documentation
This commit is contained in:
@@ -238,10 +238,12 @@ while ($row = PMA_DBI_fetch_assoc($rowset)) {
|
|||||||
// here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the
|
// here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the
|
||||||
// NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
|
// NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
|
||||||
// the latter.
|
// the latter.
|
||||||
// TODO: merge this logic with the one in tbl_properties_structure.php
|
/**
|
||||||
// or move it in a function similar to PMA_DBI_get_columns_full()
|
* @todo merge this logic with the one in tbl_properties_structure.php
|
||||||
// but based on SHOW CREATE TABLE because information_schema
|
* or move it in a function similar to PMA_DBI_get_columns_full()
|
||||||
// cannot be trusted in this case (MySQL bug)
|
* but based on SHOW CREATE TABLE because information_schema
|
||||||
|
* cannot be trusted in this case (MySQL bug)
|
||||||
|
*/
|
||||||
if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
|
if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
|
||||||
$row['Null'] = '';
|
$row['Null'] = '';
|
||||||
}
|
}
|
||||||
|
@@ -88,10 +88,11 @@ if (isset($db) &&
|
|||||||
|
|
||||||
// now that all tables exist, create all the accumulated constraints
|
// now that all tables exist, create all the accumulated constraints
|
||||||
if (isset($GLOBALS['add_constraints'])) {
|
if (isset($GLOBALS['add_constraints'])) {
|
||||||
// FIXME: this works with mysqli but not with mysql,
|
/**
|
||||||
// because mysql extension does not accept more than one
|
* @todo this works with mysqli but not with mysql, because
|
||||||
// statement; maybe interface with the sql import plugin
|
* mysql extension does not accept more than one statement; maybe
|
||||||
// that handles statement delimiter
|
* interface with the sql import plugin that handles statement delimiter
|
||||||
|
*/
|
||||||
PMA_DBI_query($GLOBALS['sql_constraints_query_full_db']);
|
PMA_DBI_query($GLOBALS['sql_constraints_query_full_db']);
|
||||||
|
|
||||||
// and prepare to display them
|
// and prepare to display them
|
||||||
|
@@ -384,7 +384,7 @@ class PMA_Config
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @TODO check validity of $_COOKIE['pma_collation_connection']
|
* @todo check validity of $_COOKIE['pma_collation_connection']
|
||||||
*/
|
*/
|
||||||
if (! empty($_COOKIE['pma_collation_connection'])) {
|
if (! empty($_COOKIE['pma_collation_connection'])) {
|
||||||
$this->set('collation_connection',
|
$this->set('collation_connection',
|
||||||
@@ -657,7 +657,7 @@ class PMA_Config
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* check selected collation_connection
|
* check selected collation_connection
|
||||||
* @TODO check validity of $_REQUEST['collation_connection']
|
* @todo check validity of $_REQUEST['collation_connection']
|
||||||
*/
|
*/
|
||||||
function checkCollationConnection()
|
function checkCollationConnection()
|
||||||
{
|
{
|
||||||
|
@@ -215,6 +215,7 @@ class PMA_Table {
|
|||||||
* Checks if this "table" is a view
|
* Checks if this "table" is a view
|
||||||
*
|
*
|
||||||
* @deprecated
|
* @deprecated
|
||||||
|
* @todo see what we could do with the possible existence of $table_is_view
|
||||||
* @param string the database name
|
* @param string the database name
|
||||||
* @param string the table name
|
* @param string the table name
|
||||||
*
|
*
|
||||||
@@ -224,8 +225,6 @@ class PMA_Table {
|
|||||||
*/
|
*/
|
||||||
function _isView($db, $table) {
|
function _isView($db, $table) {
|
||||||
// maybe we already know if the table is a view
|
// maybe we already know if the table is a view
|
||||||
// TODO: see what we could do with the possible existence
|
|
||||||
// of $table_is_view
|
|
||||||
if (isset($GLOBALS['tbl_is_view']) && $GLOBALS['tbl_is_view']) {
|
if (isset($GLOBALS['tbl_is_view']) && $GLOBALS['tbl_is_view']) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -244,6 +243,8 @@ class PMA_Table {
|
|||||||
* generates column/field specification for ALTER or CREATE TABLE syntax
|
* generates column/field specification for ALTER or CREATE TABLE syntax
|
||||||
*
|
*
|
||||||
* @todo move into class PMA_Column
|
* @todo move into class PMA_Column
|
||||||
|
* @todo on the interface, some js to clear the default value when the default
|
||||||
|
* current_timestamp is checked
|
||||||
* @static
|
* @static
|
||||||
* @param string $name name
|
* @param string $name name
|
||||||
* @param string $type type ('INT', 'VARCHAR', 'BIT', ...)
|
* @param string $type type ('INT', 'VARCHAR', 'BIT', ...)
|
||||||
@@ -269,10 +270,10 @@ class PMA_Table {
|
|||||||
{
|
{
|
||||||
|
|
||||||
// $default_current_timestamp has priority over $default
|
// $default_current_timestamp has priority over $default
|
||||||
// TODO: on the interface, some js to clear the default value
|
|
||||||
// when the default current_timestamp is checked
|
|
||||||
|
|
||||||
// TODO: include db-name
|
/**
|
||||||
|
* @todo include db-name
|
||||||
|
*/
|
||||||
$query = PMA_backquote($name) . ' ' . $type;
|
$query = PMA_backquote($name) . ' ' . $type;
|
||||||
|
|
||||||
if ($length != ''
|
if ($length != ''
|
||||||
@@ -401,7 +402,7 @@ class PMA_Table {
|
|||||||
} // end of the 'PMA_Table::countRecords()' function
|
} // end of the 'PMA_Table::countRecords()' function
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @TODO add documentation
|
* @todo add documentation
|
||||||
*/
|
*/
|
||||||
function generateAlter($oldcol, $newcol, $type, $length,
|
function generateAlter($oldcol, $newcol, $type, $length,
|
||||||
$attribute, $collation, $null, $default, $default_current_timestamp,
|
$attribute, $collation, $null, $default, $default_current_timestamp,
|
||||||
@@ -501,7 +502,7 @@ class PMA_Table {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies or renames table
|
* Copies or renames table
|
||||||
* FIXME: use RENAME for move operations
|
* @todo use RENAME for move operations
|
||||||
* - works only if the databases are on the same filesystem,
|
* - works only if the databases are on the same filesystem,
|
||||||
* how can we check that? try the operation and
|
* how can we check that? try the operation and
|
||||||
* catch an error?
|
* catch an error?
|
||||||
@@ -524,7 +525,9 @@ class PMA_Table {
|
|||||||
|
|
||||||
// Ensure the target is valid
|
// Ensure the target is valid
|
||||||
if (! $GLOBALS['PMA_List_Database']->exists($source_db, $target_db)) {
|
if (! $GLOBALS['PMA_List_Database']->exists($source_db, $target_db)) {
|
||||||
// @TODO exit really needed here? or just a return?
|
/**
|
||||||
|
* @todo exit really needed here? or just a return?
|
||||||
|
*/
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -716,10 +719,12 @@ class PMA_Table {
|
|||||||
unset($table_query);
|
unset($table_query);
|
||||||
}
|
}
|
||||||
|
|
||||||
// garvin: [TODO] Can't get moving PDFs the right way. The page numbers always
|
/**
|
||||||
// get screwed up independently from duplication because the numbers do not
|
* @todo garvin: Can't get moving PDFs the right way. The page numbers
|
||||||
// seem to be stored on a per-database basis. Would the author of pdf support
|
* always get screwed up independently from duplication because the
|
||||||
// please have a look at it?
|
* numbers do not seem to be stored on a per-database basis. Would
|
||||||
|
* the author of pdf support please have a look at it?
|
||||||
|
*/
|
||||||
|
|
||||||
if ($GLOBALS['cfgRelation']['pdfwork']) {
|
if ($GLOBALS['cfgRelation']['pdfwork']) {
|
||||||
$table_query = 'UPDATE ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($GLOBALS['cfgRelation']['table_coords'])
|
$table_query = 'UPDATE ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($GLOBALS['cfgRelation']['table_coords'])
|
||||||
@@ -799,11 +804,13 @@ class PMA_Table {
|
|||||||
$new_fields = array('foreign_db' => $target_db, 'foreign_table' => $target_table);
|
$new_fields = array('foreign_db' => $target_db, 'foreign_table' => $target_table);
|
||||||
PMA_Table::duplicateInfo('relwork', 'relation', $get_fields, $where_fields, $new_fields);
|
PMA_Table::duplicateInfo('relwork', 'relation', $get_fields, $where_fields, $new_fields);
|
||||||
|
|
||||||
// garvin: [TODO] Can't get duplicating PDFs the right way. The page numbers always
|
/**
|
||||||
// get screwed up independently from duplication because the numbers do not
|
* @todo garvin: Can't get duplicating PDFs the right way. The
|
||||||
// seem to be stored on a per-database basis. Would the author of pdf support
|
* page numbers always get screwed up independently from
|
||||||
// please have a look at it?
|
* duplication because the numbers do not seem to be stored on a
|
||||||
/*
|
* per-database basis. Would the author of pdf support please
|
||||||
|
* have a look at it?
|
||||||
|
*
|
||||||
$get_fields = array('page_descr');
|
$get_fields = array('page_descr');
|
||||||
$where_fields = array('db_name' => $source_db);
|
$where_fields = array('db_name' => $source_db);
|
||||||
$new_fields = array('db_name' => $target_db);
|
$new_fields = array('db_name' => $target_db);
|
||||||
@@ -893,8 +900,9 @@ class PMA_Table {
|
|||||||
$this->setName($new_name);
|
$this->setName($new_name);
|
||||||
$this->setDbName($new_db);
|
$this->setDbName($new_db);
|
||||||
|
|
||||||
// TODO move into extra function
|
/**
|
||||||
// PMA_Relation::renameTable($new_name, $old_name, $new_db, $old_db)
|
* @todo move into extra function PMA_Relation::renameTable($new_name, $old_name, $new_db, $old_db)
|
||||||
|
*/
|
||||||
// garvin: Move old entries from comments to new table
|
// garvin: Move old entries from comments to new table
|
||||||
require_once './libraries/relation.lib.php';
|
require_once './libraries/relation.lib.php';
|
||||||
$GLOBALS['cfgRelation'] = PMA_getRelationsParam();
|
$GLOBALS['cfgRelation'] = PMA_getRelationsParam();
|
||||||
|
@@ -99,10 +99,12 @@ function PMA_auth_fails()
|
|||||||
echo "\n";
|
echo "\n";
|
||||||
$GLOBALS['is_header_sent'] = TRUE;
|
$GLOBALS['is_header_sent'] = TRUE;
|
||||||
|
|
||||||
//TODO: I have included this div from libraries/header.inc.php to work around
|
/**
|
||||||
// an undefined variable in tooltip.js, when the server
|
* @todo I have included this div from libraries/header.inc.php to work around
|
||||||
// is not responding. Work has to be done to merge all code that
|
* an undefined variable in tooltip.js, when the server is not responding.
|
||||||
// starts the page (DOCTYPE and this div) to one place
|
* Work has to be done to merge all code that starts the page (DOCTYPE and
|
||||||
|
* this div) to one place
|
||||||
|
*/
|
||||||
?>
|
?>
|
||||||
<div id="TooltipContainer" onmouseover="holdTooltip();" onmouseout="swapTooltip('default');"></div>
|
<div id="TooltipContainer" onmouseover="holdTooltip();" onmouseout="swapTooltip('default');"></div>
|
||||||
<?php
|
<?php
|
||||||
|
@@ -52,18 +52,20 @@ function PMA_analyseShowGrant($rs_usr, &$is_create_db_priv, &$db_to_create, &$is
|
|||||||
$dbname_to_test = $show_grants_dbname;
|
$dbname_to_test = $show_grants_dbname;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (ereg($re0 . '%|_', $show_grants_dbname)
|
if ((ereg($re0 . '%|_', $show_grants_dbname)
|
||||||
&& !ereg('\\\\%|\\\\_', $show_grants_dbname))
|
&& !ereg('\\\\%|\\\\_', $show_grants_dbname))
|
||||||
// does this db exist?
|
// does this db exist?
|
||||||
|| (!PMA_DBI_try_query('USE ' . ereg_replace($re1 .'(%|_)', '\\1\\3', $dbname_to_test), null, PMA_DBI_QUERY_STORE) && substr(PMA_DBI_getError(), 1, 4) != 1044)
|
|| (!PMA_DBI_try_query('USE ' . ereg_replace($re1 .'(%|_)', '\\1\\3', $dbname_to_test), null, PMA_DBI_QUERY_STORE)
|
||||||
|
&& substr(PMA_DBI_getError(), 1, 4) != 1044)
|
||||||
) {
|
) {
|
||||||
$db_to_create = ereg_replace($re0 . '%', '\\1...', ereg_replace($re0 . '_', '\\1?', $show_grants_dbname));
|
$db_to_create = ereg_replace($re0 . '%', '\\1...', ereg_replace($re0 . '_', '\\1?', $show_grants_dbname));
|
||||||
$db_to_create = ereg_replace($re1 . '(%|_)', '\\1\\3', $db_to_create);
|
$db_to_create = ereg_replace($re1 . '(%|_)', '\\1\\3', $db_to_create);
|
||||||
$is_create_db_priv = true;
|
$is_create_db_priv = true;
|
||||||
|
|
||||||
// TODO: collect $db_to_create into an array, to display a drop-down
|
/**
|
||||||
// in the "Create new database" dialog
|
* @todo collect $db_to_create into an array, to display a
|
||||||
//
|
* drop-down in the "Create new database" dialog
|
||||||
|
*/
|
||||||
// we don't break, we want all possible databases
|
// we don't break, we want all possible databases
|
||||||
//break;
|
//break;
|
||||||
} // end if
|
} // end if
|
||||||
|
@@ -800,9 +800,11 @@ if (!defined('PMA_MINIMUM_COMMON')) {
|
|||||||
// get the duplicate entry
|
// get the duplicate entry
|
||||||
|
|
||||||
// get table name
|
// get table name
|
||||||
// TODO: what would be the best delimiter, while avoiding
|
/**
|
||||||
// special characters that can become high-ascii after editing,
|
* @todo what would be the best delimiter, while avoiding special
|
||||||
// depending upon which editor is used by the developer?
|
* characters that can become high-ascii after editing, depending
|
||||||
|
* upon which editor is used by the developer?
|
||||||
|
*/
|
||||||
$error_table = array();
|
$error_table = array();
|
||||||
if (preg_match('@ALTER\s*TABLE\s*\`([^\`]+)\`@iu', $the_query, $error_table)) {
|
if (preg_match('@ALTER\s*TABLE\s*\`([^\`]+)\`@iu', $the_query, $error_table)) {
|
||||||
$error_table = $error_table[1];
|
$error_table = $error_table[1];
|
||||||
@@ -1121,7 +1123,9 @@ if (!defined('PMA_MINIMUM_COMMON')) {
|
|||||||
if (is_string($a_string)) {
|
if (is_string($a_string)) {
|
||||||
$a_string = htmlspecialchars($a_string);
|
$a_string = htmlspecialchars($a_string);
|
||||||
$a_string = PMA_escapeJsString($a_string);
|
$a_string = PMA_escapeJsString($a_string);
|
||||||
// TODO: what is this good for?
|
/**
|
||||||
|
* @todo what is this good for?
|
||||||
|
*/
|
||||||
$a_string = str_replace('#', '\\#', $a_string);
|
$a_string = str_replace('#', '\\#', $a_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1325,8 +1329,10 @@ window.parent.updateTableTitle('<?php echo $uni_tbl; ?>', '<?php echo PMA_jsForm
|
|||||||
|
|
||||||
// Only append it on SELECTs.
|
// Only append it on SELECTs.
|
||||||
|
|
||||||
// FIXME: what would be the best to do when someone
|
/**
|
||||||
// hits Refresh: use the current LIMITs ?
|
* @todo what would be the best to do when someone hits Refresh:
|
||||||
|
* use the current LIMITs ?
|
||||||
|
*/
|
||||||
|
|
||||||
if (isset($analyzed_display_query[0]['queryflags']['select_from'])
|
if (isset($analyzed_display_query[0]['queryflags']['select_from'])
|
||||||
&& isset($GLOBALS['sql_limit_to_append'])) {
|
&& isset($GLOBALS['sql_limit_to_append'])) {
|
||||||
@@ -2308,7 +2314,7 @@ window.parent.updateTableTitle('<?php echo $uni_tbl; ?>', '<?php echo PMA_jsForm
|
|||||||
} // end function
|
} // end function
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @TODO add documentation
|
* @todo add documentation
|
||||||
*/
|
*/
|
||||||
function PMA_userDir($dir)
|
function PMA_userDir($dir)
|
||||||
{
|
{
|
||||||
@@ -2521,17 +2527,20 @@ if (empty($__redirect) && !defined('PMA_NO_VARIABLES_IMPORT')) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @global array $GLOBALS['PMA_errors'] holds errors
|
* holds errors
|
||||||
|
* @global array $GLOBALS['PMA_errors']
|
||||||
*/
|
*/
|
||||||
$GLOBALS['PMA_errors'] = array();
|
$GLOBALS['PMA_errors'] = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @global array $GLOBALS['url_params'] holds params to be passed to next page
|
* holds params to be passed to next page
|
||||||
|
* @global array $GLOBALS['url_params']
|
||||||
*/
|
*/
|
||||||
$GLOBALS['url_params'] = array();
|
$GLOBALS['url_params'] = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @global array $goto_whitelist the whitelist for $GLOBALS['goto']
|
* the whitelist for $GLOBALS['goto']
|
||||||
|
* @global array $goto_whitelist
|
||||||
*/
|
*/
|
||||||
$goto_whitelist = array(
|
$goto_whitelist = array(
|
||||||
//'browse_foreigners.php',
|
//'browse_foreigners.php',
|
||||||
@@ -2605,7 +2614,8 @@ if (! PMA_checkPageValidity($__redirect, $goto_whitelist)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @global string $GLOBALS['goto'] holds page that should be displayed
|
* holds page that should be displayed
|
||||||
|
* @global string $GLOBALS['goto']
|
||||||
*/
|
*/
|
||||||
// Security fix: disallow accessing serious server files via "?goto="
|
// Security fix: disallow accessing serious server files via "?goto="
|
||||||
if (PMA_checkPageValidity($_REQUEST['goto'], $goto_whitelist)) {
|
if (PMA_checkPageValidity($_REQUEST['goto'], $goto_whitelist)) {
|
||||||
@@ -2617,7 +2627,8 @@ if (PMA_checkPageValidity($_REQUEST['goto'], $goto_whitelist)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @global string $GLOBALS['back'] returning page
|
* returning page
|
||||||
|
* @global string $GLOBALS['back']
|
||||||
*/
|
*/
|
||||||
if (PMA_checkPageValidity($_REQUEST['back'], $goto_whitelist)) {
|
if (PMA_checkPageValidity($_REQUEST['back'], $goto_whitelist)) {
|
||||||
$GLOBALS['back'] = $_REQUEST['back'];
|
$GLOBALS['back'] = $_REQUEST['back'];
|
||||||
@@ -2633,7 +2644,7 @@ if (PMA_checkPageValidity($_REQUEST['back'], $goto_whitelist)) {
|
|||||||
* could acces this variables before we reach this point
|
* could acces this variables before we reach this point
|
||||||
* f.e. PMA_Config: fontsize
|
* f.e. PMA_Config: fontsize
|
||||||
*
|
*
|
||||||
* @todo: variables should be handled by their respective owners (objects)
|
* @todo variables should be handled by their respective owners (objects)
|
||||||
* f.e. lang, server, convcharset, collation_connection in PMA_Config
|
* f.e. lang, server, convcharset, collation_connection in PMA_Config
|
||||||
*/
|
*/
|
||||||
if (! isset($_REQUEST['token']) || $_SESSION['PMA_token'] != $_REQUEST['token']) {
|
if (! isset($_REQUEST['token']) || $_SESSION['PMA_token'] != $_REQUEST['token']) {
|
||||||
@@ -2662,14 +2673,15 @@ if (! isset($_REQUEST['token']) || $_SESSION['PMA_token'] != $_REQUEST['token'])
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @global string $convcharset
|
* @global string $convcharset
|
||||||
* @see also select_lang.lib.php
|
* @see select_lang.lib.php
|
||||||
*/
|
*/
|
||||||
if (isset($_REQUEST['convcharset'])) {
|
if (isset($_REQUEST['convcharset'])) {
|
||||||
$convcharset = strip_tags($_REQUEST['convcharset']);
|
$convcharset = strip_tags($_REQUEST['convcharset']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @global string $GLOBALS['db'] current selected database
|
* current selected database
|
||||||
|
* @global string $GLOBALS['db']
|
||||||
*/
|
*/
|
||||||
if (isset($_REQUEST['db'])) {
|
if (isset($_REQUEST['db'])) {
|
||||||
// can we strip tags from this?
|
// can we strip tags from this?
|
||||||
@@ -2681,7 +2693,8 @@ if (isset($_REQUEST['db'])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @global string $GLOBALS['table'] current selected table
|
* current selected table
|
||||||
|
* @global string $GLOBALS['table']
|
||||||
*/
|
*/
|
||||||
if (isset($_REQUEST['table'])) {
|
if (isset($_REQUEST['table'])) {
|
||||||
// can we strip tags from this?
|
// can we strip tags from this?
|
||||||
@@ -2693,7 +2706,8 @@ if (isset($_REQUEST['table'])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @global string $GLOBALS['sql_query'] sql query to be executed
|
* sql query to be executed
|
||||||
|
* @global string $GLOBALS['sql_query']
|
||||||
*/
|
*/
|
||||||
if (isset($_REQUEST['sql_query'])) {
|
if (isset($_REQUEST['sql_query'])) {
|
||||||
$GLOBALS['sql_query'] = $_REQUEST['sql_query'];
|
$GLOBALS['sql_query'] = $_REQUEST['sql_query'];
|
||||||
@@ -2730,7 +2744,7 @@ if (empty($_SESSION['PMA_Config'])) {
|
|||||||
|
|
||||||
} elseif (version_compare(phpversion(), '5', 'lt')) {
|
} elseif (version_compare(phpversion(), '5', 'lt')) {
|
||||||
/**
|
/**
|
||||||
* @todo: move all __wakeup() functionality into session.inc.php
|
* @todo move all __wakeup() functionality into session.inc.php
|
||||||
*/
|
*/
|
||||||
$_SESSION['PMA_Config']->__wakeup();
|
$_SESSION['PMA_Config']->__wakeup();
|
||||||
}
|
}
|
||||||
@@ -2850,7 +2864,7 @@ if (! isset($_SESSION['PMA_Theme_Manager'])) {
|
|||||||
$_SESSION['PMA_Theme_Manager'] = new PMA_Theme_Manager;
|
$_SESSION['PMA_Theme_Manager'] = new PMA_Theme_Manager;
|
||||||
} else {
|
} else {
|
||||||
/**
|
/**
|
||||||
* @todo: move all __wakeup() functionality into session.inc.php
|
* @todo move all __wakeup() functionality into session.inc.php
|
||||||
*/
|
*/
|
||||||
$_SESSION['PMA_Theme_Manager']->checkConfig();
|
$_SESSION['PMA_Theme_Manager']->checkConfig();
|
||||||
}
|
}
|
||||||
@@ -2866,7 +2880,7 @@ if (isset($_REQUEST['server']) && !isset($_REQUEST['set_theme'])) {
|
|||||||
unset($tmp);
|
unset($tmp);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @todo: move into PMA_Theme_Manager::__wakeup()
|
* @todo move into PMA_Theme_Manager::__wakeup()
|
||||||
*/
|
*/
|
||||||
if (isset($_REQUEST['set_theme'])) {
|
if (isset($_REQUEST['set_theme'])) {
|
||||||
// if user selected a theme
|
// if user selected a theme
|
||||||
@@ -2885,7 +2899,9 @@ $GLOBALS['pmaThemeImage'] = $_SESSION['PMA_Theme']->getImgPath();
|
|||||||
*/
|
*/
|
||||||
if (@file_exists($_SESSION['PMA_Theme']->getLayoutFile())) {
|
if (@file_exists($_SESSION['PMA_Theme']->getLayoutFile())) {
|
||||||
include $_SESSION['PMA_Theme']->getLayoutFile();
|
include $_SESSION['PMA_Theme']->getLayoutFile();
|
||||||
// @todo remove if all themes are update use Navi instead of Left as frame name
|
/**
|
||||||
|
* @todo remove if all themes are update use Navi instead of Left as frame name
|
||||||
|
*/
|
||||||
if (! isset($GLOBALS['cfg']['NaviWidth'])
|
if (! isset($GLOBALS['cfg']['NaviWidth'])
|
||||||
&& isset($GLOBALS['cfg']['LeftWidth'])) {
|
&& isset($GLOBALS['cfg']['LeftWidth'])) {
|
||||||
$GLOBALS['cfg']['NaviWidth'] = $GLOBALS['cfg']['LeftWidth'];
|
$GLOBALS['cfg']['NaviWidth'] = $GLOBALS['cfg']['LeftWidth'];
|
||||||
@@ -3080,7 +3096,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* save some settings in cookies
|
* save some settings in cookies
|
||||||
* @todo: should be done in PMA_Config
|
* @todo should be done in PMA_Config
|
||||||
*/
|
*/
|
||||||
PMA_setCookie('pma_lang', $GLOBALS['lang']);
|
PMA_setCookie('pma_lang', $GLOBALS['lang']);
|
||||||
PMA_setCookie('pma_charset', $GLOBALS['convcharset']);
|
PMA_setCookie('pma_charset', $GLOBALS['convcharset']);
|
||||||
|
@@ -535,8 +535,9 @@ $cfg['NaturalOrder'] = TRUE; // Sort table and database in natura
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// custom-setup by mkkeck: 2004-05-04
|
// custom-setup by mkkeck: 2004-05-04
|
||||||
// some specials for new icons and scrollings
|
// some specials for new icons and scrollings
|
||||||
// FIXME:
|
/**
|
||||||
// 2004-05-08 rabus: We need to rearrange these variables.
|
* @todo 2004-05-08 rabus: We need to rearrange these variables.
|
||||||
|
*/
|
||||||
|
|
||||||
// Window title settings
|
// Window title settings
|
||||||
$cfg['TitleTable'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@';
|
$cfg['TitleTable'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@';
|
||||||
|
@@ -38,8 +38,10 @@ if ( ! PMA_DBI_checkAndLoadMysqlExtension( $GLOBALS['cfg']['Server']['extension'
|
|||||||
// if it fails try alternative extension ...
|
// if it fails try alternative extension ...
|
||||||
// and display an error ...
|
// and display an error ...
|
||||||
|
|
||||||
// TODO 2.7.1: add different messages for alternativ extension
|
/**
|
||||||
// and complete fail (no alternativ extension too)
|
* @todo 2.7.1: add different messages for alternativ extension
|
||||||
|
* and complete fail (no alternativ extension too)
|
||||||
|
*/
|
||||||
$GLOBALS['PMA_errors'][] =
|
$GLOBALS['PMA_errors'][] =
|
||||||
sprintf( PMA_sanitize( $GLOBALS['strCantLoad'] ),
|
sprintf( PMA_sanitize( $GLOBALS['strCantLoad'] ),
|
||||||
$GLOBALS['cfg']['Server']['extension'] )
|
$GLOBALS['cfg']['Server']['extension'] )
|
||||||
@@ -165,8 +167,9 @@ function PMA_DBI_convert_message( $message ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// lang not found, try all
|
/**
|
||||||
// what TODO ?
|
* @todo lang not found, try all, what TODO ?
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
return $message;
|
return $message;
|
||||||
@@ -334,8 +337,9 @@ function PMA_DBI_get_tables_full($database, $table = false,
|
|||||||
if ( strtoupper( $each_tables[$table_name]['Comment'] ) === 'VIEW' ) {
|
if ( strtoupper( $each_tables[$table_name]['Comment'] ) === 'VIEW' ) {
|
||||||
$each_tables[$table_name]['TABLE_TYPE'] = 'VIEW';
|
$each_tables[$table_name]['TABLE_TYPE'] = 'VIEW';
|
||||||
} else {
|
} else {
|
||||||
// TODO difference between 'TEMPORARY' and 'BASE TABLE'
|
/**
|
||||||
// but how to detect?
|
* @todo difference between 'TEMPORARY' and 'BASE TABLE' but how to detect?
|
||||||
|
*/
|
||||||
$each_tables[$table_name]['TABLE_TYPE'] = 'BASE TABLE';
|
$each_tables[$table_name]['TABLE_TYPE'] = 'BASE TABLE';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -650,9 +654,13 @@ function PMA_DBI_get_columns_full($database = null, $table = null,
|
|||||||
$columns[$column_name]['DATA_TYPE'] =
|
$columns[$column_name]['DATA_TYPE'] =
|
||||||
substr($columns[$column_name]['COLUMN_TYPE'], 0,
|
substr($columns[$column_name]['COLUMN_TYPE'], 0,
|
||||||
strpos($columns[$column_name]['COLUMN_TYPE'], '('));
|
strpos($columns[$column_name]['COLUMN_TYPE'], '('));
|
||||||
// @TODO guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE
|
/**
|
||||||
|
* @todo guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE
|
||||||
|
*/
|
||||||
$columns[$column_name]['CHARACTER_MAXIMUM_LENGTH'] = null;
|
$columns[$column_name]['CHARACTER_MAXIMUM_LENGTH'] = null;
|
||||||
// @TODO guess CHARACTER_OCTET_LENGTH from CHARACTER_MAXIMUM_LENGTH
|
/**
|
||||||
|
* @todo guess CHARACTER_OCTET_LENGTH from CHARACTER_MAXIMUM_LENGTH
|
||||||
|
*/
|
||||||
$columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null;
|
$columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null;
|
||||||
$columns[$column_name]['NUMERIC_PRECISION'] = null;
|
$columns[$column_name]['NUMERIC_PRECISION'] = null;
|
||||||
$columns[$column_name]['NUMERIC_SCALE'] = null;
|
$columns[$column_name]['NUMERIC_SCALE'] = null;
|
||||||
@@ -673,7 +681,7 @@ function PMA_DBI_get_columns_full($database = null, $table = null,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @TODO should only return columns names, for more info use PMA_DBI_get_columns_full()
|
* @todo should only return columns names, for more info use PMA_DBI_get_columns_full()
|
||||||
*
|
*
|
||||||
* @deprecated by PMA_DBI_get_columns() or PMA_DBI_get_columns_full()
|
* @deprecated by PMA_DBI_get_columns() or PMA_DBI_get_columns_full()
|
||||||
* @param string $database name of database
|
* @param string $database name of database
|
||||||
|
@@ -47,7 +47,9 @@ if (empty($is_table) && !defined('PMA_SUBMIT_MULT')) {
|
|||||||
// (as it can happen just in case temporary table, it should be
|
// (as it can happen just in case temporary table, it should be
|
||||||
// fast):
|
// fast):
|
||||||
|
|
||||||
// @todo should this check really only happen if IS_TRANSFORMATION_WRAPPER?
|
/**
|
||||||
|
* @todo should this check really only happen if IS_TRANSFORMATION_WRAPPER?
|
||||||
|
*/
|
||||||
$_result = PMA_DBI_try_query(
|
$_result = PMA_DBI_try_query(
|
||||||
'SELECT COUNT(*) FROM `' . PMA_sqlAddslashes($table, true) . '`;',
|
'SELECT COUNT(*) FROM `' . PMA_sqlAddslashes($table, true) . '`;',
|
||||||
null, PMA_DBI_QUERY_STORE);
|
null, PMA_DBI_QUERY_STORE);
|
||||||
|
@@ -342,7 +342,7 @@ function PMA_DBI_affected_rows($link = null)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @TODO add missing keys like in from mysqli_query (orgname, orgtable, flags, decimals)
|
* @todo add missing keys like in from mysqli_query (orgname, orgtable, flags, decimals)
|
||||||
*/
|
*/
|
||||||
function PMA_DBI_get_fields_meta($result) {
|
function PMA_DBI_get_fields_meta($result) {
|
||||||
$fields = array();
|
$fields = array();
|
||||||
|
@@ -171,7 +171,9 @@ function PMA_DBI_try_query($query, $link = null, $options = 0)
|
|||||||
$result = mysqli_query($link, $query, $method);
|
$result = mysqli_query($link, $query, $method);
|
||||||
|
|
||||||
if (mysqli_warning_count($link)) {
|
if (mysqli_warning_count($link)) {
|
||||||
// TODO: check $method ?
|
/**
|
||||||
|
* @todo check $method ?
|
||||||
|
*/
|
||||||
$warning_result = mysqli_query($link, 'SHOW WARNINGS');
|
$warning_result = mysqli_query($link, 'SHOW WARNINGS');
|
||||||
if ($warning_result) {
|
if ($warning_result) {
|
||||||
$warning_row = mysqli_fetch_row($warning_result);
|
$warning_row = mysqli_fetch_row($warning_result);
|
||||||
@@ -520,7 +522,7 @@ function PMA_DBI_affected_rows($link = null)
|
|||||||
/**
|
/**
|
||||||
* returns metainfo for fields in $result
|
* returns metainfo for fields in $result
|
||||||
*
|
*
|
||||||
* @TODO preserve orignal flags value
|
* @todo preserve orignal flags value
|
||||||
* @uses PMA_DBI_field_flags()
|
* @uses PMA_DBI_field_flags()
|
||||||
* @uses MYSQLI_TYPE_*
|
* @uses MYSQLI_TYPE_*
|
||||||
* @uses MYSQLI_MULTIPLE_KEY_FLAG
|
* @uses MYSQLI_MULTIPLE_KEY_FLAG
|
||||||
|
@@ -104,7 +104,10 @@ function PMA_setDisplayMode(&$the_disp_mode, &$the_total)
|
|||||||
}
|
}
|
||||||
// 2.2 Statement is a "SHOW..."
|
// 2.2 Statement is a "SHOW..."
|
||||||
elseif ($GLOBALS['is_show']) {
|
elseif ($GLOBALS['is_show']) {
|
||||||
// 2.2.1 TODO : defines edit/delete links depending on show statement
|
/**
|
||||||
|
* 2.2.1
|
||||||
|
* @todo defines edit/delete links depending on show statement
|
||||||
|
*/
|
||||||
$tmp = preg_match('@^SHOW[[:space:]]+(VARIABLES|(FULL[[:space:]]+)?PROCESSLIST|STATUS|TABLE|GRANTS|CREATE|LOGS|DATABASES|FIELDS)@i', $GLOBALS['sql_query'], $which);
|
$tmp = preg_match('@^SHOW[[:space:]]+(VARIABLES|(FULL[[:space:]]+)?PROCESSLIST|STATUS|TABLE|GRANTS|CREATE|LOGS|DATABASES|FIELDS)@i', $GLOBALS['sql_query'], $which);
|
||||||
if (isset($which[1]) && strpos(' ' . strtoupper($which[1]), 'PROCESSLIST') > 0) {
|
if (isset($which[1]) && strpos(' ' . strtoupper($which[1]), 'PROCESSLIST') > 0) {
|
||||||
$do_display['edit_lnk'] = 'nn'; // no edit link
|
$do_display['edit_lnk'] = 'nn'; // no edit link
|
||||||
@@ -138,8 +141,9 @@ function PMA_setDisplayMode(&$the_disp_mode, &$the_total)
|
|||||||
&& ($fields_meta[$i]->table == '' || $fields_meta[$i]->table != $prev_table)) {
|
&& ($fields_meta[$i]->table == '' || $fields_meta[$i]->table != $prev_table)) {
|
||||||
$do_display['edit_lnk'] = 'nn'; // don't display links
|
$do_display['edit_lnk'] = 'nn'; // don't display links
|
||||||
$do_display['del_lnk'] = 'nn';
|
$do_display['del_lnk'] = 'nn';
|
||||||
// TODO: May be problematic with same fields names in
|
/**
|
||||||
// two joined table.
|
* @todo May be problematic with same fields names in two joined table.
|
||||||
|
*/
|
||||||
// $do_display['sort_lnk'] = (string) '0';
|
// $do_display['sort_lnk'] = (string) '0';
|
||||||
$do_display['ins_row'] = (string) '0';
|
$do_display['ins_row'] = (string) '0';
|
||||||
if ($do_display['text_btn'] == '1') {
|
if ($do_display['text_btn'] == '1') {
|
||||||
@@ -219,8 +223,10 @@ function PMA_displayTableNavigation($pos_next, $pos_prev, $encoded_query)
|
|||||||
global $is_innodb;
|
global $is_innodb;
|
||||||
global $showtable;
|
global $showtable;
|
||||||
|
|
||||||
// FIXME: move this to a central place
|
/**
|
||||||
// FIXME: for other future table types
|
* @todo move this to a central place
|
||||||
|
* @todo for other future table types
|
||||||
|
*/
|
||||||
$is_innodb = (isset($showtable['Type']) && $showtable['Type'] == 'InnoDB');
|
$is_innodb = (isset($showtable['Type']) && $showtable['Type'] == 'InnoDB');
|
||||||
|
|
||||||
?>
|
?>
|
||||||
@@ -479,7 +485,10 @@ function PMA_displayTableHeaders(&$is_display, &$fields_meta, $fields_cnt = 0, $
|
|||||||
|
|
||||||
$sort_expression = trim(str_replace(' ', ' ', $analyzed_sql[0]['order_by_clause']));
|
$sort_expression = trim(str_replace(' ', ' ', $analyzed_sql[0]['order_by_clause']));
|
||||||
|
|
||||||
// Get rid of ASC|DESC (TODO: analyzer)
|
/**
|
||||||
|
* Get rid of ASC|DESC
|
||||||
|
* @todo analyzer
|
||||||
|
*/
|
||||||
preg_match('@(.*)([[:space:]]*(ASC|DESC))@si', $sort_expression, $matches);
|
preg_match('@(.*)([[:space:]]*(ASC|DESC))@si', $sort_expression, $matches);
|
||||||
$sort_expression_nodir = isset($matches[1]) ? trim($matches[1]) : $sort_expression;
|
$sort_expression_nodir = isset($matches[1]) ? trim($matches[1]) : $sort_expression;
|
||||||
|
|
||||||
|
@@ -217,8 +217,10 @@ class PMA_PDF extends PMA_FPDF
|
|||||||
$this->$key = $val ;
|
$this->$key = $val ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pass 1 for column widths
|
/**
|
||||||
// TODO: force here a LIMIT to speed up pass 1 ?
|
* Pass 1 for column widths
|
||||||
|
* @todo force here a LIMIT to speed up pass 1 ?
|
||||||
|
*/
|
||||||
$this->results = PMA_DBI_query($query, null, PMA_DBI_QUERY_UNBUFFERED);
|
$this->results = PMA_DBI_query($query, null, PMA_DBI_QUERY_UNBUFFERED);
|
||||||
$this->numFields = PMA_DBI_num_fields($this->results);
|
$this->numFields = PMA_DBI_num_fields($this->results);
|
||||||
$this->fields = PMA_DBI_get_fields_meta($this->results);
|
$this->fields = PMA_DBI_get_fields_meta($this->results);
|
||||||
@@ -248,8 +250,10 @@ class PMA_PDF extends PMA_FPDF
|
|||||||
case 'tinyblob':
|
case 'tinyblob':
|
||||||
case 'mediumblob':
|
case 'mediumblob':
|
||||||
case 'longblob':
|
case 'longblob':
|
||||||
//TODO: do not deactivate completely the display
|
/**
|
||||||
// but show the field's name and [BLOB]
|
* @todo do not deactivate completely the display
|
||||||
|
* but show the field's name and [BLOB]
|
||||||
|
*/
|
||||||
if (stristr($this->fields[$i]->flags, 'BINARY')) {
|
if (stristr($this->fields[$i]->flags, 'BINARY')) {
|
||||||
$this->display_column[$i] = false;
|
$this->display_column[$i] = false;
|
||||||
unset($this->colTitles[$i]);
|
unset($this->colTitles[$i]);
|
||||||
@@ -396,6 +400,7 @@ function PMA_exportDBCreate($db)
|
|||||||
/**
|
/**
|
||||||
* Outputs the content of a table in PDF format
|
* Outputs the content of a table in PDF format
|
||||||
*
|
*
|
||||||
|
* @todo user-defined page orientation, paper size
|
||||||
* @param string the database name
|
* @param string the database name
|
||||||
* @param string the table name
|
* @param string the table name
|
||||||
* @param string the end of line sequence
|
* @param string the end of line sequence
|
||||||
@@ -411,7 +416,6 @@ function PMA_exportData($db, $table, $crlf, $error_url, $sql_query)
|
|||||||
global $what;
|
global $what;
|
||||||
global $pdf_report_title;
|
global $pdf_report_title;
|
||||||
|
|
||||||
// TODO: user-defined page orientation, paper size
|
|
||||||
$pdf = new PMA_PDF('L', 'pt', 'A3');
|
$pdf = new PMA_PDF('L', 'pt', 'A3');
|
||||||
|
|
||||||
$pdf->AddFont('FreeSans', '', 'FreeSans.php');
|
$pdf->AddFont('FreeSans', '', 'FreeSans.php');
|
||||||
|
@@ -177,7 +177,9 @@ function PMA_exportData($db, $table, $crlf, $error_url, $sql_query)
|
|||||||
if (!isset($row[$j]) || is_null($row[$j])) {
|
if (!isset($row[$j]) || is_null($row[$j])) {
|
||||||
$worksheet->write($col, $j, $GLOBALS['xls_null']);
|
$worksheet->write($col, $j, $GLOBALS['xls_null']);
|
||||||
} elseif ($row[$j] == '0' || $row[$j] != '') {
|
} elseif ($row[$j] == '0' || $row[$j] != '') {
|
||||||
// FIXME: we should somehow handle character set here!
|
/**
|
||||||
|
* @todo we should somehow handle character set here!
|
||||||
|
*/
|
||||||
$worksheet->write($col, $j, $row[$j]);
|
$worksheet->write($col, $j, $row[$j]);
|
||||||
} else {
|
} else {
|
||||||
$worksheet->write($col, $j, '');
|
$worksheet->write($col, $j, '');
|
||||||
|
@@ -252,10 +252,13 @@ function PMA_importGetNextChunk($size = 32768)
|
|||||||
if ($charset_conversion) {
|
if ($charset_conversion) {
|
||||||
return PMA_convert_string($charset_of_file, $charset, $result);
|
return PMA_convert_string($charset_of_file, $charset, $result);
|
||||||
} else {
|
} else {
|
||||||
// Skip possible byte order marks (I do not think we need more
|
/**
|
||||||
// charsets, but feel free to add more, you can use wikipedia for
|
* Skip possible byte order marks (I do not think we need more
|
||||||
// reference: <http://en.wikipedia.org/wiki/Byte_Order_Mark>)
|
* charsets, but feel free to add more, you can use wikipedia for
|
||||||
// @TODO: BOM could be used for charset autodetection
|
* reference: <http://en.wikipedia.org/wiki/Byte_Order_Mark>)
|
||||||
|
*
|
||||||
|
* @todo BOM could be used for charset autodetection
|
||||||
|
*/
|
||||||
if ($offset == $size) {
|
if ($offset == $size) {
|
||||||
// UTF-8
|
// UTF-8
|
||||||
if (strncmp($result, "\xEF\xBB\xBF", 3) == 0) {
|
if (strncmp($result, "\xEF\xBB\xBF", 3) == 0) {
|
||||||
|
@@ -258,7 +258,9 @@ if ($plugin_param == 'table') {
|
|||||||
}
|
}
|
||||||
$sql .= ')';
|
$sql .= ')';
|
||||||
|
|
||||||
// FIXME: maybe we could add original line to verbose SQL in comment
|
/**
|
||||||
|
* @todo maybe we could add original line to verbose SQL in comment
|
||||||
|
*/
|
||||||
PMA_importRunQuery($sql, $sql);
|
PMA_importRunQuery($sql, $sql);
|
||||||
$line++;
|
$line++;
|
||||||
$csv_finish = FALSE;
|
$csv_finish = FALSE;
|
||||||
|
@@ -25,11 +25,12 @@ $is_select = isset($analyzed_sql[0]['queryflags']['select_from']);
|
|||||||
// db and table name may be enclosed with backquotes, db is optionnal,
|
// db and table name may be enclosed with backquotes, db is optionnal,
|
||||||
// query may contain aliases.
|
// query may contain aliases.
|
||||||
|
|
||||||
// (TODO: if there are more than one table name in the Select:
|
/**
|
||||||
// - do not extract the first table name
|
* @todo if there are more than one table name in the Select:
|
||||||
// - do not show a table name in the page header
|
* - do not extract the first table name
|
||||||
// - do not display the sub-pages links)
|
* - do not show a table name in the page header
|
||||||
|
* - do not display the sub-pages links)
|
||||||
|
*/
|
||||||
if ($is_select) {
|
if ($is_select) {
|
||||||
$prev_db = $db;
|
$prev_db = $db;
|
||||||
if (isset($analyzed_sql[0]['table_ref'][0]['table_true_name'])) {
|
if (isset($analyzed_sql[0]['table_ref'][0]['table_true_name'])) {
|
||||||
|
@@ -69,7 +69,9 @@ function PMA_select_server($not_only_options, $ommit_fieldset)
|
|||||||
// value, displaying such informations may not be a so good
|
// value, displaying such informations may not be a so good
|
||||||
// idea
|
// idea
|
||||||
if (!empty($server['only_db'])) {
|
if (!empty($server['only_db'])) {
|
||||||
// TODO FIXME this can become a really big/long/wide selectbox ...
|
/**
|
||||||
|
* @todo this can become a really big/long/wide selectbox ...
|
||||||
|
*/
|
||||||
$label .= ' - ' . (is_array($server['only_db']) ? implode(', ', $server['only_db']) : $server['only_db']);
|
$label .= ' - ' . (is_array($server['only_db']) ? implode(', ', $server['only_db']) : $server['only_db']);
|
||||||
}
|
}
|
||||||
if (!empty($server['user']) && $server['auth_type'] == 'config') {
|
if (!empty($server['user']) && $server['auth_type'] == 'config') {
|
||||||
|
@@ -4,8 +4,8 @@
|
|||||||
/**
|
/**
|
||||||
* session handling
|
* session handling
|
||||||
*
|
*
|
||||||
* @TODO add failover or warn if sessions are not configured properly
|
* @todo add failover or warn if sessions are not configured properly
|
||||||
* @TODO add an option to use mm-module for session handler
|
* @todo add an option to use mm-module for session handler
|
||||||
* @see http://www.php.net/session
|
* @see http://www.php.net/session
|
||||||
* @uses session_name()
|
* @uses session_name()
|
||||||
* @uses session_start()
|
* @uses session_start()
|
||||||
|
@@ -381,10 +381,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
if (PMA_STR_isSqlIdentifier($c, FALSE) || ($c == '@') || ($c == '.' && PMA_STR_isDigit(PMA_substr($sql, $count2 + 1, 1)))) {
|
if (PMA_STR_isSqlIdentifier($c, FALSE) || ($c == '@') || ($c == '.' && PMA_STR_isDigit(PMA_substr($sql, $count2 + 1, 1)))) {
|
||||||
$count2 ++;
|
$count2 ++;
|
||||||
|
|
||||||
//TODO: a @ can also be present in expressions like
|
/**
|
||||||
// FROM 'user'@'%'
|
* @todo a @ can also be present in expressions like
|
||||||
// or TO 'user'@'%'
|
* FROM 'user'@'%' or TO 'user'@'%'
|
||||||
// in this case, the @ is wrongly marked as alpha_variable
|
* in this case, the @ is wrongly marked as alpha_variable
|
||||||
|
*/
|
||||||
|
|
||||||
$is_sql_variable = ($c == '@');
|
$is_sql_variable = ($c == '@');
|
||||||
$is_digit = (!$is_sql_variable) && PMA_STR_isDigit($c);
|
$is_digit = (!$is_sql_variable) && PMA_STR_isDigit($c);
|
||||||
@@ -523,9 +524,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
} elseif (($last == '-') || ($last == '+') || ($last == '!')) {
|
} elseif (($last == '-') || ($last == '+') || ($last == '!')) {
|
||||||
$count2--;
|
$count2--;
|
||||||
$punct_data = PMA_substr($sql, $count1, $count2 - $count1);
|
$punct_data = PMA_substr($sql, $count1, $count2 - $count1);
|
||||||
// TODO: for negation operator, split in 2 tokens ?
|
/**
|
||||||
// "select x&~1 from t"
|
* @todo for negation operator, split in 2 tokens ?
|
||||||
// becomes "select x & ~ 1 from t" ?
|
* "select x&~1 from t"
|
||||||
|
* becomes "select x & ~ 1 from t" ?
|
||||||
|
*/
|
||||||
|
|
||||||
} elseif ($last != '~') {
|
} elseif ($last != '~') {
|
||||||
$debugstr = $GLOBALS['strSQPBugUnknownPunctuation'] . ' @ ' . ($count1+1) . "\n"
|
$debugstr = $GLOBALS['strSQPBugUnknownPunctuation'] . ' @ ' . ($count1+1) . "\n"
|
||||||
@@ -593,17 +596,22 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
$t_suffix = '_identifier';
|
$t_suffix = '_identifier';
|
||||||
} elseif (($t_next == 'punct_bracket_open_round')
|
} elseif (($t_next == 'punct_bracket_open_round')
|
||||||
&& PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_function_name, $PMA_SQPdata_function_name_cnt)) {
|
&& PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_function_name, $PMA_SQPdata_function_name_cnt)) {
|
||||||
// FIXME-2005-10-16: in the case of a CREATE TABLE containing a TIMESTAMP,
|
/**
|
||||||
// since TIMESTAMP() is also a function, it's found here and
|
* @todo 2005-10-16: in the case of a CREATE TABLE containing
|
||||||
// the token is wrongly marked as alpha_functionName. But we
|
* a TIMESTAMP, since TIMESTAMP() is also a function, it's
|
||||||
// compensate for this when analysing for timestamp_not_null
|
* found here and the token is wrongly marked as alpha_functionName.
|
||||||
// later in this script.
|
* But we compensate for this when analysing for timestamp_not_null
|
||||||
|
* later in this script.
|
||||||
|
*/
|
||||||
$t_suffix = '_functionName';
|
$t_suffix = '_functionName';
|
||||||
} elseif (PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_column_type, $PMA_SQPdata_column_type_cnt)) {
|
} elseif (PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_column_type, $PMA_SQPdata_column_type_cnt)) {
|
||||||
$t_suffix = '_columnType';
|
$t_suffix = '_columnType';
|
||||||
|
|
||||||
// Temporary fix for BUG #621357
|
/**
|
||||||
//TODO FIX PROPERLY NEEDS OVERHAUL OF SQL TOKENIZER
|
* Temporary fix for BUG #621357
|
||||||
|
*
|
||||||
|
* @todo FIX PROPERLY NEEDS OVERHAUL OF SQL TOKENIZER
|
||||||
|
*/
|
||||||
if ($d_cur_upper == 'SET' && $t_next != 'punct_bracket_open_round') {
|
if ($d_cur_upper == 'SET' && $t_next != 'punct_bracket_open_round') {
|
||||||
$t_suffix = '_reservedWord';
|
$t_suffix = '_reservedWord';
|
||||||
}
|
}
|
||||||
@@ -915,10 +923,10 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
} // end if (type == punct_queryend)
|
} // end if (type == punct_queryend)
|
||||||
} // end if ($seek_queryend)
|
} // end if ($seek_queryend)
|
||||||
|
|
||||||
// TODO: when we find a UNION, should we split
|
/**
|
||||||
// in another subresult?
|
* Note: do not split if this is a punct_queryend for the first and only query
|
||||||
// Note: do not split if this is a punct_queryend for the
|
* @todo when we find a UNION, should we split in another subresult?
|
||||||
// first and only query
|
*/
|
||||||
if ($arr[$i]['type'] == 'punct_queryend' && ($i + 1 != $size)) {
|
if ($arr[$i]['type'] == 'punct_queryend' && ($i + 1 != $size)) {
|
||||||
$result[] = $subresult;
|
$result[] = $subresult;
|
||||||
$subresult = $subresult_empty;
|
$subresult = $subresult_empty;
|
||||||
@@ -980,7 +988,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
|
|
||||||
// upper once
|
// upper once
|
||||||
$upper_data = strtoupper($arr[$i]['data']);
|
$upper_data = strtoupper($arr[$i]['data']);
|
||||||
//TODO: reset for each query?
|
/**
|
||||||
|
* @todo reset for each query?
|
||||||
|
*/
|
||||||
|
|
||||||
if ($upper_data == 'SELECT') {
|
if ($upper_data == 'SELECT') {
|
||||||
$seen_from = FALSE;
|
$seen_from = FALSE;
|
||||||
@@ -1011,14 +1021,13 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
switch ($arr[$i]['type']) {
|
switch ($arr[$i]['type']) {
|
||||||
case 'alpha_identifier':
|
case 'alpha_identifier':
|
||||||
case 'alpha_reservedWord':
|
case 'alpha_reservedWord':
|
||||||
// this is not a real reservedWord, because
|
/**
|
||||||
// it's not present in the list of forbidden words,
|
* this is not a real reservedWord, because it's not
|
||||||
// for example "storage" which can be used as
|
* present in the list of forbidden words, for example
|
||||||
// an identifier
|
* "storage" which can be used as an identifier
|
||||||
//
|
*
|
||||||
// TODO: avoid the pretty printing in color
|
* @todo avoid the pretty printing in color in this case
|
||||||
// in this case
|
*/
|
||||||
|
|
||||||
$identifier = $arr[$i]['data'];
|
$identifier = $arr[$i]['data'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1067,7 +1076,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
continue;
|
continue;
|
||||||
} // end if (punct_qualifier)
|
} // end if (punct_qualifier)
|
||||||
|
|
||||||
// TODO: check if 3 identifiers following one another -> error
|
/**
|
||||||
|
* @todo check if 3 identifiers following one another -> error
|
||||||
|
*/
|
||||||
|
|
||||||
// s a v e a s e l e c t e x p r
|
// s a v e a s e l e c t e x p r
|
||||||
// finding a list separator or FROM
|
// finding a list separator or FROM
|
||||||
@@ -1122,7 +1133,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
} // end if ($size_chain > 2)
|
} // end if ($size_chain > 2)
|
||||||
unset($chain);
|
unset($chain);
|
||||||
|
|
||||||
// TODO: explain this:
|
/**
|
||||||
|
* @todo explain this:
|
||||||
|
*/
|
||||||
if (($arr[$i]['type'] == 'alpha_reservedWord')
|
if (($arr[$i]['type'] == 'alpha_reservedWord')
|
||||||
&& ($upper_data != 'FROM')) {
|
&& ($upper_data != 'FROM')) {
|
||||||
$previous_was_identifier = TRUE;
|
$previous_was_identifier = TRUE;
|
||||||
@@ -1137,9 +1150,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
|
|
||||||
// maybe we just saw the end of table refs
|
// maybe we just saw the end of table refs
|
||||||
// but the last table ref has to be saved
|
// but the last table ref has to be saved
|
||||||
// or we are at the last token (TODO: there could be another
|
// or we are at the last token
|
||||||
// query after this one)
|
|
||||||
// or we just got a reserved word
|
// or we just got a reserved word
|
||||||
|
/**
|
||||||
|
* @todo there could be another query after this one
|
||||||
|
*/
|
||||||
|
|
||||||
if (isset($chain) && $seen_from && $save_table_ref
|
if (isset($chain) && $seen_from && $save_table_ref
|
||||||
&& ($arr[$i]['type'] == 'punct_listsep'
|
&& ($arr[$i]['type'] == 'punct_listsep'
|
||||||
@@ -1230,8 +1245,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
$save_table_ref = TRUE;
|
$save_table_ref = TRUE;
|
||||||
} // end if (data == JOIN)
|
} // end if (data == JOIN)
|
||||||
|
|
||||||
// no need to check the end of table ref if we already did
|
/**
|
||||||
// TODO: maybe add "&& $seen_from"
|
* no need to check the end of table ref if we already did
|
||||||
|
*
|
||||||
|
* @todo maybe add "&& $seen_from"
|
||||||
|
*/
|
||||||
if (!$seen_end_of_table_ref) {
|
if (!$seen_end_of_table_ref) {
|
||||||
// if this is the last token, it implies that we have
|
// if this is the last token, it implies that we have
|
||||||
// seen the end of table references
|
// seen the end of table references
|
||||||
@@ -1332,10 +1350,10 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
//
|
//
|
||||||
// this code is not used for confirmations coming from functions.js
|
// this code is not used for confirmations coming from functions.js
|
||||||
|
|
||||||
// TODO: check for punct_queryend
|
/**
|
||||||
|
* @todo check for punct_queryend
|
||||||
|
* @todo verify C-style comments?
|
||||||
// TODO: verify C-style comments?
|
*/
|
||||||
if ($arr[$i]['type'] == 'comment_ansi') {
|
if ($arr[$i]['type'] == 'comment_ansi') {
|
||||||
$collect_section_before_limit = FALSE;
|
$collect_section_before_limit = FALSE;
|
||||||
}
|
}
|
||||||
@@ -1368,10 +1386,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
if ($upper_data == 'PROCEDURE') {
|
if ($upper_data == 'PROCEDURE') {
|
||||||
$collect_section_before_limit = FALSE;
|
$collect_section_before_limit = FALSE;
|
||||||
}
|
}
|
||||||
// TODO: set also to FALSE if we find
|
/**
|
||||||
// FOR UPDATE
|
* @todo set also to FALSE if we find FOR UPDATE or LOCK IN SHARE MODE
|
||||||
// LOCK IN SHARE MODE
|
*/
|
||||||
|
|
||||||
if ($upper_data == 'SELECT') {
|
if ($upper_data == 'SELECT') {
|
||||||
$in_select_expr = TRUE;
|
$in_select_expr = TRUE;
|
||||||
$select_expr_clause = '';
|
$select_expr_clause = '';
|
||||||
@@ -1475,10 +1492,11 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
|
|
||||||
|
|
||||||
// do not add a blank after a function name
|
// do not add a blank after a function name
|
||||||
// TODO: can we combine loop 2 and loop 1?
|
/**
|
||||||
// some code is repeated here...
|
* @todo can we combine loop 2 and loop 1? some code is repeated here...
|
||||||
|
*/
|
||||||
|
|
||||||
$sep=' ';
|
$sep = ' ';
|
||||||
if ($arr[$i]['type'] == 'alpha_functionName') {
|
if ($arr[$i]['type'] == 'alpha_functionName') {
|
||||||
$sep='';
|
$sep='';
|
||||||
$upper_data = strtoupper($arr[$i]['data']);
|
$upper_data = strtoupper($arr[$i]['data']);
|
||||||
@@ -1712,8 +1730,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// note: the "or" part here is a workaround for a bug
|
/**
|
||||||
// (see FIXME-2005-10-16)
|
* @see @todo 2005-10-16 note: the "or" part here is a workaround for a bug
|
||||||
|
*/
|
||||||
if (($arr[$i]['type'] == 'alpha_columnType') || ($arr[$i]['type'] == 'alpha_functionName' && $seen_create_table)) {
|
if (($arr[$i]['type'] == 'alpha_columnType') || ($arr[$i]['type'] == 'alpha_functionName' && $seen_create_table)) {
|
||||||
$upper_data = strtoupper($arr[$i]['data']);
|
$upper_data = strtoupper($arr[$i]['data']);
|
||||||
if ($seen_create_table && $in_create_table_fields && isset($current_identifier)) {
|
if ($seen_create_table && $in_create_table_fields && isset($current_identifier)) {
|
||||||
@@ -1835,6 +1854,8 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
/**
|
/**
|
||||||
* Colorizes SQL queries html formatted
|
* Colorizes SQL queries html formatted
|
||||||
*
|
*
|
||||||
|
* @todo check why adding a "\n" after the </span> would cause extra blanks
|
||||||
|
* to be displayed: SELECT p . person_name
|
||||||
* @param array The SQL queries html formatted
|
* @param array The SQL queries html formatted
|
||||||
*
|
*
|
||||||
* @return array The colorized SQL queries
|
* @return array The colorized SQL queries
|
||||||
@@ -1851,10 +1872,6 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
|
|
||||||
$class .= 'syntax_' . $arr['type'];
|
$class .= 'syntax_' . $arr['type'];
|
||||||
|
|
||||||
//TODO: check why adding a "\n" after the </span> would cause extra
|
|
||||||
// blanks to be displayed:
|
|
||||||
// SELECT p . person_name
|
|
||||||
|
|
||||||
return '<span class="' . $class . '">' . htmlspecialchars($arr['data']) . '</span>';
|
return '<span class="' . $class . '">' . htmlspecialchars($arr['data']) . '</span>';
|
||||||
} // end of the "PMA_SQP_formatHtml_colorize()" function
|
} // end of the "PMA_SQP_formatHtml_colorize()" function
|
||||||
|
|
||||||
@@ -2137,8 +2154,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
// the quote_single exception is there to
|
// the quote_single exception is there to
|
||||||
// catch cases like
|
// catch cases like
|
||||||
// GRANT ... TO 'marc'@'domain.com' IDENTIFIED...
|
// GRANT ... TO 'marc'@'domain.com' IDENTIFIED...
|
||||||
//
|
/**
|
||||||
// TODO: fix all cases and find why this happens
|
* @todo fix all cases and find why this happens
|
||||||
|
*/
|
||||||
|
|
||||||
if (!$in_priv_list || $typearr[1] == 'alpha_identifier' || $typearr[1] == 'quote_single' || $typearr[1] == 'white_newline') {
|
if (!$in_priv_list || $typearr[1] == 'alpha_identifier' || $typearr[1] == 'quote_single' || $typearr[1] == 'white_newline') {
|
||||||
$before .= $space_alpha_reserved_word;
|
$before .= $space_alpha_reserved_word;
|
||||||
@@ -2201,7 +2219,9 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
case 'digit_integer':
|
case 'digit_integer':
|
||||||
case 'digit_float':
|
case 'digit_float':
|
||||||
case 'digit_hex':
|
case 'digit_hex':
|
||||||
//TODO: could there be other types preceding a digit?
|
/**
|
||||||
|
* @todo could there be other types preceding a digit?
|
||||||
|
*/
|
||||||
if ($typearr[1] == 'alpha_reservedWord') {
|
if ($typearr[1] == 'alpha_reservedWord') {
|
||||||
$after .= ' ';
|
$after .= ' ';
|
||||||
}
|
}
|
||||||
@@ -2335,6 +2355,7 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
/**
|
/**
|
||||||
* Gets SQL queries in text format
|
* Gets SQL queries in text format
|
||||||
*
|
*
|
||||||
|
* @todo WRITE THIS!
|
||||||
* @param array The SQL queries list
|
* @param array The SQL queries list
|
||||||
*
|
*
|
||||||
* @return string The SQL queries in text format
|
* @return string The SQL queries in text format
|
||||||
@@ -2343,9 +2364,6 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
|
|||||||
*/
|
*/
|
||||||
function PMA_SQP_formatText($arr)
|
function PMA_SQP_formatText($arr)
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* TODO WRITE THIS!
|
|
||||||
*/
|
|
||||||
return PMA_SQP_formatNone($arr);
|
return PMA_SQP_formatNone($arr);
|
||||||
} // end of the "PMA_SQP_formatText()" function
|
} // end of the "PMA_SQP_formatText()" function
|
||||||
} // end if: minimal common.lib needed?
|
} // end if: minimal common.lib needed?
|
||||||
|
@@ -7,7 +7,7 @@ require_once './libraries/Table.class.php';
|
|||||||
/**
|
/**
|
||||||
* extracts table properties from create statement
|
* extracts table properties from create statement
|
||||||
*
|
*
|
||||||
* @TODO this should be recoded as functions,
|
* @todo this should be recoded as functions,
|
||||||
* to avoid messing with global variables
|
* to avoid messing with global variables
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
6
main.php
6
main.php
@@ -191,7 +191,11 @@ if ($server > 0) {
|
|||||||
PMA_printListItem($strImport, 'li_import',
|
PMA_printListItem($strImport, 'li_import',
|
||||||
'./server_import.php?' . $common_url_query);
|
'./server_import.php?' . $common_url_query);
|
||||||
|
|
||||||
// Change password (TODO ? needs another message)
|
/**
|
||||||
|
* Change password
|
||||||
|
*
|
||||||
|
* @todo ? needs another message
|
||||||
|
*/
|
||||||
if ($cfg['ShowChgPassword']) {
|
if ($cfg['ShowChgPassword']) {
|
||||||
PMA_printListItem($strChangePassword, 'li_change_password',
|
PMA_printListItem($strChangePassword, 'li_change_password',
|
||||||
'./user_password.php?' . $common_url_query);
|
'./user_password.php?' . $common_url_query);
|
||||||
|
@@ -1265,7 +1265,9 @@ function PMA_RT_DOC($alltables)
|
|||||||
$comments_width = 67;
|
$comments_width = 67;
|
||||||
} else {
|
} else {
|
||||||
// this is really intended for 'letter'
|
// this is really intended for 'letter'
|
||||||
// TODO: find optimal width for all formats
|
/**
|
||||||
|
* @todo find optimal width for all formats
|
||||||
|
*/
|
||||||
$comments_width = 50;
|
$comments_width = 50;
|
||||||
}
|
}
|
||||||
$pdf->Cell($comments_width, 8, ucfirst($GLOBALS['strComments']), 1, 0, 'C');
|
$pdf->Cell($comments_width, 8, ucfirst($GLOBALS['strComments']), 1, 0, 'C');
|
||||||
|
@@ -34,10 +34,10 @@ echo '<h2>' . "\n"
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks the MySQL version
|
* exits if wrong MySQL version
|
||||||
|
* @todo Some nice Message :-)
|
||||||
*/
|
*/
|
||||||
if (PMA_MYSQL_INT_VERSION < 40100) {
|
if (PMA_MYSQL_INT_VERSION < 40100) {
|
||||||
// TODO: Some nice Message :-)
|
|
||||||
require_once('./libraries/footer.inc.php');
|
require_once('./libraries/footer.inc.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -783,7 +783,9 @@ if (!empty($adduser_submit) || !empty($change_copy)) {
|
|||||||
$create_user_show = $create_user_real;
|
$create_user_show = $create_user_real;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// FIXME: similar code appears twice in this script
|
/**
|
||||||
|
* @todo similar code appears twice in this script
|
||||||
|
*/
|
||||||
if ((isset($Grant_priv) && $Grant_priv == 'Y') || (PMA_MYSQL_INT_VERSION >= 40002 && (isset($max_questions) || isset($max_connections) || isset($max_updates) || isset($max_user_connections)))) {
|
if ((isset($Grant_priv) && $Grant_priv == 'Y') || (PMA_MYSQL_INT_VERSION >= 40002 && (isset($max_questions) || isset($max_connections) || isset($max_updates) || isset($max_user_connections)))) {
|
||||||
$real_sql_query .= 'WITH';
|
$real_sql_query .= 'WITH';
|
||||||
$sql_query .= 'WITH';
|
$sql_query .= 'WITH';
|
||||||
@@ -989,7 +991,9 @@ if (!empty($update_privs)) {
|
|||||||
. ' ON ' . $db_and_table
|
. ' ON ' . $db_and_table
|
||||||
. ' TO \'' . PMA_sqlAddslashes($username) . '\'@\'' . $hostname . '\'';
|
. ' TO \'' . PMA_sqlAddslashes($username) . '\'@\'' . $hostname . '\'';
|
||||||
|
|
||||||
// FIXME: similar code appears twice in this script
|
/**
|
||||||
|
* @todo similar code appears twice in this script
|
||||||
|
*/
|
||||||
if ( ( isset($Grant_priv) && $Grant_priv == 'Y')
|
if ( ( isset($Grant_priv) && $Grant_priv == 'Y')
|
||||||
|| ( ( ! isset($dbname) || ! strlen($dbname) ) && PMA_MYSQL_INT_VERSION >= 40002
|
|| ( ( ! isset($dbname) || ! strlen($dbname) ) && PMA_MYSQL_INT_VERSION >= 40002
|
||||||
&& ( isset($max_questions) || isset($max_connections)
|
&& ( isset($max_questions) || isset($max_connections)
|
||||||
|
135
sql.php
135
sql.php
@@ -221,75 +221,84 @@ if ($do_confirm) {
|
|||||||
<?php
|
<?php
|
||||||
echo '</fieldset>' . "\n"
|
echo '</fieldset>' . "\n"
|
||||||
. '</form>' . "\n";
|
. '</form>' . "\n";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays the footer and exit
|
||||||
|
*/
|
||||||
|
require_once './libraries/footer.inc.php';
|
||||||
} // end if $do_confirm
|
} // end if $do_confirm
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the query and displays results
|
* Executes the query and displays results
|
||||||
*/
|
*/
|
||||||
else {
|
if (!isset($sql_query)) {
|
||||||
if (!isset($sql_query)) {
|
|
||||||
$sql_query = '';
|
$sql_query = '';
|
||||||
}
|
}
|
||||||
// Defines some variables
|
|
||||||
// A table has to be created or renamed -> left frame should be reloaded
|
|
||||||
// TODO: use the parser/analyzer
|
|
||||||
|
|
||||||
if (empty($reload)
|
// Defines some variables
|
||||||
|
// A table has to be created or renamed -> left frame should be reloaded
|
||||||
|
/**
|
||||||
|
* @todo use the parser/analyzer
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (empty($reload)
|
||||||
&& preg_match('/^(CREATE|ALTER|DROP)\s+(VIEW|TABLE|DATABASE|SCHEMA)\s+/i', $sql_query)) {
|
&& preg_match('/^(CREATE|ALTER|DROP)\s+(VIEW|TABLE|DATABASE|SCHEMA)\s+/i', $sql_query)) {
|
||||||
$reload = 1;
|
$reload = 1;
|
||||||
}
|
}
|
||||||
// Gets the number of rows per page
|
// Gets the number of rows per page
|
||||||
if (empty($session_max_rows)) {
|
if (empty($session_max_rows)) {
|
||||||
$session_max_rows = $cfg['MaxRows'];
|
$session_max_rows = $cfg['MaxRows'];
|
||||||
} elseif ($session_max_rows != 'all') {
|
} elseif ($session_max_rows != 'all') {
|
||||||
$cfg['MaxRows'] = $session_max_rows;
|
$cfg['MaxRows'] = $session_max_rows;
|
||||||
}
|
}
|
||||||
// Defines the display mode (horizontal/vertical) and header "frequency"
|
// Defines the display mode (horizontal/vertical) and header "frequency"
|
||||||
if (empty($disp_direction)) {
|
if (empty($disp_direction)) {
|
||||||
$disp_direction = $cfg['DefaultDisplay'];
|
$disp_direction = $cfg['DefaultDisplay'];
|
||||||
}
|
}
|
||||||
if (empty($repeat_cells)) {
|
if (empty($repeat_cells)) {
|
||||||
$repeat_cells = $cfg['RepeatCells'];
|
$repeat_cells = $cfg['RepeatCells'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// SK -- Patch: $is_group added for use in calculation of total number of
|
// SK -- Patch: $is_group added for use in calculation of total number of
|
||||||
// rows.
|
// rows.
|
||||||
// $is_count is changed for more correct "LIMIT" clause
|
// $is_count is changed for more correct "LIMIT" clause
|
||||||
// appending in queries like
|
// appending in queries like
|
||||||
// "SELECT COUNT(...) FROM ... GROUP BY ..."
|
// "SELECT COUNT(...) FROM ... GROUP BY ..."
|
||||||
|
|
||||||
// TODO: detect all this with the parser, to avoid problems finding
|
/**
|
||||||
// those strings in comments or backquoted identifiers
|
* @todo detect all this with the parser, to avoid problems finding
|
||||||
|
* those strings in comments or backquoted identifiers
|
||||||
|
*/
|
||||||
|
|
||||||
$is_explain = $is_count = $is_export = $is_delete = $is_insert = $is_affected = $is_show = $is_maint = $is_analyse = $is_group = $is_func = $is_replace = false;
|
$is_explain = $is_count = $is_export = $is_delete = $is_insert = $is_affected = $is_show = $is_maint = $is_analyse = $is_group = $is_func = $is_replace = false;
|
||||||
if ($is_select) { // see line 141
|
if ($is_select) { // see line 141
|
||||||
$is_group = preg_match('@(GROUP[[:space:]]+BY|HAVING|SELECT[[:space:]]+DISTINCT)[[:space:]]+@i', $sql_query);
|
$is_group = preg_match('@(GROUP[[:space:]]+BY|HAVING|SELECT[[:space:]]+DISTINCT)[[:space:]]+@i', $sql_query);
|
||||||
$is_func = !$is_group && (preg_match('@[[:space:]]+(SUM|AVG|STD|STDDEV|MIN|MAX|BIT_OR|BIT_AND)\s*\(@i', $sql_query));
|
$is_func = !$is_group && (preg_match('@[[:space:]]+(SUM|AVG|STD|STDDEV|MIN|MAX|BIT_OR|BIT_AND)\s*\(@i', $sql_query));
|
||||||
$is_count = !$is_group && (preg_match('@^SELECT[[:space:]]+COUNT\((.*\.+)?.*\)@i', $sql_query));
|
$is_count = !$is_group && (preg_match('@^SELECT[[:space:]]+COUNT\((.*\.+)?.*\)@i', $sql_query));
|
||||||
$is_export = (preg_match('@[[:space:]]+INTO[[:space:]]+OUTFILE[[:space:]]+@i', $sql_query));
|
$is_export = (preg_match('@[[:space:]]+INTO[[:space:]]+OUTFILE[[:space:]]+@i', $sql_query));
|
||||||
$is_analyse = (preg_match('@[[:space:]]+PROCEDURE[[:space:]]+ANALYSE@i', $sql_query));
|
$is_analyse = (preg_match('@[[:space:]]+PROCEDURE[[:space:]]+ANALYSE@i', $sql_query));
|
||||||
} elseif (preg_match('@^EXPLAIN[[:space:]]+@i', $sql_query)) {
|
} elseif (preg_match('@^EXPLAIN[[:space:]]+@i', $sql_query)) {
|
||||||
$is_explain = true;
|
$is_explain = true;
|
||||||
} elseif (preg_match('@^DELETE[[:space:]]+@i', $sql_query)) {
|
} elseif (preg_match('@^DELETE[[:space:]]+@i', $sql_query)) {
|
||||||
$is_delete = true;
|
$is_delete = true;
|
||||||
$is_affected = true;
|
$is_affected = true;
|
||||||
} elseif (preg_match('@^(INSERT|LOAD[[:space:]]+DATA|REPLACE)[[:space:]]+@i', $sql_query)) {
|
} elseif (preg_match('@^(INSERT|LOAD[[:space:]]+DATA|REPLACE)[[:space:]]+@i', $sql_query)) {
|
||||||
$is_insert = true;
|
$is_insert = true;
|
||||||
$is_affected = true;
|
$is_affected = true;
|
||||||
if (preg_match('@^(REPLACE)[[:space:]]+@i', $sql_query)) {
|
if (preg_match('@^(REPLACE)[[:space:]]+@i', $sql_query)) {
|
||||||
$is_replace = true;
|
$is_replace = true;
|
||||||
}
|
}
|
||||||
} elseif (preg_match('@^UPDATE[[:space:]]+@i', $sql_query)) {
|
} elseif (preg_match('@^UPDATE[[:space:]]+@i', $sql_query)) {
|
||||||
$is_affected = true;
|
$is_affected = true;
|
||||||
} elseif (preg_match('@^SHOW[[:space:]]+@i', $sql_query)) {
|
} elseif (preg_match('@^SHOW[[:space:]]+@i', $sql_query)) {
|
||||||
$is_show = true;
|
$is_show = true;
|
||||||
} elseif (preg_match('@^(CHECK|ANALYZE|REPAIR|OPTIMIZE)[[:space:]]+TABLE[[:space:]]+@i', $sql_query)) {
|
} elseif (preg_match('@^(CHECK|ANALYZE|REPAIR|OPTIMIZE)[[:space:]]+TABLE[[:space:]]+@i', $sql_query)) {
|
||||||
$is_maint = true;
|
$is_maint = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do append a "LIMIT" clause?
|
// Do append a "LIMIT" clause?
|
||||||
if (isset($pos)
|
if (isset($pos)
|
||||||
&& (!$cfg['ShowAll'] || $session_max_rows != 'all')
|
&& (!$cfg['ShowAll'] || $session_max_rows != 'all')
|
||||||
&& !($is_count || $is_export || $is_func || $is_analyse)
|
&& !($is_count || $is_export || $is_func || $is_analyse)
|
||||||
&& isset($analyzed_sql[0]['queryflags']['select_from'])
|
&& isset($analyzed_sql[0]['queryflags']['select_from'])
|
||||||
@@ -298,8 +307,9 @@ else {
|
|||||||
$sql_limit_to_append = " LIMIT $pos, ".$cfg['MaxRows'] . " ";
|
$sql_limit_to_append = " LIMIT $pos, ".$cfg['MaxRows'] . " ";
|
||||||
|
|
||||||
$full_sql_query = $analyzed_sql[0]['section_before_limit'] . "\n" . $sql_limit_to_append . $analyzed_sql[0]['section_after_limit'];
|
$full_sql_query = $analyzed_sql[0]['section_before_limit'] . "\n" . $sql_limit_to_append . $analyzed_sql[0]['section_after_limit'];
|
||||||
// FIXME: pretty printing of this modified query
|
/**
|
||||||
|
* @todo pretty printing of this modified query
|
||||||
|
*/
|
||||||
if (isset($display_query)) {
|
if (isset($display_query)) {
|
||||||
// if the analysis of the original query revealed that we found
|
// if the analysis of the original query revealed that we found
|
||||||
// a section_after_limit, we now have to analyze $display_query
|
// a section_after_limit, we now have to analyze $display_query
|
||||||
@@ -311,20 +321,20 @@ else {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$full_sql_query = $sql_query;
|
$full_sql_query = $sql_query;
|
||||||
} // end if...else
|
} // end if...else
|
||||||
|
|
||||||
if (isset($db)) {
|
if (isset($db)) {
|
||||||
PMA_DBI_select_db($db);
|
PMA_DBI_select_db($db);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the query is a DELETE query with no WHERE clause, get the number of
|
// If the query is a DELETE query with no WHERE clause, get the number of
|
||||||
// rows that will be deleted (mysql_affected_rows will always return 0 in
|
// rows that will be deleted (mysql_affected_rows will always return 0 in
|
||||||
// this case)
|
// this case)
|
||||||
// Note: testing shows that this no longer applies since MySQL 4.0.x
|
// Note: testing shows that this no longer applies since MySQL 4.0.x
|
||||||
|
|
||||||
if (PMA_MYSQL_INT_VERSION < 40000) {
|
if (PMA_MYSQL_INT_VERSION < 40000) {
|
||||||
if ($is_delete
|
if ($is_delete
|
||||||
&& preg_match('@^DELETE([[:space:]].+)?(FROM[[:space:]](.+))$@i', $sql_query, $parts)
|
&& preg_match('@^DELETE([[:space:]].+)?(FROM[[:space:]](.+))$@i', $sql_query, $parts)
|
||||||
&& !preg_match('@[[:space:]]WHERE[[:space:]]@i', $parts[3])) {
|
&& !preg_match('@[[:space:]]WHERE[[:space:]]@i', $parts[3])) {
|
||||||
@@ -336,15 +346,15 @@ else {
|
|||||||
$num_rows = 0;
|
$num_rows = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// E x e c u t e t h e q u e r y
|
// E x e c u t e t h e q u e r y
|
||||||
|
|
||||||
// Only if we didn't ask to see the php code (mikebeck)
|
// Only if we didn't ask to see the php code (mikebeck)
|
||||||
if (isset($GLOBALS['show_as_php']) || !empty($GLOBALS['validatequery'])) {
|
if (isset($GLOBALS['show_as_php']) || !empty($GLOBALS['validatequery'])) {
|
||||||
unset($result);
|
unset($result);
|
||||||
$num_rows = 0;
|
$num_rows = 0;
|
||||||
} else {
|
} else {
|
||||||
// garvin: Measure query time.
|
// garvin: Measure query time.
|
||||||
// TODO-Item http://sourceforge.net/tracker/index.php?func=detail&aid=571934&group_id=23067&atid=377411
|
// TODO-Item http://sourceforge.net/tracker/index.php?func=detail&aid=571934&group_id=23067&atid=377411
|
||||||
$querytime_before = array_sum(explode(' ', microtime()));
|
$querytime_before = array_sum(explode(' ', microtime()));
|
||||||
@@ -514,9 +524,10 @@ else {
|
|||||||
// there are some cases where the generated
|
// there are some cases where the generated
|
||||||
// count_query (for MySQL 3) is wrong,
|
// count_query (for MySQL 3) is wrong,
|
||||||
// so we get here.
|
// so we get here.
|
||||||
//TODO: use a big unlimited query to get
|
/**
|
||||||
// the correct number of rows (depending
|
* @todo use a big unlimited query to get the correct
|
||||||
// on a config variable?)
|
* number of rows (depending on a config variable?)
|
||||||
|
*/
|
||||||
$unlim_num_rows = 0;
|
$unlim_num_rows = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -568,10 +579,10 @@ else {
|
|||||||
PMA_relationsCleanupColumn($db, $table, $purgekey);
|
PMA_relationsCleanupColumn($db, $table, $purgekey);
|
||||||
|
|
||||||
} // end if column PMA_* purge
|
} // end if column PMA_* purge
|
||||||
} // end else "didn't ask to see php code"
|
} // end else "didn't ask to see php code"
|
||||||
|
|
||||||
// No rows returned -> move back to the calling page
|
// No rows returned -> move back to the calling page
|
||||||
if ($num_rows < 1 || $is_affected) {
|
if ($num_rows < 1 || $is_affected) {
|
||||||
if ($is_delete) {
|
if ($is_delete) {
|
||||||
$message = $strDeletedRows . ' ' . $num_rows;
|
$message = $strDeletedRows . ' ' . $num_rows;
|
||||||
} elseif ($is_insert) {
|
} elseif ($is_insert) {
|
||||||
@@ -640,10 +651,10 @@ else {
|
|||||||
PMA_sendHeaderLocation($cfg['PmaAbsoluteUri'] . str_replace('&', '&', $goto) . '&message=' . urlencode($message));
|
PMA_sendHeaderLocation($cfg['PmaAbsoluteUri'] . str_replace('&', '&', $goto) . '&message=' . urlencode($message));
|
||||||
} // end else
|
} // end else
|
||||||
exit();
|
exit();
|
||||||
} // end no rows returned
|
} // end no rows returned
|
||||||
|
|
||||||
// At least one row is returned -> displays a table with results
|
// At least one row is returned -> displays a table with results
|
||||||
else {
|
else {
|
||||||
// Displays the headers
|
// Displays the headers
|
||||||
if (isset($show_query)) {
|
if (isset($show_query)) {
|
||||||
unset($show_query);
|
unset($show_query);
|
||||||
@@ -793,9 +804,7 @@ window.onload = function()
|
|||||||
</script>
|
</script>
|
||||||
<?php
|
<?php
|
||||||
} // end print case
|
} // end print case
|
||||||
} // end rows returned
|
} // end rows returned
|
||||||
|
|
||||||
} // end executes the query
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays the footer
|
* Displays the footer
|
||||||
|
@@ -165,7 +165,9 @@ if ($abort == FALSE) {
|
|||||||
$selected_cnt = count($selected);
|
$selected_cnt = count($selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: optimize in case of multiple fields to modify
|
/**
|
||||||
|
* @todo optimize in case of multiple fields to modify
|
||||||
|
*/
|
||||||
for ($i = 0; $i < $selected_cnt; $i++) {
|
for ($i = 0; $i < $selected_cnt; $i++) {
|
||||||
if (!empty($submit_mult)) {
|
if (!empty($submit_mult)) {
|
||||||
$field = PMA_sqlAddslashes(urldecode($selected[$i]), TRUE);
|
$field = PMA_sqlAddslashes(urldecode($selected[$i]), TRUE);
|
||||||
@@ -184,8 +186,10 @@ if ($abort == FALSE) {
|
|||||||
// but later, if the analyser returns more information, it
|
// but later, if the analyser returns more information, it
|
||||||
// could be executed for any MySQL version and replace
|
// could be executed for any MySQL version and replace
|
||||||
// the info given by SHOW FULL FIELDS FROM.
|
// the info given by SHOW FULL FIELDS FROM.
|
||||||
// TODO: put this code into a require()
|
/**
|
||||||
// or maybe make it part of PMA_DBI_get_fields();
|
* @todo put this code into a require()
|
||||||
|
* or maybe make it part of PMA_DBI_get_fields();
|
||||||
|
*/
|
||||||
|
|
||||||
// We also need this to correctly learn if a TIMESTAMP is NOT NULL, since
|
// We also need this to correctly learn if a TIMESTAMP is NOT NULL, since
|
||||||
// SHOW FULL FIELDS says NULL and SHOW CREATE TABLE says NOT NULL (tested
|
// SHOW FULL FIELDS says NULL and SHOW CREATE TABLE says NOT NULL (tested
|
||||||
|
@@ -80,7 +80,9 @@ if (!empty($disp_message)) {
|
|||||||
if (empty($goto)) {
|
if (empty($goto)) {
|
||||||
$goto = 'db_details.php';
|
$goto = 'db_details.php';
|
||||||
}
|
}
|
||||||
// TODO: check if we could replace by "db_details|tbl"
|
/**
|
||||||
|
* @todo check if we could replace by "db_details|tbl"
|
||||||
|
*/
|
||||||
if (!preg_match('@^(db_details|tbl_properties|tbl_select|tbl_import)@', $goto)) {
|
if (!preg_match('@^(db_details|tbl_properties|tbl_select|tbl_import)@', $goto)) {
|
||||||
$err_url = $goto . "?" . PMA_generate_common_url($db) . "&sql_query=" . urlencode($sql_query);
|
$err_url = $goto . "?" . PMA_generate_common_url($db) . "&sql_query=" . urlencode($sql_query);
|
||||||
} else {
|
} else {
|
||||||
@@ -808,7 +810,10 @@ foreach ($loop_array AS $vrowcount => $vrow) {
|
|||||||
echo '<input type="file" name="fields_upload_' . urlencode($field) . $vkey . '" class="textfield" id="field_' . ($idindex) . '_3" size="10" /> ';
|
echo '<input type="file" name="fields_upload_' . urlencode($field) . $vkey . '" class="textfield" id="field_' . ($idindex) . '_3" size="10" /> ';
|
||||||
|
|
||||||
// find maximum upload size, based on field type
|
// find maximum upload size, based on field type
|
||||||
// FIXME: with functions this is not so easy, as you can basically process any data with function like MD5
|
/**
|
||||||
|
* @todo with functions this is not so easy, as you can basically
|
||||||
|
* process any data with function like MD5
|
||||||
|
*/
|
||||||
$max_field_sizes = array(
|
$max_field_sizes = array(
|
||||||
'tinyblob' => '256',
|
'tinyblob' => '256',
|
||||||
'blob' => '65536',
|
'blob' => '65536',
|
||||||
|
@@ -220,10 +220,12 @@ foreach ($the_tables as $key => $table) {
|
|||||||
// here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the
|
// here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the
|
||||||
// NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
|
// NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
|
||||||
// the latter.
|
// the latter.
|
||||||
// TODO: merge this logic with the one in tbl_properties_structure.php
|
/**
|
||||||
// or move it in a function similar to PMA_DBI_get_columns_full()
|
* @todo merge this logic with the one in tbl_properties_structure.php
|
||||||
// but based on SHOW CREATE TABLE because information_schema
|
* or move it in a function similar to PMA_DBI_get_columns_full()
|
||||||
// cannot be trusted in this case (MySQL bug)
|
* but based on SHOW CREATE TABLE because information_schema
|
||||||
|
* cannot be trusted in this case (MySQL bug)
|
||||||
|
*/
|
||||||
if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
|
if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
|
||||||
$row['Null'] = '';
|
$row['Null'] = '';
|
||||||
}
|
}
|
||||||
|
@@ -276,8 +276,9 @@ if ($total_affected_rows != 0) {
|
|||||||
$message .= $last_message;
|
$message .= $last_message;
|
||||||
|
|
||||||
if (!empty($warning_message)) {
|
if (!empty($warning_message)) {
|
||||||
// TODO: use a <div class="warning"> in PMA_showMessage()
|
/**
|
||||||
// for this part of the message
|
* @todo use a <div class="warning"> in PMA_showMessage() for this part of the message
|
||||||
|
*/
|
||||||
$message .= '[br]' . $warning_message;
|
$message .= '[br]' . $warning_message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user