I believe this is a known bug. Common fields are ignored if there i no 
query. Please check if

db().select(db.p2.name)

and

db(db.p2).select(db.p2.name)

give different results. I believe there is an open ticket about this. I 
will try fix it asap.



On Sunday, 25 November 2012 16:00:02 UTC-6, Brian Zhou wrote:
>
> #!/usr/bin/env python
>
> # export PYTHONPATH=.../web2py
>
> from gluon import DAL, Field
>
> def def_tables(db):
>
>     p2 = db.define_table('p2',
>             Field('name', 'string'),
>             Field('is_active', 'boolean', default=True),
>             common_filter = lambda q: db.p2.is_active==True)
>
> def get_db():
>     return DAL('sqlite://storage.sqlite')
>
> def get_db_with_schema():
>     db = get_db()
>     def_tables(db)
>     return db
>
> def db_ops(db):
>     db.p2.truncate()
>
>     db.p2.insert(name='Alice')
>     db.p2.insert(name='Bob')
>     db.commit()
>
>     print 'before deactivating Alice'
>     print db(db.p2.name=='Alice').update(is_active=False)
>     print 'after deactivating Alice'
>     db.commit()
>
> def test():
>     db = get_db_with_schema()
>     db_ops(db)
>     print db.p2._common_filter
>     print 1, [r.name for r in db().select(db.p2.name)]
>     print 2, [r.name for r in db(ignore_common_filters=False).select(
> db.p2.name)]
>     print 3, [r.name for r in db(ignore_common_filters=True).select(
> db.p2.name)]
>     print 4, [r.name for r in db(db.p2.is_active==True).select(db.p2.name
> )]
>
> if __name__ == "__main__":
>     test()
>
> $ sqlite3 -column -header storage.sqlite 'select * from p2;'
> id          name        description  is_active 
> ----------  ----------  -----------  ----------
> 1           Alice                    F         
> 2           Bob                      T         
>
> $ python test_common_filter.py # against git main branch 1b0e08
> before deactivating Alice
> 1
> after deactivating Alice
> <function <lambda> at 0x2aca500>
> 1 ['Alice', 'Bob']
> 2 ['Alice', 'Bob']
> 3 ['Alice', 'Bob']
> 4 ['Bob']
>
> This is as if common_filter has no effect at all. I was expecting to see
> 1 ['Bob']
> 2 ['Bob']
> 3 ['Alice', 'Bob']
> 4 ['Bob']
>
> Did I miss something? Or is this a bug?
>
> Thanks!
>
> -Brian
>

-- 



Reply via email to