Actually I think it's easier ...

    conn = sql.connectionForURI(uri)

    if conn.dbName == 'sqlite':
        from sqlobject.sqlite.sqliteconnection import SQLiteConnection
        conn = SQLiteConnection(
            filename=conn.filename,
            name=conn.name, debug=conn.debug, debugOutput=conn.debugOutput,
            cache=conn.cache, style=conn.style, autoCommit=conn.autoCommit,
            debugThreading=conn.debugThreading, registry=conn.registry,
            factory=CustomSQLiteConnectionFactory
        )

and

def CustomSQLiteConnectionFactory(sqlite):
    class MyConnection(sqlite.Connection):
        def __init__(self, *args, **kwargs):
            super(MyConnection, self).__init__(*args, **kwargs)
            self.create_collation("debian", self.collate_debian)

        def collate_debian(obj,string1, string2):
            return Compare(string1, string2)

    return MyConnection

where obj is:

['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 
'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 
'Warning', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', 
'__getattribute__', '__hash__', '__init__', '__module__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 
'__weakref__', 'close', 'collate_debian', 'commit', 'create_aggregate', 
'create_collation', 'create_function', 'cursor', 'execute', 'executemany', 
'executescript', 'interrupt', 'isolation_level', 'rollback', 'row_factory', 
'set_authorizer', 'text_factory', 'total_changes']

but I don't kind of understand what I should do with it ...

anyway almost there ...

:)
p
 

On Wed, Jun 25, 2008 at 04:33:04PM +0200, Pietro Abate wrote:
> Hi again. Oleg, Thank you for your prompt answer.
> 
> reg. the StringCol(customSQLType='VARCHAR (255) COLLATE debian')
> I think I want sqlType instead as customSQLType is not a parameter
> of the class StringCol.
> 
> The other problem is a bit more complicated. The idea, if I understand
> correctly, is to modify the TableClass with a new connection factory. I
> don't kind of understand why I've to do this for one SQLObject in
> particular... Should this collation be registered to a db connection ?
> 
> Below my attempt to modify the function that you pointed out. Then I
> call the function sqlite_collate(MyDBClass) before creating the table
> with MyDBClass.createTable().
> 
> It doesn't work and I'm stuck ... Can you give me a little more help ?
> 
> thanks again :)
> pp
> 
> ----------
> 
> def setSQLiteConnectionFactory(TableClass, factory):
>     from sqlobject.sqlite.sqliteconnection import SQLiteConnection
>     conn = TableClass._connection
>     print dir(conn)
>     TableClass._connection = SQLiteConnection(
>         filename=conn.filename,
>         name=conn.name, debug=conn.debug, debugOutput=conn.debugOutput,
>         cache=conn.cache, style=conn.style, autoCommit=conn.autoCommit,
>         debugThreading=conn.debugThreading, registry=conn.registry,
>         factory=factory
>     )
> 
> def sqlite_collate(obj):
>     if obj._connection.dbName == "sqlite":
>         from sqlobject.sqlite import sqliteconnection
>         if not sqliteconnection.using_sqlite2:
>             return
> 
>         def SQLiteConnectionFactory(sqlite):
>             class MyConnection(sqlite.Connection):
>                 def __init__(self, *args, **kwargs):
>                     super(MyConnection, self).__init__(*args, **kwargs)
>                     self.create_collation("debian", self.collate_debian)
> 
>                 def collate_debian(string1, string2):
>                     return apt_pkg.VersionCompare(string1, string2)
> 
>             return MyConnection
> 
>         setSQLiteConnectionFactory(obj,SQLiteConnectionFactory)
> 
> 
> On Wed, Jun 25, 2008 at 04:33:55PM +0400, Oleg Broytmann wrote:
> > On Wed, Jun 25, 2008 at 02:19:13PM +0200, Pietro Abate wrote:
> > >     if conn.dbName == 'sqlite':
> > >         conn.getConnection().create_collation("debian", mycollate)
> > > 
> > > where mycollate is a simple comparison function. I'm still not sure if 
> > > this
> > > is possible or not...
> > 
> >    I think it's possible but in the hard way. See how custom aggregate
> > functions are implemented in the test suite:
> > http://svn.colorstudy.com/SQLObject/trunk/sqlobject/tests/test_sqlite_factory.py
> > 
> > > - How can I add the COLLATE contrains to one of my column while I'm 
> > > creating the 
> > >   table ? I haven't found anything like StringCol(collate='debian') or 
> > > similar...
> > >   Is this possible, or I've to create the table 'manually' ?
> > 
> >    You can use customSQLType:
> > StringCol(customSQLType='VARCHAR (255) COLLATE debian')
> > 
> > Oleg.
> > -- 
> >      Oleg Broytmann            http://phd.pp.ru/            [EMAIL 
> > PROTECTED]
> >            Programmers don't die, they just GOSUB without RETURN.
> > 
> > -------------------------------------------------------------------------
> > Check out the new SourceForge.net Marketplace.
> > It's the best place to buy or sell services for
> > just about anything Open Source.
> > http://sourceforge.net/services/buy/index.php
> > _______________________________________________
> > sqlobject-discuss mailing list
> > sqlobject-discuss@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss
> 
> -------------------------------------------------------------------------
> Check out the new SourceForge.net Marketplace.
> It's the best place to buy or sell services for
> just about anything Open Source.
> http://sourceforge.net/services/buy/index.php
> _______________________________________________
> sqlobject-discuss mailing list
> sqlobject-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to