On Tue, Jul 29, 2014 at 11:33 PM, Chirayu Chiripal <chirayu.chiripal@gmail.com> wrote:
On Tue, Jul 29, 2014 at 11:02 PM, Isaac Bennetch <bennetch@gmail.com> wrote:


On 7/29/14, 8:16 AM, Chirayu Chiripal wrote:
> On Tue, Jul 29, 2014 at 1:32 AM, Isaac Bennetch <bennetch@gmail.com
> <mailto:bennetch@gmail.com>> wrote:
>
>     Hi,
>
>     On 7/28/14, 1:30 PM, Chirayu Chiripal wrote:
>     > Hi,
>     >
>     > My GSoC task for this week is "Improved notification when
>     attempting to
>     > insert invalid data". I would like to know at which places
>     validation is
>     > required to be done?
>
>     The idea here is basically that if a user attempts to insert data that
>     will be truncated that we'll warn them. Some of this has already been
>     implemented (for instance, try to insert the text "foo" to a column of
>     type INT(10); the field turns red indicating a problem).
>
>     This can be enhanced, though, for instance the following scenarios do
>     not warn correctly:
>     * Insert 999 to a TINYINT
>     * Insert 99999999999 to an INT

One thing which I didn't knew was that JS can handle numbers upto 53 bits without loosing precision. But as soon as number goes beyond that, then some round off error tends to occur. As MySQL, can have integers upto 64 bits length, the JS number comparison will not work. So, I have written my own BigInts comparison function to compare them in string format itself.

>
>
> For integer types we can change our current input type="text" to input
> type="number" and specify a min and max value using attributes. Or, we
> still have to add a min and max value attribute and use
> Javascript/Jquery to validate the field when it loses focus or at keyup
> event.

I prefer a consistent experience for the user. Even though many browsers
would properly deal with input type="number", it will give different
feedback than our custom handling of, say, too many characters in a
varchar field. So I would like to be consistent and use our own tests
even for INT columns.

Okay, so we will use our own validation.
 

Note that in multibyte character sets, a single character may take
several bytes of data to store. I'm not sure whether it's easy to
correctly count bytes/characters in this case.

Yeah, this is an important thing to be taken care of. I am not sure whether Javascript supports it natively but there should some way to do it. MySQL documentation says that "MySQL interprets length specifications in character column definitions in character units." I am not sure that by character units they mean unicode "code points" or something else.

To test whether JS handles multibyte character strings length correctly, I compared the result of MySQL's CHAR_LENGTH(str) and JS's str.length with some random strings from different languages (Hindi, Gujarati, Chinese, Japanese) and the results were identical. So, I think we can rely on JS length property.
 


Another thought: we should allow the user to continue even if we don't
think the data they're entering is okay -- the input field should turn
red, but they should still be allowed to press the submit button and
allow MySQL to truncate.

Sure.