Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2013-12-29 12:35:31 +01:00
commit 46b2a96f09
2 changed files with 119 additions and 90 deletions

View File

@ -372,97 +372,13 @@ if (!defined('TESTSUITE')) {
*/
// Gets the number of tables if a dump of a database has been required
if ($export_type == 'server') {
if (isset($db_select)) {
$tmp_select = implode($db_select, '|');
$tmp_select = '|' . $tmp_select . '|';
}
// Walk over databases
foreach ($GLOBALS['pma']->databases as $current_db) {
if (isset($tmp_select)
&& strpos(' ' . $tmp_select, '|' . $current_db . '|')
) {
if (! $export_plugin->exportDBHeader($current_db)) {
break 2;
}
if (! $export_plugin->exportDBCreate($current_db)) {
break 2;
}
if (method_exists($export_plugin, 'exportRoutines')
&& strpos($whatStrucOrData, 'structure') !== false
&& isset($GLOBALS['sql_procedure_function'])
) {
$export_plugin->exportRoutines($current_db);
}
$tables = $GLOBALS['dbi']->getTables($current_db);
$views = array();
foreach ($tables as $table) {
// if this is a view, collect it for later;
// views must be exported after the tables
$is_view = PMA_Table::isView($current_db, $table);
if ($is_view) {
$views[] = $table;
}
if ($whatStrucOrData == 'structure'
|| $whatStrucOrData == 'structure_and_data'
) {
// for a view, export a stand-in definition of the table
// to resolve view dependencies
if (! $export_plugin->exportStructure(
$current_db, $table, $crlf, $err_url,
$is_view ? 'stand_in' : 'create_table', $export_type,
$do_relation, $do_comments, $do_mime, $do_dates
)) {
break 3;
}
}
// if this is a view or a merge table, don't export data
if (($whatStrucOrData == 'data'
|| $whatStrucOrData == 'structure_and_data')
&& ! ($is_view || PMA_Table::isMerge($current_db, $table))
) {
$local_query = 'SELECT * FROM '
. PMA_Util::backquote($current_db)
. '.' . PMA_Util::backquote($table);
if (! $export_plugin->exportData(
$current_db, $table, $crlf, $err_url, $local_query
)) {
break 3;
}
}
// now export the triggers (needs to be done after the data
// because triggers can modify already imported tables)
if ($whatStrucOrData == 'structure'
|| $whatStrucOrData == 'structure_and_data'
) {
if (! $export_plugin->exportStructure(
$current_db, $table, $crlf, $err_url,
'triggers', $export_type,
$do_relation, $do_comments, $do_mime, $do_dates
)) {
break 2;
}
}
}
foreach ($views as $view) {
// no data export for a view
if ($whatStrucOrData == 'structure'
|| $whatStrucOrData == 'structure_and_data'
) {
if (! $export_plugin->exportStructure(
$current_db, $view, $crlf, $err_url,
'create_view', $export_type,
$do_relation, $do_comments, $do_mime, $do_dates
)) {
break 3;
}
}
}
if (! $export_plugin->exportDBFooter($current_db)) {
break 2;
}
}
if (! isset($db_select)) {
$db_select = '';
}
PMA_exportServer(
$db_select, $whatStrucOrData, $export_plugin, $crlf, $err_url,
$export_type, $do_relation, $do_comments, $do_mime, $do_dates
);
} elseif ($export_type == 'database') {
if (! $export_plugin->exportDBHeader($db)) {
break;

View File

@ -445,4 +445,117 @@ function PMA_getHtmlForDisplayedExportHeader($export_type, $db, $table)
return array($html, $back_button);
}
/**
* Export at the server level
*
* @param string $db_select the selected databases to export
* @param string $whatStrucOrData structure or data or both
* @param object $export_plugin the selected export plugin
* @param string $crlf end of line character(s)
* @param string $err_url the URL in case of error
* @param string $export_type the export type
* @param string $do_relation whether to export relation info
* @param string $do_comments whether to add comments
* @param string $do_mime whether to add MIME info
* @param string $do_dates whether to add dates
*
* @return void
*/
function PMA_exportServer(
$db_select, $whatStrucOrData, $export_plugin, $crlf, $err_url,
$export_type, $do_relation, $do_comments, $do_mime, $do_dates
) {
if (! empty($db_select)) {
$tmp_select = implode($db_select, '|');
$tmp_select = '|' . $tmp_select . '|';
}
// Walk over databases
foreach ($GLOBALS['pma']->databases as $current_db) {
if (isset($tmp_select)
&& strpos(' ' . $tmp_select, '|' . $current_db . '|')
) {
if (! $export_plugin->exportDBHeader($current_db)) {
break 2;
}
if (! $export_plugin->exportDBCreate($current_db)) {
break 2;
}
if (method_exists($export_plugin, 'exportRoutines')
&& strpos($whatStrucOrData, 'structure') !== false
&& isset($GLOBALS['sql_procedure_function'])
) {
$export_plugin->exportRoutines($current_db);
}
$tables = $GLOBALS['dbi']->getTables($current_db);
$views = array();
foreach ($tables as $table) {
// if this is a view, collect it for later;
// views must be exported after the tables
$is_view = PMA_Table::isView($current_db, $table);
if ($is_view) {
$views[] = $table;
}
if ($whatStrucOrData == 'structure'
|| $whatStrucOrData == 'structure_and_data'
) {
// for a view, export a stand-in definition of the table
// to resolve view dependencies
if (! $export_plugin->exportStructure(
$current_db, $table, $crlf, $err_url,
$is_view ? 'stand_in' : 'create_table', $export_type,
$do_relation, $do_comments, $do_mime, $do_dates
)) {
break 3;
}
}
// if this is a view or a merge table, don't export data
if (($whatStrucOrData == 'data'
|| $whatStrucOrData == 'structure_and_data')
&& ! ($is_view || PMA_Table::isMerge($current_db, $table))
) {
$local_query = 'SELECT * FROM '
. PMA_Util::backquote($current_db)
. '.' . PMA_Util::backquote($table);
if (! $export_plugin->exportData(
$current_db, $table, $crlf, $err_url, $local_query
)) {
break 3;
}
}
// now export the triggers (needs to be done after the data
// because triggers can modify already imported tables)
if ($whatStrucOrData == 'structure'
|| $whatStrucOrData == 'structure_and_data'
) {
if (! $export_plugin->exportStructure(
$current_db, $table, $crlf, $err_url,
'triggers', $export_type,
$do_relation, $do_comments, $do_mime, $do_dates
)) {
break 2;
}
}
}
foreach ($views as $view) {
// no data export for a view
if ($whatStrucOrData == 'structure'
|| $whatStrucOrData == 'structure_and_data'
) {
if (! $export_plugin->exportStructure(
$current_db, $view, $crlf, $err_url,
'create_view', $export_type,
$do_relation, $do_comments, $do_mime, $do_dates
)) {
break 3;
}
}
}
if (! $export_plugin->exportDBFooter($current_db)) {
break 2;
}
}
} // end foreach database
}
?>