Merge remote branch 'scnakandala/gsoc_2013'

This commit is contained in:
Marc Delisle 2013-07-07 13:59:21 -04:00
commit f12e4494eb
3 changed files with 190 additions and 147 deletions

View File

@ -66,7 +66,7 @@ function getFieldName($this_field)
* Unbind all event handlers before tearing down a page
*/
AJAX.registerTeardown('sql.js', function () {
$('a.delete_row.ajax').unbind('click');
$('a.delete_row.ajax').die('click');
$('#bookmarkQueryForm').die('submit');
$('input#bkm_label').unbind('keyup');
$("#sqlqueryresults").die('makegrid');
@ -104,7 +104,7 @@ AJAX.registerTeardown('sql.js', function () {
*/
AJAX.registerOnload('sql.js', function () {
// Delete row from SQL results
$('a.delete_row.ajax').click(function (e) {
$('a.delete_row.ajax').live('click',function (e) {
e.preventDefault();
var question = $.sprintf(PMA_messages.strDoYouReally, $(this).closest('td').find('div').text());
var $link = $(this);

View File

@ -1462,4 +1462,186 @@ function PMA_executeTheQuery($analyzed_sql_results, $full_sql_query, $is_gotofil
isset($justBrowsing) ? $justBrowsing : null, $extra_data
);
}
?>
/**
* Delete related tranformatioinformationn information
*
* @param String $db current database
* @param String $table current table
* @param array $analyzed_sql analyzed sql query
*
* @return void
*/
function PMA_deleteTransformationInfo($db, $table, $analyzed_sql)
{
include_once 'libraries/transformations.lib.php';
if ($analyzed_sql[0]['querytype'] == 'ALTER') {
if (stripos($analyzed_sql[0]['unsorted_query'], 'DROP') !== false) {
$drop_column = PMA_getColumnNameInColumnDropSql(
$analyzed_sql[0]['unsorted_query']
);
if ($drop_column != '') {
PMA_clearTransformations($db, $table, $drop_column);
}
}
} else if (($analyzed_sql[0]['querytype'] == 'DROP') && ($table != '')) {
PMA_clearTransformations($db, $table);
}
}
/**
* Function to get the message for the no rows returned case
*
* @param string $message_to_show message to show
* @param array $analyzed_sql_results analyzed sql results
* @param int $num_rows number of rows
*
* @return string $message
*/
function PMA_getMessageForNoRowsReturned($message_to_show, $analyzed_sql_results,
$num_rows
) {
if ($analyzed_sql_results['is_delete']) {
$message = PMA_Message::getMessageForDeletedRows($num_rows);
} elseif ($analyzed_sql_results['is_insert']) {
if ($analyzed_sql_results['is_replace']) {
// For replace we get DELETED + INSERTED row count,
// so we have to call it affected
$message = PMA_Message::getMessageForAffectedRows($num_rows);
} else {
$message = PMA_Message::getMessageForInsertedRows($num_rows);
}
$insert_id = $GLOBALS['dbi']->insertId();
if ($insert_id != 0) {
// insert_id is id of FIRST record inserted in one insert,
// so if we inserted multiple rows, we had to increment this
$message->addMessage('[br]');
// need to use a temporary because the Message class
// currently supports adding parameters only to the first
// message
$_inserted = PMA_Message::notice(__('Inserted row id: %1$d'));
$_inserted->addParam($insert_id + $num_rows - 1);
$message->addMessage($_inserted);
}
} elseif ($analyzed_sql_results['is_affected']) {
$message = PMA_Message::getMessageForAffectedRows($num_rows);
// Ok, here is an explanation for the !$is_select.
// The form generated by sql_query_form.lib.php
// and db_sql.php has many submit buttons
// on the same form, and some confusion arises from the
// fact that $message_to_show is sent for every case.
// The $message_to_show containing a success message and sent with
// the form should not have priority over errors
} elseif (! empty($message_to_show) && ! $analyzed_sql_results['is_select']) {
$message = PMA_Message::rawSuccess(htmlspecialchars($message_to_show));
} elseif (! empty($GLOBALS['show_as_php'])) {
$message = PMA_Message::success(__('Showing as PHP code'));
} elseif (isset($GLOBALS['show_as_php'])) {
/* User disable showing as PHP, query is only displayed */
$message = PMA_Message::notice(__('Showing SQL query'));
} elseif (! empty($GLOBALS['validatequery'])) {
$message = PMA_Message::notice(__('Validated SQL'));
} else {
$message = PMA_Message::success(
__('MySQL returned an empty result set (i.e. zero rows).')
);
}
if (isset($GLOBALS['querytime'])) {
$_querytime = PMA_Message::notice('(' . __('Query took %01.4f sec') . ')');
$_querytime->addParam($GLOBALS['querytime']);
$message->addMessage($_querytime);
}
return $message;
}
/**
* Function to send the Ajax response when no rows returned
*
* @param string $message message to be send
* @param array $analyzed_sql analyzed sql
* @param object $displayResultsObject DisplayResult instance
* @param bool $showSql whether to show sql or not
* @param array $extra_data extra data
*
* @return void
*/
function PMA_sendAjaxResponseForNoResultsReturned($message, $analyzed_sql,
$displayResultsObject, $showSql, $extra_data
) {
if ($showSql) {
$extra_data['sql_query'] = PMA_Util::getMessage(
$message, $GLOBALS['sql_query'], 'success'
);
}
if (isset($GLOBALS['reload']) && $GLOBALS['reload'] == 1) {
$extra_data['reload'] = 1;
$extra_data['db'] = $GLOBALS['db'];
}
$response = PMA_Response::getInstance();
$response->isSuccess($message->isSuccess());
// No need to manually send the message
// The Response class will handle that automatically
$query__type = PMA_DisplayResults::QUERY_TYPE_SELECT;
if ($analyzed_sql[0]['querytype'] == $query__type) {
$createViewHTML = $displayResultsObject->getCreateViewQueryResultOp(
$analyzed_sql
);
$response->addHTML($createViewHTML.'<br />');
}
$response->addJSON(isset($extra_data) ? $extra_data : array());
if (empty($_REQUEST['ajax_page_request'])) {
$response->addJSON('message', $message);
exit;
}
}
/**
* Function to respond back when the query returns zero rows
* This method is called when
* 1-> When browsing an empty table
* 2-> When executing a query on a non empty table which returns zero results
* 3-> When executing a query on an empty table
* 4-> When executing an INSERT, UPDATE, DEDETE query from the SQL tab
* 5-> When deleting a row from BROWSE tab
* 6-> When searching using the SEARCH tab which returns zero results
* 7-> When changing the structure of the table except change operation
*
* @param array $analyzed_sql_results analyzed sql results
* @param string $db current database
* @param string $table current table
* @param string $message_to_show message to show
* @param int $num_rows number of rows
* @param object $displayResultsObject DisplayResult instance
* @param array $extra_data extra data
* @param array $cfg configuration
*
* @return void
*/
function PMA_sendResponseForNoResultsReturned($analyzed_sql_results, $db, $table,
$message_to_show, $num_rows, $displayResultsObject, $extra_data, $cfg
) {
if (PMA_isDeleteTransformationInfo($analyzed_sql_results)) {
PMA_deleteTransformationInfo(
$db, $table, $analyzed_sql_results['analyzed_sql']
);
}
$message = PMA_getMessageForNoRowsReturned(
isset($message_to_show) ? $message_to_show : null, $analyzed_sql_results,
$num_rows
);
if ($GLOBALS['is_ajax_request'] == true) {
PMA_sendAjaxResponseForNoResultsReturned($message,
$analyzed_sql_results['analyzed_sql'],
$displayResultsObject, $cfg['ShowSQL'],
isset($extra_data) ? $extra_data : null
);
}
exit();
}
?>

149
sql.php
View File

@ -222,150 +222,11 @@ list($result, $num_rows, $unlim_num_rows, $profiling_results,
// No rows returned -> move back to the calling page
if ((0 == $num_rows && 0 == $unlim_num_rows) || $is_affected) {
// Delete related tranformation information
if (PMA_isDeleteTransformationInfo($analyzed_sql_results)) {
include_once 'libraries/transformations.lib.php';
if ($analyzed_sql[0]['querytype'] == 'ALTER') {
if (stripos($analyzed_sql[0]['unsorted_query'], 'DROP') !== false) {
$drop_column = PMA_getColumnNameInColumnDropSql(
$analyzed_sql[0]['unsorted_query']
);
if ($drop_column != '') {
PMA_clearTransformations($db, $table, $drop_column);
}
}
} else if (($analyzed_sql[0]['querytype'] == 'DROP') && ($table != '')) {
PMA_clearTransformations($db, $table);
}
}
if ($is_delete) {
$message = PMA_Message::getMessageForDeletedRows($num_rows);
} elseif ($is_insert) {
if ($is_replace) {
// For replace we get DELETED + INSERTED row count,
// so we have to call it affected
$message = PMA_Message::getMessageForAffectedRows($num_rows);
} else {
$message = PMA_Message::getMessageForInsertedRows($num_rows);
}
$insert_id = $GLOBALS['dbi']->insertId();
if ($insert_id != 0) {
// insert_id is id of FIRST record inserted in one insert,
// so if we inserted multiple rows, we had to increment this
$message->addMessage('[br]');
// need to use a temporary because the Message class
// currently supports adding parameters only to the first
// message
$_inserted = PMA_Message::notice(__('Inserted row id: %1$d'));
$_inserted->addParam($insert_id + $num_rows - 1);
$message->addMessage($_inserted);
}
} elseif ($is_affected) {
$message = PMA_Message::getMessageForAffectedRows($num_rows);
// Ok, here is an explanation for the !$is_select.
// The form generated by sql_query_form.lib.php
// and db_sql.php has many submit buttons
// on the same form, and some confusion arises from the
// fact that $message_to_show is sent for every case.
// The $message_to_show containing a success message and sent with
// the form should not have priority over errors
} elseif (! empty($message_to_show) && ! $is_select) {
$message = PMA_Message::rawSuccess(htmlspecialchars($message_to_show));
} elseif (! empty($GLOBALS['show_as_php'])) {
$message = PMA_Message::success(__('Showing as PHP code'));
} elseif (isset($GLOBALS['show_as_php'])) {
/* User disable showing as PHP, query is only displayed */
$message = PMA_Message::notice(__('Showing SQL query'));
} elseif (! empty($GLOBALS['validatequery'])) {
$message = PMA_Message::notice(__('Validated SQL'));
} else {
$message = PMA_Message::success(
__('MySQL returned an empty result set (i.e. zero rows).')
);
}
if (isset($GLOBALS['querytime'])) {
$_querytime = PMA_Message::notice('(' . __('Query took %01.4f sec') . ')');
$_querytime->addParam($GLOBALS['querytime']);
$message->addMessage($_querytime);
}
if ($GLOBALS['is_ajax_request'] == true) {
if ($cfg['ShowSQL']) {
$extra_data['sql_query'] = PMA_Util::getMessage(
$message, $GLOBALS['sql_query'], 'success'
);
}
if (isset($GLOBALS['reload']) && $GLOBALS['reload'] == 1) {
$extra_data['reload'] = 1;
$extra_data['db'] = $GLOBALS['db'];
}
$response = PMA_Response::getInstance();
$response->isSuccess($message->isSuccess());
// No need to manually send the message
// The Response class will handle that automatically
$query__type = PMA_DisplayResults::QUERY_TYPE_SELECT;
if ($analyzed_sql[0]['querytype'] == $query__type) {
$createViewHTML = $displayResultsObject->getCreateViewQueryResultOp(
$analyzed_sql
);
$response->addHTML($createViewHTML.'<br />');
}
$response->addJSON(isset($extra_data) ? $extra_data : array());
if (empty($_REQUEST['ajax_page_request'])) {
$response->addJSON('message', $message);
exit;
}
}
if ($is_gotofile) {
$goto = PMA_securePath($goto);
// Checks for a valid target script
$is_db = $is_table = false;
if (isset($_REQUEST['purge']) && $_REQUEST['purge'] == '1') {
$table = '';
unset($url_params['table']);
}
include 'libraries/db_table_exists.lib.php';
if (strpos($goto, 'tbl_') === 0 && ! $is_table) {
if (strlen($table)) {
$table = '';
}
$goto = 'db_sql.php';
}
if (strpos($goto, 'db_') === 0 && ! $is_db) {
if (strlen($db)) {
$db = '';
}
$goto = 'index.php';
}
// Loads to target script
if (strlen($goto) > 0) {
$active_page = $goto;
include '' . $goto;
} else {
// Echo at least one character to prevent showing last page from history
echo " ";
}
} else {
// avoid a redirect loop when last record was deleted
if (0 == $num_rows && 'sql.php' == $cfg['DefaultTabTable']) {
$goto = str_replace('sql.php', 'tbl_structure.php', $goto);
}
PMA_sendHeaderLocation(
$cfg['PmaAbsoluteUri'] . str_replace('&amp;', '&', $goto)
. '&message=' . urlencode($message)
);
} // end else
exit();
// end no rows returned
PMA_sendResponseForNoResultsReturned($analyzed_sql_results, $db, $table,
isset($message_to_show) ? $message_to_show : null,
$num_rows, $displayResultsObject, $extra_data, $cfg
);
} else {
$html_output='';
// At least one row is returned -> displays a table with results