On Wed, Sep 15, 2010 at 07:34:06AM -0400, [email protected] wrote:
> I'm following the example given in the SQLObject FAQ on creating custom
> mtm relationships. Creating the unique index for the UserPhonelists table
> seems to create an incorrect SQL statement.
>
> My code:
> ---
> class User(SQLObject):
> name = StringCol(length=255, default="")
> [...]
> phonelists =
> SQLRelatedJoin('Phonelist',intermediateTable='user_phonelists',createRelatedTable=False)
>
> class Phonelist(SQLObject):
> name = StringCol(length=255)
> [...]
> users =
> SQLRelatedJoin('User',intermediateTable='user_phonelists',createRelatedTable=False)
>
> class UserPhonelists(SQLObject):
> class sqlmeta:
> table = "user_phonelists"
> user = ForeignKey('User', notNull=True, cascade=True)
> phonelist = ForeignKey('Phonelist', notNull=True, cascade=True)
> [...]
> unique = index.DatabaseIndex(user, phonelist, unique=True)
> ---
>
> The queries it generates:
> ---
> 1/Query : ALTER TABLE user_phonelists ADD CONSTRAINT
> user_phonelists_user_id_exists FOREIGN KEY (user_id) REFERENCES user (id)
> ON DELETE CASCADE
> 1/Query : ALTER TABLE user_phonelists ADD CONSTRAINT
> user_phonelists_phonelist_id_exists FOREIGN KEY (phonelist_id) REFERENCES
> phonelist (id) ON DELETE CASCADE
> 1/Query : ALTER TABLE user_phonelists ADD UNIQUE unique (user_id,
> phonelist_id)
> ---
>
> The error the last query triggers:
> ---
> sqlobject.dberrors.ProgrammingError: You have an error in your SQL syntax;
> check the manual that corresponds to your MySQL server version for the
> right syntax to use near 'unique (user_id, phonelist_id)' at line 1
> ---
You code generates the following statement for me:
CREATE UNIQUE INDEX user_phonelists_unique ON user_phonelists (user_id,
phonelist_id)
SQLObject 0.13.0, SQLite.
And the code
u = User(name='1')
pl = Phonelist(name='1')
pl.addUser(u)
pl.addUser(u)
correctly produces the error:
sqlobject.dberrors.DuplicateEntryError: columns user_id, phonelist_id are not
unique
What version of SQLObject and on what backend do you use it?
Oleg.
--
Oleg Broytman http://phd.pp.ru/ [email protected]
Programmers don't die, they just GOSUB without RETURN.
------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
sqlobject-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss