[Checkins] SVN: z3c.dobbin/trunk/src/z3c/dobbin/ Use native UUID
data type on Postgresql;
SQLite will use a string column type. This change awards a noticable
speed difference.
Malthe Borch
mborch at gmail.com
Wed Jul 2 17:56:03 EDT 2008
Log message for revision 87939:
Use native UUID data type on Postgresql; SQLite will use a string column type. This change awards a noticable speed difference.
Changed:
U z3c.dobbin/trunk/src/z3c/dobbin/bootstrap.py
U z3c.dobbin/trunk/src/z3c/dobbin/mapper.py
-=-
Modified: z3c.dobbin/trunk/src/z3c/dobbin/bootstrap.py
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/bootstrap.py 2008-07-02 21:32:46 UTC (rev 87938)
+++ z3c.dobbin/trunk/src/z3c/dobbin/bootstrap.py 2008-07-02 21:56:01 UTC (rev 87939)
@@ -3,12 +3,15 @@
import sqlalchemy as rdb
from sqlalchemy import orm
-from ore.alchemist.interfaces import IDatabaseEngine
-
+import ore.alchemist.interfaces
import relations
+class UUID(rdb.types.TypeEngine):
+ def get_col_spec(self):
+ return "UUID"
+
def bootstrapDatabaseEngine(event):
- engine = component.getUtility(IDatabaseEngine)
+ engine = component.getUtility(ore.alchemist.interfaces.IDatabaseEngine)
engine.metadata = metadata = rdb.MetaData(engine)
setUp(metadata)
@@ -19,13 +22,11 @@
operation of the persistence and relational framework.
"""
- soup_uuid = rdb.String(length=32)
-
soup = rdb.Table(
'dobbin:soup',
metadata,
rdb.Column('id', rdb.Integer, primary_key=True, autoincrement=True),
- rdb.Column('uuid', soup_uuid, unique=True, index=True),
+ rdb.Column('uuid', UUID, unique=True, index=True),
rdb.Column('spec', rdb.String, index=True),
)
@@ -35,16 +36,16 @@
'dobbin:relation:int',
metadata,
rdb.Column('id', rdb.Integer, primary_key=True, autoincrement=True),
- rdb.Column('left', soup_uuid, soup_fk, index=True),
- rdb.Column('right', soup_uuid, soup_fk),
+ rdb.Column('left', UUID, soup_fk, index=True),
+ rdb.Column('right', UUID, soup_fk),
rdb.Column('order', rdb.Integer, nullable=False))
str_relation = rdb.Table(
'dobbin:relation:str',
metadata,
rdb.Column('id', rdb.Integer, primary_key=True, autoincrement=True),
- rdb.Column('left', soup_uuid, soup_fk, index=True),
- rdb.Column('right', soup_uuid, soup_fk),
+ rdb.Column('left', UUID, soup_fk, index=True),
+ rdb.Column('right', UUID, soup_fk),
rdb.Column('key', rdb.Unicode, nullable=False))
# set up mappers
Modified: z3c.dobbin/trunk/src/z3c/dobbin/mapper.py
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/mapper.py 2008-07-02 21:32:46 UTC (rev 87938)
+++ z3c.dobbin/trunk/src/z3c/dobbin/mapper.py 2008-07-02 21:56:01 UTC (rev 87939)
@@ -33,21 +33,13 @@
import types
-def uuid():
- """Return new unique id as string.
-
- Force first character between 'a' and 'z'.
- """
-
- return chr(randint(ord('a'), ord('z'))) + uuid1().hex[:-1]
-
class ObjectTranslator(object):
def __init__(self, column_type=None):
self.column_type = column_type
def __call__(self, field, metadata):
return rdb.Column(
- field.__name__+'_uuid', rdb.String(length=32), nullable=False)
+ field.__name__+'_uuid', bootstrap.UUID, nullable=False)
class ObjectProperty(object):
"""Object property.
@@ -197,7 +189,7 @@
super(Mapper, self).__init__(*args, **kwargs)
# set soup metadata
- self.uuid = uuid()
+ self.uuid = "{%s}" % uuid1()
self.spec = self.__spec__
def __cmp__(self, other):
More information about the Checkins
mailing list