Hi Rouslan,
> > I recently involved in fixing bug [0]. While fixing it, I was
bit
> confused that, PMA renders user input as it is while inline
editing,
> without getting real value saved in database. Yes, PMA do this
after
> checking the result of query execution function. But though
result is
> not an error, it doesn't mean that data is saved as it was. Mainly this > happens with numeric fields. Just type decimal value for column
with
> integer type and see what happens after refresh. As mentioned
bug
> description, MySQL truncate numeric data (not sure about other
data
> types) without noticing. > > Of course checking again the saved value is cost. But it's
really
odd to > see a less precise data, represent the real data. I think it's better to > clearly identify the data types, with or without having this behaviour. > So that, we can only recheck needed columns. > > When introducing inline edit functionality, this may have been > discussed. But I think better to discuss again. What do you
think ?
It sounds quite simple to me, so not sure if I'm missing something
here.
Anyway, we could just check if any warnings were generated by the
query
(mysql_warning_count or similar function). If yes, then select the
value
and send it to the client along with the response. Right?
Rouslan, Yeah, there are functions to detect warnings. But unfortunately this kind of queries doesn't throw warnings. As I mentioned MySQL doesn't notice about the data truncation.
You absolutely sure? Because to me it looks like MySQL *is* throwing warnings. See this:
I'm using MySQL 5.5.15 . I tried in my local database table( with auto incremented id field) the mentioned queries. But I get errors. But with sakila db, I could run those.
Anyway I'm talking about the inline edit. And there are situations that, you can't do update existing field with inappropriate values using PMA inline edit.
mysql> use sakila; Database changed
mysql> insert into actor (actor_id, first_name, last_name) values ("foo","bar","baz"); Query OK, 1 row affected, 1 warning (0.00 sec)
This success due to field is *auto increment*. Anyway you can't do this with inline edit.
mysql> insert into actor (actor_id, first_name, last_name) values (99999999,"bar","baz"); Query OK, 1 row affected, 1 warning (0.00 sec)
Yeah, this happens regardless of auto increment or not. Can do with inline edit. (I don't know why I couldn't execute this with my local db, may be due to version :( )
And how about another example with non-numerics:
mysql> insert into actor (actor_id, first_name, last_name) values
(999,"baraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","baz"); Query OK, 1 row affected, 1 warning (0.01 sec)
Query is okay. This can't do with inline edit.
mysql> show warnings; +---------+------+-------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------+ | Warning | 1265 | Data truncated for column 'first_name' at row 1 | +---------+------+-------------------------------------------------+ 1 row in set (0.00 sec)
Bye, Rouslan
I'll do this (re checking and return saved value) only for numeric since identified only those. Any objections ?
Just try with decimal values for int or smallint columns. Those doesn't throw warnings. And as you mentioned sometimes it throws. But still not the non-numerics with inline edit. 1. So I think it's better to recheck numeric fields as I already suggested.
2. Best solution is to recheck any column which can inline edit.
Any ideas on using 1,2 or any other criteria ?
Regards !