Hi all,
I've encountered problem to add a (sqlite) collation function
to my tables using sqlobject. Introduction + questions at the bottom.
Using plain sqlite you can add a collation function as follows:
----------
import sqlite3
def collate_reverse(string1, string2):
return -cmp(string1, string2)
con = sqlite3.connect(":memory:")
con.create_collation("reverse", collate_reverse)
cur = con.cursor()
cur.execute("create table test(x)")
cur.executemany("insert into test(x) values (?)", [("a",), ("b",)])
cur.execute("select x from test order by x collate reverse")
for row in cur:
print row
con.close()
-----------
I figured I can do the same from the sqlobject level. My idea is to
get the sqlite connection and adding the collate function directly to
it:
conn = sql.connectionForURI('sqlite:memory:/')
# we add a proper collation to compare versions
# only sqlite
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...
The second step would be to add the collation to the table. I've tried to add
an alter statement in as :
class sqlmeta:
createSQL = { 'sqlite' : [
'ALTER TABLE version ALTER COLUMN number COLLATE debian'] }
but this doesn't work because of a sqlite limitation:
http://chensheng.net/p/sqlite_docs_3_5_4/lang_altertable.html
My __questions__ are:
- Can I use the sqlite3 low level statement (create_collation) with the
sqlobejct
connection ? Is this going to work or there no way to do it ?
- 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' ?
thanks :)
pp
-------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss