From 381e172fcc5913528b058e6af5d95c594bfa51e1 Mon Sep 17 00:00:00 2001 From: Piotr Przybylski Date: Fri, 5 Aug 2011 18:13:03 +0200 Subject: [PATCH] Synchronize: * Detect Drizzle servers * disallow connections with incompatible protocols, these can't work with DBI functions defined in global namespace --- server_synchronize.php | 45 +++++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/server_synchronize.php b/server_synchronize.php index 3e57f441a0..f2b0bd3035 100644 --- a/server_synchronize.php +++ b/server_synchronize.php @@ -109,6 +109,8 @@ if ((isset($_REQUEST['submit_connect']))) { ${"{$con}_link"} = null; } ${"{$con}_db_selected"} = PMA_DBI_select_db(${"{$con}_db"}, ${"{$con}_link"}); + ${"{$con}_version"} = PMA_DBI_fetch_value('SELECT VERSION()', 0, 0, ${"{$con}_link"}); + ${"{$con}_is_drizzle"} = (bool)preg_match('/\d{4}\./', ${"{$con}_version"}); } // end foreach ($cons as $con) if (($src_db_selected != 1) || ($trg_db_selected != 1)) { @@ -928,16 +930,24 @@ if (isset($_REQUEST['synchronize_db'])) { */ if ('cur' != $_SESSION['src_type']) { $src_link = PMA_DBI_connect($src_username, $src_password, $is_controluser = false, $_SESSION['src_server']); + $src_version = PMA_DBI_fetch_value('SELECT VERSION()', 0, 0, $src_link); + $src_is_drizzle = (bool)preg_match('/\d{4}\./', $src_version); } else { $src_link = $GLOBALS['userlink']; + $src_version = PMA_MYSQL_STR_VERSION; + $src_is_drizzle = PMA_DRIZZLE; // working on current server, so initialize this for tracking // (does not work if user defined current server as a remote one) $GLOBALS['db'] = $_SESSION['src_db']; } if ('cur' != $_SESSION['trg_type']) { $trg_link = PMA_DBI_connect($trg_username, $trg_password, $is_controluser = false, $_SESSION['trg_server']); + $trg_version = PMA_DBI_fetch_value('SELECT VERSION()', 0, 0, $trg_link); + $trg_is_drizzle = (bool)preg_match('/\d{4}\./', $trg_version); } else { $trg_link = $GLOBALS['userlink']; + $trg_version = PMA_MYSQL_STR_VERSION; + $trg_is_drizzle = PMA_DRIZZLE; // working on current server, so initialize this for tracking $GLOBALS['db'] = $_SESSION['trg_db']; } @@ -1082,6 +1092,7 @@ if (isset($_REQUEST['synchronize_db'])) { } echo '>' . __('Current connection') . ''; + $loaded_dbi = $GLOBALS['cfg']['Server']['extension']; foreach ($GLOBALS['cfg']['Servers'] as $key => $tmp_server) { if (empty($tmp_server['host'])) { continue; @@ -1095,20 +1106,30 @@ if (isset($_REQUEST['synchronize_db'])) { $label .= ':' . $tmp_server['port']; } } - $value = $tmp_server['host']; - $value .= '||||'; - if (empty($tmp_server['port']) && empty($tmp_server['socket'])) { - $value .= '3306'; + + if ($loaded_dbi == 'drizzle' && $tmp_server['extension'] != 'drizzle' + || $loaded_dbi != 'drizzle' && $tmp_server['extension'] == 'drizzle') { + // incompatible connection protocols + $disabled = ' disabled="disabled"'; + $value = ''; } else { - $value .= $tmp_server['port']; + $disabled = ''; + $value = $tmp_server['host']; + $value .= '||||'; + if (empty($tmp_server['port']) && empty($tmp_server['socket'])) { + $value .= '3306'; + } else { + $value .= $tmp_server['port']; + } + $value .= '||||'; + $value .= $tmp_server['socket']; + $value .= '||||'; + $value .= $tmp_server['user']; + $value .= '||||'; + $value .= $tmp_server['only_db']; } - $value .= '||||'; - $value .= $tmp_server['socket']; - $value .= '||||'; - $value .= $tmp_server['user']; - $value .= '||||'; - $value .= $tmp_server['only_db']; - echo ''; } // end foreach ?> -- 2.11.4.GIT