|
From: Ian S. <ia...@et...> - 2003-09-26 14:38:53
|
I've been playing with the people.py example under Firebird 1.0 (and IB 6.01
with some tweaks to SO) using the Mostly live CVS tarball from 2 days ago.
Observations :
* people.py defines a SQLObject class Role. ROLE is an IB/Firebird reserved
word. Changing the role references to userRole worked for me.
* I'm not sure the supportTransactions setting is right for Firebird :
class FirebirdConnection(DBAPI):
supportTransactions = False
should be :
class FirebirdConnection(DBAPI):
supportTransactions = True
at least, it does for me if I want any commits to occur.
* The current Firebird support doesn't have anything for Enum fields which
are part of the people.py tests. Here is something that will at least work :
Col.py :
class SOEnumCol(SOCol):
def _firebirdType(self):
length = max(map(len, self.enumValues))
return "VARCHAR(%i)" % (length,)
In general the postgresql approach to adding check constraints isn't going
to work for Firebird. It appears you can't do :
CREATE TABLE FRED (
COL1 VARCHAR(10) CHECK (VALUE IN ('one','two','three')) NOT NULL
)
you have to do :
CREATE DOMAIN FRED_COL1_DOM VARCHAR(1) CHECK (VALUE IN
('one','two','three'));
CREATE TABLE FRED (
COL1 FRED_COL1_DOM NOT NULL
)
which means some up-front shenanigins to write the domains you need before
creating the columns. Not too hard I'm sure but I'm not much of a SQLObject
hacker (yet?).
* It might be useful to allow additional Indexes to be created for a table.
So :
class Person(SQLObject):
_columns = [StringCol('username', length=20, alternateID=True,
notNull=1),
StringCol('firstName', length=30,
notNull=1),
StringCol('middleInitial', length=1, default=None),
StringCol('lastName', length=50, notNull=1)]
_joins = [RelatedJoin('UserRole'), MultipleJoin('PhoneNumber')]
idx1 = UniqueIndex(['firstName','lastName'])
idx2 = Index(['lastName'])
_indexes = [idx1,idx2]
would lead to :
CREATE UNIQUE INDEX firstNameLastName ON PERSON (first_Name,last_Name)
CREATE INDEX last_name ON PERSON (last_name)
Only if the db supported indexing of course.
Hope this is useful feedback.
- Ian Sparks.
|