I think that's handy. Dropping cross-db compartibility is bad indeed,
but you just need to have a big warning in the place where user have
to make that choice.

Also - I don't think that you can safely replace ' with " on pickled
object. Most likely you are ruining it. Either proper sql escaping
should be introduced or better yet - base64 encoding. If I am not
mistaken - pickled objects are binary.

On May 25, 9:17 am, mdipierro <[email protected]> wrote:
> I do not know if this is a good idea and I'd like to hear your
> opinions:
> I have added in trunk to define custom column types
>
> Here is an example of usage:
>
> import cPickle
> from gluon.sql import SQLCustomType
> from decimal import Decimal
>
> decimal = SQLCustomType(native='NUMERIC(10,2)',decoder=(lambda x:
> Decimal(str(x))))
>
> pickable = SQLCustomType(type='text',encoder=(lambda x:
> "'%s'"%cPickle.dumps(x).replace("'","''")),decoder=(lambda x:
> cPickle.loads(x)))
>
> db.define_table('test',
>    SQLField('my_decimal',type=decimal),
>    SQLField('my_pickle',type=pickable))
>
> the SQLCustomType constructor takes the following arguments:
> - type indicates how web2py sqlform should treat this field
> - native indicates how the database should treat this field
> - encoder indicates how to represent (and escape) a value in SQL
> - decoder indicates how to process the value once it is extracted from
> the database
>
> It seems to work well with migrations. Of course using native=....
> makes the custom table not portable across databases.
>
> The implementation is not very clean but can be improved.
>
> Is this a good idea?
>
> Massimo
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to