The main problem is that the failure is silent.  It makes no sense that a 
developer declares a field to be length 1000, and DAL arbitrarily reduces 
that to 255 instead of providing an error message.  I understand why 255 
may be a safe default limit for MySQL; but if so then fail the field 
creation with a relevant error message (and maybe reference Jonathan's 
solution re: how to override maxcharlength if the developer knows the DBMS 
version can handle the larger limit).

In the current 2.5.1 code, looking in dal.py:

class MySQLAdapter(BaseAdapter):
    ....
    maxcharlength = 255

...

class Table(object):
    ...
    def __init__(        self,
        db,
        tablename,
        *fields,
        **args
        ):
        ...
        for field in fields:
            ...
            if db and not field.type in ('text', 'blob', 'json') and \
                    db._adapter.maxcharlength < field.length:
                field.length = db._adapter.maxcharlength   ### problem line


I'd recommend the last line above, marked ### problem line, be replaced 
with something like, raise ValueError('Requested field length exceeds 
adapter maxcharlength, cannot create.  See http://whatever for a way to 
override this limit.')

??

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to