[Phpmyadmin-devel] About the transformation feature
Isaac Bennetch
bennetch at gmail.com
Fri Jul 11 16:08:14 CEST 2014
On 7/9/14, 1:37 PM, Hugues Peccatte wrote:
> 2014-07-09 17:34 GMT+02:00 Isaac Bennetch <bennetch at gmail.com
> <mailto:bennetch at gmail.com>>:
>
> Hello,
>
> In the course of my testing the new input transformation feature, I've
> encountered some trouble that Chirayu is unable to reproduce. We've had
> a bit of discussion privately about it, but wanted to move discussion
> back to the mailing list.
>
> Note that running his branch[1] will change your pma__column_info table
> structure; so you may wish to back it up for testing purposes.
>
> The problem at the moment is the automatic table upgrade feature. What
> is supposed to happen is that, when logging in,
> PMA_checkRelationsParam() verifies that the correct table structure
> exists for pma__column_info. If it doesn't, it attempts to run
> ./examples/upgrade_column_info_4_3_0+.sql (after substituting the
> correct database and table names if needed). This is all quite good.
>
> On my system, what happens, however, is that
>
> $GLOBALS['dbi']->tryMultiQuery($query, $GLOBALS['controllink'])
>
> doesn't work. It returns 1 (which I presume is just how print_r
> represents TRUE), but the query doesn't execute ($query in this case is
> essentially the contents of the .sql file; several SQL statements with
> semicolons and newline characters and a few comments). It works properly
> on Chirayu's system but silently fails on mine.
>
> I'm hoping to get additional testing on the "silent upgrade" feature
> (or, for that matter, thoughts about the problem). At this point, I'm
> the only one for whom it fails, which is quite interesting. To test,
> simply checkout the branch and open phpMyAdmin, then check your
> pma__column_info table; it should have two new columns at the end
> (input_*).
>
> Thanks!
>
> Some more detailed information if you really want to read on:
>
> Around line 610, instead of directly testing the result of the
> tryMultiQuery in the if statement, I assign it to a variable then
> print_r that variable and get a message about "Commands out of sync; you
> can't run this command now".
>
> $ipb_test = $GLOBALS['dbi']->tryMultiQuery($query,
> $GLOBALS['controllink'] );
> die("<pre>" . print_r($GLOBALS['controllink']) . "</pre>");
> if ($ipb_test !== false ) {
> return true;
>
> mysqli Object ( [affected_rows] => 0 [client_info] => 5.5.37
> [client_version] => 50537 [connect_errno] => 0 [connect_error] =>
> [errno] => 0 [error] => [error_list] => Array ( ) [field_count] => 0
> [host_info] => Localhost via UNIX socket [info] => [insert_id] => 0
> [server_info] => 5.5.37-0+wheezy1 [server_version] => 50537 [stat] =>
> Commands out of sync; you can't run this command now [sqlstate] => HY000
> [protocol_version] => 10 [thread_id] => 6069 [warning_count] => 0 )
>
> I'm not familiar enough with tryMultiQuery to know why [stat] contains
> this message.
>
> According to [2], it appears as if there is a problem with executing the
> code because either we haven't used mysql_free_result() or
> mysql_use_result() or mysql_store_result() since a previous query.
>
> We've looked at mysqli_multi_query()
> (http://www.php.net/manual/en/mysqli.multi-query.php), which
> is called by tryMultiQuery() depending on your DBI Extension (mine
> is mysqli). It says that it returns false when First statement is
> failed. See the return values section of it.
>
> Note that my mysqli object claims 0 rows were affected but also didn't
> return false. I expect that the 87 rows in my pma__column_info would
> have been affected by the first line (ALTER...).
>
> 1 - https://github.com/D-storm/phpmyadmin/commits/FR-637
> 2 - https://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html
>
>
> Hi,
>
> It seems that I found the same information while reading your email and
> doing some research on internet about mysqli_multi_query and its return.
> So maybe we need to improve PMA_DBI_Mysqli::realMultiQuery to return the
> real error status.
>
> But first maybe, you can try something like this in this method (I
> didn't test it…):
> if ($r = mysqli_multi_query($link, $query)) {
> do {
> if ($result = mysqli_store_result($link)) {
> echo 'ok.<br />';
> mysqli_free_result($result);
> } else {
> $r = false;
> echo 'KO<br />'; //Do you know a way get the query here? I
> didn't find one…
> }
> } while (mysqli_next_result($link));
> }
> return $r;
I go through the 'else' portion here (it loops five times), but I
haven't yet found a way to get any more complete picture of what's going on.
> Then, you'll know the query which failed.
>
> We're waiting for your feedback. (I'll try… to try…)
> Hugues.
>
>
> ------------------------------------------------------------------------------
> Open source business process management suite built on Java and Eclipse
> Turn processes into business applications with Bonita BPM Community Edition
> Quickly connect people, data, and systems into organized workflows
> Winner of BOSSIE, CODIE, OW2 and Gartner awards
> http://p.sf.net/sfu/Bonitasoft
>
>
>
> _______________________________________________
> Phpmyadmin-devel mailing list
> Phpmyadmin-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/phpmyadmin-devel
>
More information about the Developers
mailing list