On Sun, Sep 06, 2009 at 09:54:43AM +0200, Tobias Weber wrote:
> class A(InheritableSQLObject):
>     def _init(self, *args, **kargs):
>         InheritableSQLObject._init(self, *args, **kargs)
>         print self.__class__
>         if 'name' in dir(self):
>             # This should never fail
>             print getattr(self, 'name')
> 
> class B(A):
>     name = sqlobject.StringCol()
> 
> class C(B):
>     pass
> 
> sqlobject.sqlhub.processConnection = 
> sqlobject.connectionForURI('sqlite:/tmp/x')
> 
> for klass in (A, B, C):
>     klass.createTable(ifNotExists = True)

   Works for me:

print list(B.select())
C(name = 'X')
print list(B.select())

   prints

 1/QueryOne:  SELECT tbl_name FROM sqlite_master WHERE type='table' AND 
tbl_name = 'a'
 1/QueryR  :  SELECT tbl_name FROM sqlite_master WHERE type='table' AND 
tbl_name = 'a'
 2/Query   :  CREATE TABLE a (
    id INTEGER PRIMARY KEY,
    child_name VARCHAR (255)
)
 2/QueryR  :  CREATE TABLE a (
    id INTEGER PRIMARY KEY,
    child_name VARCHAR (255)
)
 3/QueryOne:  SELECT tbl_name FROM sqlite_master WHERE type='table' AND 
tbl_name = 'b'
 3/QueryR  :  SELECT tbl_name FROM sqlite_master WHERE type='table' AND 
tbl_name = 'b'
 4/Query   :  CREATE TABLE b (
    id INTEGER PRIMARY KEY,
    name TEXT,
    child_name VARCHAR (255)
)
 4/QueryR  :  CREATE TABLE b (
    id INTEGER PRIMARY KEY,
    name TEXT,
    child_name VARCHAR (255)
)
 5/QueryOne:  SELECT tbl_name FROM sqlite_master WHERE type='table' AND 
tbl_name = 'c'
 5/QueryR  :  SELECT tbl_name FROM sqlite_master WHERE type='table' AND 
tbl_name = 'c'
 6/Query   :  CREATE TABLE c (
    id INTEGER PRIMARY KEY,
    child_name VARCHAR (255)
)
 6/QueryR  :  CREATE TABLE c (
    id INTEGER PRIMARY KEY,
    child_name VARCHAR (255)
)
 7/Select  :  SELECT a.id, a.child_name FROM a WHERE ((a.child_name) = ('B'))
 7/QueryR  :  SELECT a.id, a.child_name FROM a WHERE ((a.child_name) = ('B'))
[]
 8/QueryIns:  INSERT INTO a (child_name) VALUES ('B')
 8/QueryR  :  INSERT INTO a (child_name) VALUES ('B')
 9/QueryOne:  SELECT child_name FROM a WHERE ((a.id) = (1))
 9/QueryR  :  SELECT child_name FROM a WHERE ((a.id) = (1))
<class '__main__.A'>
10/QueryIns:  INSERT INTO b (id, name, child_name) VALUES (1, 'X', 'C')
10/QueryR  :  INSERT INTO b (id, name, child_name) VALUES (1, 'X', 'C')
11/QueryOne:  SELECT name, child_name FROM b WHERE ((b.id) = (1))
11/QueryR  :  SELECT name, child_name FROM b WHERE ((b.id) = (1))
<class '__main__.B'>
X
12/QueryIns:  INSERT INTO c (id, child_name) VALUES (1, NULL)
12/QueryR  :  INSERT INTO c (id, child_name) VALUES (1, NULL)
13/QueryOne:  SELECT child_name FROM c WHERE ((c.id) = (1))
13/QueryR  :  SELECT child_name FROM c WHERE ((c.id) = (1))
<class '__main__.C'>
X
14/Select  :  SELECT a.id, a.child_name FROM a WHERE ((a.child_name) = ('B'))
14/QueryR  :  SELECT a.id, a.child_name FROM a WHERE ((a.child_name) = ('B'))
14/Select children of the class B:  SELECT b.id, b.name, b.child_name FROM b 
WHERE ((b.id) = (1))
14/QueryR  :  SELECT b.id, b.name, b.child_name FROM b WHERE ((b.id) = (1))
[<C 1 name='X'>]

   No exception.

Oleg.
-- 
     Oleg Broytmann            http://phd.pp.ru/            p...@phd.pp.ru
           Programmers don't die, they just GOSUB without RETURN.

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to