You wrote:
In [4]: query = (test2.type_marker=='object') | (test2.type_marker==None) & 
(test1.type_marker=='person')
   ...: 

In [5]: db().select(db.test.ALL)
Out[5]: <Rows (3)>

So in [5] you did not use the query definition, its db() 
AND the result is 3 Rows, 
it should be 2!
Thats why I asked for the query you will use to get exactly this result:
test1.title        test2.title
Peter            None
Paul            Laptop

I haven't seen any query in your output with this result.
Andreas



Am Mittwoch, 7. März 2018 20:08:05 UTC+1 schrieb Richard:
>
> That why I think you wrongly initialize you db in the first place while 
> onboarding the record versioning feature...
>
> Please try on your side to create new app drop the model and fixture I 
> include in one of my last email and start web2py shell and launch the 
> various commands of yours...
>
> You should get the same output number of record...
>
> If you don't it might happen that there was a bug in 2.15.4 web2py version 
> / pyDAL...
>
> Try new version...
>
> On Wed, Mar 7, 2018 at 2:05 PM, Richard Vézina <[email protected] 
> <javascript:>> wrote:
>
>> In [4]: query = (test2.type_marker=='object') | (test2.type_marker==None) 
>> & (test1.type_marker=='person')
>>    ...: 
>>
>> In [5]: db().select(db.test.ALL)
>> Out[5]: <Rows (3)>
>>
>> I did there...
>>
>> Same result...
>>
>> That my point...
>>
>> On Wed, Mar 7, 2018 at 1:47 PM, 'Awe' via web2py-users <
>> [email protected] <javascript:>> wrote:
>>
>>> Hello Richard,
>>> you are right, the use case is parent child relation.
>>> All I want to point out is if you use this query:
>>> "query = (test2.type_marker=='object') | (test2.type_marker==None) & 
>>> (test1.type_marker=='person')"
>>> you do not get the same result with record versioning enabled or 
>>> disabled.
>>>
>>> Why do I use this query definition because I want to retrieve exactly 
>>> this result:
>>> test1.title        test2.title
>>> Peter            None
>>> Paul            Laptop
>>>
>>> If you use this query instead:
>>> (test2.type_marker=='object') & (test1.type_marker=='person')
>>> you do not get the result I need.
>>>
>>> The " | (test2.type_marker==None) " is necessary, due to parent/child 
>>> relationship.
>>>
>>> Please try exactly the query mentioned using versioning enabled/disabled 
>>> and see what happens.
>>>
>>> Many thanks for your patience.
>>>
>>> Am Mittwoch, 7. März 2018 19:34:41 UTC+1 schrieb Richard:
>>>>
>>>> I don't get it, I don't understand what is the issue...
>>>>
>>>> I just demonstrate that with and without record versioning DAL returns 
>>>> the same set of result which what it should be doing no??
>>>>
>>>> So my understanding of the issue is that you don't get the same query 
>>>> output when record versioning is on and when it off which to me should is 
>>>> the issue you point us... I migth not understand the exact problem you 
>>>> have.
>>>>
>>>> But to me this "query = (test2.type_marker=='object') | 
>>>> (test2.type_marker==None) & (test1.type_marker=='person')"
>>>>
>>>> or this "query = (test2.type_marker=='object') & 
>>>> (test1.type_marker=='person')" with the set of inputs you have will lead 
>>>> to 
>>>> the same output as there is not type_marker NULL value...
>>>>
>>>> But I guess I miss something with related to what you try to achieve 
>>>> with this aliasing thing that you do...
>>>>
>>>> Also the use case is not obvious for me as why are you doing these 
>>>> aliases... I guess to retrieve some sort of genealogy/record parent-child 
>>>> relation...
>>>>
>>>> Richard
>>>>
>>>>
>>>> On Wed, Mar 7, 2018 at 12:17 PM, 'Awe' via web2py-users <
>>>> [email protected]> wrote:
>>>>
>>>>> Hello Richard,
>>>>> have read your post 3 times, but I can't find the right query result.
>>>>> Could you tell me where to find in your test the query which leads to:
>>>>> test1.title        test2.title
>>>>> Peter            None
>>>>> Paul            Laptop
>>>>>
>>>>> Thank you.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Am Mittwoch, 7. März 2018 17:33:33 UTC+1 schrieb Richard:
>>>>>
>>>>>> Here some tests : 
>>>>>>
>>>>>> *WITH record versioning*
>>>>>>
>>>>>> In [1]: db(db.test.id < 0).select()
>>>>>> Out[1]: <Rows (0)>
>>>>>>
>>>>>> In [2]: db(db.test.id > 0).select()
>>>>>> Out[2]: <Rows (3)>
>>>>>>
>>>>>> In [3]: test1 = db.test.with_alias('test1')
>>>>>>
>>>>>> In [4]: test2 = db.test.with_alias('test2')
>>>>>>
>>>>>> In [5]: query = (test2.type_marker=='object') | 
>>>>>> (test2.type_marker==None) & (test1.type_marker=='person')
>>>>>>
>>>>>> In [6]: db().select(current.db.test.ALL)
>>>>>>
>>>>>> ---------------------------------------------------------------------------
>>>>>> NameError                                 Traceback (most recent call 
>>>>>> last)
>>>>>> /web2py_master_trunk/web2py/applications/test_versioning_issue/models/menu.py
>>>>>>  
>>>>>> in <module>()
>>>>>> ----> 1 db().select(current.db.test.ALL)
>>>>>>
>>>>>> NameError: name 'current' is not defined
>>>>>>
>>>>>> In [7]: db().select(db.test.ALL)
>>>>>> Out[7]: <Rows (3)>
>>>>>>
>>>>>> In [8]: query = (test2.type_marker=='object') & 
>>>>>> (test1.type_marker=='person')
>>>>>>
>>>>>> In [9]: db().select(db.test.ALL)
>>>>>> Out[9]: <Rows (3)>
>>>>>>
>>>>>> In [10]: db(query).select(test1.title, test2.title, left=test2.on(
>>>>>> test1.id==test2.granny))
>>>>>> Out[10]: <Rows (1)>
>>>>>>
>>>>>> In [11]: db(query)._select(test1.title, test2.title, left=test2.on(
>>>>>> test1.id==test2.granny))
>>>>>> Out[11]: 'SELECT "test1"."title", "test2"."title" FROM "test" AS 
>>>>>> "test1" LEFT JOIN "test" AS "test2" ON (("test1"."id" = 
>>>>>> "test2"."granny") 
>>>>>> AND (("test1"."is_active" = \'T\') AND ("test2"."is_active" = \'T\'))) 
>>>>>> WHERE (((("test2"."type_marker" = \'object\') AND ("test1"."type_marker" 
>>>>>> = 
>>>>>> \'person\')) AND (("test1"."is_active" = \'T\') AND ("test2"."is_active" 
>>>>>> = 
>>>>>> \'T\'))) AND (("test1"."is_active" = \'T\') AND ("test2"."is_active" = 
>>>>>> \'T\')));'
>>>>>>
>>>>>> In [12]: print db().select(db.test.ALL)
>>>>>> test.id
>>>>>> ,test.title,test.granny,test.type_marker,test.is_active,test.created_on,test.created_by,test.modified_on,test.modified_by
>>>>>> 1,Peter,<NULL>,person,True,2018-03-07 11:10:08,<NULL>,2018-03-07 
>>>>>> 11:10:08,<NULL>
>>>>>> 2,Paul,<NULL>,person,True,2018-03-07 11:10:08,<NULL>,2018-03-07 
>>>>>> 11:10:08,<NULL>
>>>>>> 3,Laptop,2,object,True,2018-03-07 11:10:08,<NULL>,2018-03-07 
>>>>>> 11:10:08,<NULL>
>>>>>>
>>>>>>
>>>>>> *WITHOUT record versioning*
>>>>>>
>>>>>> In [1]: db(db.test.id > 0).select()
>>>>>> Out[1]: <Rows (3)>
>>>>>>
>>>>>> In [2]:  test1 = db.test.with_alias('test1')
>>>>>>
>>>>>> In [3]: test2 = db.test.with_alias('test2')
>>>>>>
>>>>>> In [4]: query = (test2.type_marker=='object') | 
>>>>>> (test2.type_marker==None) & (test1.type_marker=='person')
>>>>>>    ...: 
>>>>>>
>>>>>> In [5]: db().select(db.test.ALL)
>>>>>> Out[5]: <Rows (3)>
>>>>>>
>>>>>> In [6]: query = (test2.type_marker=='object') & 
>>>>>> (test1.type_marker=='person')
>>>>>>
>>>>>> In [7]: db().select(db.test.ALL)
>>>>>> Out[7]: <Rows (3)>
>>>>>>
>>>>>> In [8]: db(query).select(test1.title, test2.title, left=test2.on(
>>>>>> test1.id==test2.granny))
>>>>>> Out[8]: <Rows (1)>
>>>>>>
>>>>>> In [9]: db(query)._select(test1.title, test2.title, left=test2.on(
>>>>>> test1.id==test2.granny))
>>>>>> Out[9]: 'SELECT "test1"."title", "test2"."title" FROM "test" AS 
>>>>>> "test1" LEFT JOIN "test" AS "test2" ON ("test1"."id" = "test2"."granny") 
>>>>>> WHERE (("test2"."type_marker" = \'object\') AND ("test1"."type_marker" = 
>>>>>> \'person\'));'
>>>>>>
>>>>>> In [10]: print db().select(db.test.ALL)
>>>>>> test.id
>>>>>> ,test.title,test.granny,test.type_marker,test.is_active,test.created_on,test.created_by,test.modified_on,test.modified_by
>>>>>> 1,Peter,<NULL>,person,True,2018-03-07 11:10:08,<NULL>,2018-03-07 
>>>>>> 11:10:08,<NULL>
>>>>>> 2,Paul,<NULL>,person,True,2018-03-07 11:10:08,<NULL>,2018-03-07 
>>>>>> 11:10:08,<NULL>
>>>>>> 3,Laptop,2,object,True,2018-03-07 11:10:08,<NULL>,2018-03-07 
>>>>>> 11:10:08,<NULL>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> *I have this in db.py of a newly created app with web2py trunk/master 
>>>>>> :*
>>>>>>
>>>>>> ```python
>>>>>> db.define_table('test',
>>>>>>                    Field('title', 'string'),
>>>>>>                    Field('granny', 'reference test'),  # convenience 
>>>>>> - topmost
>>>>>>                    Field('type_marker', 'string'),
>>>>>>                    auth.signature,
>>>>>>                    )
>>>>>>
>>>>>> db.test._enable_record_versioning(archive_db=db,
>>>>>>                                       archive_name='test_archive',
>>>>>>                                       current_record='current_record',
>>>>>>                                       is_active='is_active'
>>>>>>                                       )
>>>>>>
>>>>>> if db(db.test.id > 0).count() == 0:
>>>>>>     db.test.insert(title='Peter', granny=None, type_marker='person')
>>>>>>     db.test.insert(title='Paul', granny=None, type_marker='person')
>>>>>>     db.test.insert(title='Laptop', granny=2, type_marker='object')
>>>>>> ```
>>>>>> You can start the web2py shell like this :
>>>>>>
>>>>>> python web2py.py -a 'DUMMYPWD' -i 127.0.0.1 -p 8001 -S 
>>>>>> test_versioning_issue -M
>>>>>>
>>>>>>
>>>>>>
>>>>>> I don't notice any discrepency between both result, I mean I recover 
>>>>>> 3 records in both case... It makes sens that the raw query change to 
>>>>>> make 
>>>>>> sure it select only active records...
>>>>>>
>>>>>> It mays happen that you experiment an issue with the web2py version 
>>>>>> that you use 2.15.4...
>>>>>>
>>>>>> You may consider trying the above with a freshly create dummy app 
>>>>>> with the db.py additions above and see by yourself... If you get the 
>>>>>> same 
>>>>>> results it means that your own app may have been wrongly initialized in 
>>>>>> some way... If yous till experiment the issue, try with the stable 
>>>>>> web2py 
>>>>>> version from the web2py.com download page...
>>>>>>
>>>>>> Please report here your progress...
>>>>>>
>>>>>> If you determine that the issue is related to your old version of 
>>>>>> web2py, please consider upgrade to the newer stable or wait for the next 
>>>>>> release that Massimo's want to push soon.
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>>> Richard
>>>>>>
>>>>>> On Wed, Mar 7, 2018 at 5:35 AM, 'Awe' via web2py-users <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Great, many thanks for testing it.
>>>>>>> Andreas
>>>>>>>
>>>>>>> Am Dienstag, 6. März 2018 22:30:59 UTC+1 schrieb Richard:
>>>>>>>>
>>>>>>>> Can you make a model definition with a fixture for loading the 
>>>>>>>> table, I will make some test with trunk and various version to 
>>>>>>>> determine if 
>>>>>>>> it a regression... Nevermind I just thought you provide that in the 
>>>>>>>> first 
>>>>>>>> email... Let me have a look at that...
>>>>>>>>
>>>>>>>> Richard
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Mar 5, 2018 at 2:02 PM, 'Awe' via web2py-users <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hello Richard,
>>>>>>>>> it is not a problem of deleted or changed records. As shown in the 
>>>>>>>>> example, there is the table and versioning defined. After that 3 
>>>>>>>>> records 
>>>>>>>>> are inserted and then the query is executed.
>>>>>>>>> The defined query:
>>>>>>>>>     query = (test2.type_marker=='object') | 
>>>>>>>>> (test2.type_marker==None) & (test1.type_marker=='person')
>>>>>>>>>     rows = current.db(query).select(test1.title, test2.title, 
>>>>>>>>> left=test2.on(test1.id==test2.granny))
>>>>>>>>> does not give the right result.
>>>>>>>>> I appreciate your help, maybe the problem gets easier to 
>>>>>>>>> understand if you try to test the given example.
>>>>>>>>> Many thanks,
>>>>>>>>> Andreas
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Am Montag, 5. März 2018 16:05:26 UTC+1 schrieb Richard:
>>>>>>>>>>
>>>>>>>>>> Did you set the actual record that have been deleted to is_active 
>>>>>>>>>> = False?? Or all the records that haven't be deleted yet to TRUE?? 
>>>>>>>>>> You have 
>>>>>>>>>> to go in your backend and do an update there
>>>>>>>>>>
>>>>>>>>>> UPDATE stored_item
>>>>>>>>>>         SET is_active = TRUE
>>>>>>>>>>   WHERE is_active IS NULL
>>>>>>>>>>
>>>>>>>>>> If you didn't delete any record yet...
>>>>>>>>>>
>>>>>>>>>> You can also do it from web2py I guess with this command :
>>>>>>>>>>
>>>>>>>>>> db(db.stored_item.is_active == None).update(is_active=True)
>>>>>>>>>> db.commit()
>>>>>>>>>>
>>>>>>>>>> Then you both query should return the same thing... Or at least 
>>>>>>>>>> they should...
>>>>>>>>>>
>>>>>>>>>> It important to initialize archive table and parent table 
>>>>>>>>>> properly when you add audit trail table to an already existing table 
>>>>>>>>>> containing record.
>>>>>>>>>>
>>>>>>>>>> I encourage you to read the book about record versioning : 
>>>>>>>>>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Record-versioning
>>>>>>>>>>
>>>>>>>>>> Richard
>>>>>>>>>>
>>>>>>>>>> On Sun, Mar 4, 2018 at 12:53 PM, 'Awe' via web2py-users <
>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hello Richard, many thanks for analyzing. Everything you wrote 
>>>>>>>>>>> is completely right. But I still do not understand the behaviour 
>>>>>>>>>>> explained 
>>>>>>>>>>> before.
>>>>>>>>>>> If you look at the table posted before, all is_acitve Flags are 
>>>>>>>>>>> TRUE.
>>>>>>>>>>> to get the result I need, I have defined:
>>>>>>>>>>>     query = (test2.type_marker=='object') | 
>>>>>>>>>>> (test2.type_marker==None) & (test1.type_marker=='person')
>>>>>>>>>>>     rows = current.db(query).select(test1.title, test2.title, 
>>>>>>>>>>> left=test2.on(test1.id==test2.granny))
>>>>>>>>>>>
>>>>>>>>>>> the raw sql of this query WITHOUT record versioning is fine.
>>>>>>>>>>> SELECT "test1"."title", "test2"."title" FROM "test" AS "test1" 
>>>>>>>>>>> LEFT JOIN "test" AS "test2" ON ("test1"."id" = "test2"."granny") 
>>>>>>>>>>> WHERE 
>>>>>>>>>>> (("test2"."type_marker" = 'object') OR (("test2"."type_marker" IS 
>>>>>>>>>>> NULL) AND 
>>>>>>>>>>> ("test1"."type_marker" = 'person')));
>>>>>>>>>>> And the result is the way it suposed to be:
>>>>>>>>>>>
>>>>>>>>>>> test1.title        test2.title
>>>>>>>>>>> Peter            None
>>>>>>>>>>> Paul            Laptop
>>>>>>>>>>>
>>>>>>>>>>> The result with record versioning enabled is different:
>>>>>>>>>>> test1.title        test2.title
>>>>>>>>>>> Paul            Laptop
>>>>>>>>>>>
>>>>>>>>>>> Even when the is_acitve Field is defined like that:
>>>>>>>>>>>
>>>>>>>>>>> Field('is_active', 'boolean', writable=False, readable=False, 
>>>>>>>>>>> default=True,required=True, requires=IS_NOT_EMPTY()),
>>>>>>>>>>>
>>>>>>>>>>> So maybe I miss something? At the moment I still wonder why the 
>>>>>>>>>>> identical query comes to different results.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Best regards, an many thanks for your help!
>>>>>>>>>>> Andreas
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Am Freitag, 2. März 2018 16:59:35 UTC+1 schrieb Richard:
>>>>>>>>>>>>
>>>>>>>>>>>> Hmmm... I think that if you have record versioning activated 
>>>>>>>>>>>> there shouldn't be any is_active row(s) with NULL value... I mean 
>>>>>>>>>>>> is_active 
>>>>>>>>>>>> flag is used to determine if the record in the "parent" table has 
>>>>>>>>>>>> been 
>>>>>>>>>>>> deleted or not, since you can truely deleted in case you use 
>>>>>>>>>>>> record 
>>>>>>>>>>>> versioning feature as all the previous record stated records 
>>>>>>>>>>>> contained in 
>>>>>>>>>>>> the versioning table reference the parent record in the parent 
>>>>>>>>>>>> table...
>>>>>>>>>>>>
>>>>>>>>>>>> And you see in the second example here :
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=record+versioning#Record-versioning
>>>>>>>>>>>>
>>>>>>>>>>>> That is_active is set to default=True and there is this note :
>>>>>>>>>>>>
>>>>>>>>>>>> Notice the hidden boolean field called is_active and 
>>>>>>>>>>>> defaulting to True.
>>>>>>>>>>>>
>>>>>>>>>>>> So if you have activated record versioning feature over an 
>>>>>>>>>>>> already existing table you need to set is_active to TRUE for all 
>>>>>>>>>>>> the 
>>>>>>>>>>>> existing record once you start using the versioning feature and 
>>>>>>>>>>>> set the 
>>>>>>>>>>>> is_active to be mandatory...
>>>>>>>>>>>>
>>>>>>>>>>>> I guess it would make sens to change seconde book example in 
>>>>>>>>>>>> orther that is should be more obvious that is_active is mandatory 
>>>>>>>>>>>> like so :
>>>>>>>>>>>>
>>>>>>>>>>>> db.define_table('stored_item',
>>>>>>>>>>>>                 Field('name'),
>>>>>>>>>>>>                 Field('quantity', 'integer'),
>>>>>>>>>>>>                 Field('is_active', 'boolean',
>>>>>>>>>>>>                       writable=False, readable=False, 
>>>>>>>>>>>> default=True, required=True, requires=IS_NOT_EMPTY()))
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> That way you don't need to care about null value to get all the 
>>>>>>>>>>>> records of the parent table and DAL is not bugged...
>>>>>>>>>>>>
>>>>>>>>>>>> Richard
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Mar 2, 2018 at 9:22 AM, 'Awe' via web2py-users <
>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> So, I did check it again:
>>>>>>>>>>>>>
>>>>>>>>>>>>> It seems that DAL is not able to handle a left join using 
>>>>>>>>>>>>> ISNULL condition in combination with enabled record versioning.
>>>>>>>>>>>>> There are two "is active" checks within the left join: OK
>>>>>>>>>>>>> The next two upcoming ANDs to check "is_active" are not 
>>>>>>>>>>>>> necessary and actually prohibit the query to work properly.
>>>>>>>>>>>>> To make this work it should be: AND (("test1"."is_active" = 
>>>>>>>>>>>>> 'T') AND (("test2"."is_active" = 'T' OR ("test2"."is_active" 
>>>>>>>>>>>>> ISNULL ))
>>>>>>>>>>>>> The two AND is active checks at the end of the query are not 
>>>>>>>>>>>>> necessary at all (my opinion).
>>>>>>>>>>>>>
>>>>>>>>>>>>> Could somebody please verifiy this!
>>>>>>>>>>>>> Andreas
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Am Donnerstag, 1. März 2018 13:37:59 UTC+1 schrieb Awe:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hello,
>>>>>>>>>>>>>> I post a simple step by step example, to explain.
>>>>>>>>>>>>>> Doing a left join and using a where clause like: 
>>>>>>>>>>>>>> table.field==None
>>>>>>>>>>>>>> Depending on _enable_record_versioning is enabled or not, I 
>>>>>>>>>>>>>> get different results when executing the identical query.
>>>>>>>>>>>>>> The result when versioning is DISABLED is the correct one.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2.15.4-stable+timestamp.2017.09.02.04.02.22
>>>>>>>>>>>>>> (läuft auf Rocket 1.2.6, Python 2.7.12)
>>>>>>>>>>>>>> SQLite DB
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Example:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> #simple table:
>>>>>>>>>>>>>> current.db.define_table('test',
>>>>>>>>>>>>>>                    Field('title', 'string'),
>>>>>>>>>>>>>>                    Field('granny', 'reference test'),  # 
>>>>>>>>>>>>>> convenience - topmost
>>>>>>>>>>>>>>                    Field('type_marker', 'string'),
>>>>>>>>>>>>>>                    auth.signature,
>>>>>>>>>>>>>>                    )
>>>>>>>>>>>>>> #versioning, enable/disable it
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> current.db.test._enable_record_versioning(archive_db=current.db,
>>>>>>>>>>>>>>                                       
>>>>>>>>>>>>>> archive_name='test_archive',
>>>>>>>>>>>>>>                                       
>>>>>>>>>>>>>> current_record='current_record',
>>>>>>>>>>>>>>                                       is_active='is_active'
>>>>>>>>>>>>>>                                       )
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> #put some data in
>>>>>>>>>>>>>> #current.db.test.insert(**{'title': 'Peter', 'granny': None, 
>>>>>>>>>>>>>> 'type_marker': 'person'})
>>>>>>>>>>>>>> #current.db.test.insert(**{'title': 'Paul', 'granny': None, 
>>>>>>>>>>>>>> 'type_marker': 'person'})
>>>>>>>>>>>>>> #current.db.test.insert(**{'title': 'Laptop', 'granny': 2, 
>>>>>>>>>>>>>> 'type_marker': 'object'})
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> #so you get table content (enabled)t:
>>>>>>>>>>>>>> test.id    test.title    test.granny    test.type_marker    
>>>>>>>>>>>>>> test.is_active    test.created_on        test.created_by    
>>>>>>>>>>>>>> test.modified_on    test.modified_by
>>>>>>>>>>>>>> 1          Peter         None            
>>>>>>>>>>>>>> person                    True                2018-03-01 
>>>>>>>>>>>>>> 08:11:40    
>>>>>>>>>>>>>> Me                2018-03-01 08:11:40    Me
>>>>>>>>>>>>>> 2          Paul          None            
>>>>>>>>>>>>>> person                    True                2018-03-01 
>>>>>>>>>>>>>> 08:11:40    
>>>>>>>>>>>>>> Me                2018-03-01 08:11:40    Me
>>>>>>>>>>>>>> 3          Laptop       2                  
>>>>>>>>>>>>>> object                    True                2018-03-01 
>>>>>>>>>>>>>> 08:11:40    
>>>>>>>>>>>>>> Me                2018-03-01 08:11:40    Me
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> #simple controller function
>>>>>>>>>>>>>> def demo():
>>>>>>>>>>>>>>     test1=current.db.test.with_alias('test1')
>>>>>>>>>>>>>>     test2=current.db.test.with_alias('test2')
>>>>>>>>>>>>>>     query = (test2.type_marker=='object') | 
>>>>>>>>>>>>>> (test2.type_marker==None) & (test1.type_marker=='person')
>>>>>>>>>>>>>>     tbl = current.db().select(current.db.test.ALL)
>>>>>>>>>>>>>>     rows = current.db(query).select(test1.title, test2.title, 
>>>>>>>>>>>>>> left=test2.on(test1.id==test2.granny))
>>>>>>>>>>>>>>     prn =  current.db(query)._select(test1.title, 
>>>>>>>>>>>>>> test2.title, left=test2.on(test1.id==test2.granny))
>>>>>>>>>>>>>>     return dict(tbl=tbl, rows=rows, prn=prn)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Result/Output:
>>>>>>>>>>>>>> test1.title        test2.title
>>>>>>>>>>>>>> Paul            Laptop
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Raw SQL:
>>>>>>>>>>>>>> SELECT "test1"."title", "test2"."title" FROM "test" AS 
>>>>>>>>>>>>>> "test1" LEFT JOIN "test" AS "test2" ON (("test1"."id" = 
>>>>>>>>>>>>>> "test2"."granny") 
>>>>>>>>>>>>>> AND (("test1"."is_active" = 'T') AND ("test2"."is_active" = 
>>>>>>>>>>>>>> 'T'))) WHERE 
>>>>>>>>>>>>>> (((("test2"."type_marker" = 'object') OR (("test2"."type_marker" 
>>>>>>>>>>>>>> IS NULL) 
>>>>>>>>>>>>>> AND ("test1"."type_marker" = 'person'))) AND 
>>>>>>>>>>>>>> (("test1"."is_active" = 'T') 
>>>>>>>>>>>>>> AND ("test2"."is_active" = 'T'))) AND (("test1"."is_active" = 
>>>>>>>>>>>>>> 'T') AND 
>>>>>>>>>>>>>> ("test2"."is_active" = 'T')));
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> NOW DISABLED Record versioning:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Result/Output:
>>>>>>>>>>>>>> test1.title        test2.title
>>>>>>>>>>>>>> Peter            None
>>>>>>>>>>>>>> Paul            Laptop
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Raw SQL:
>>>>>>>>>>>>>> SELECT "test1"."title", "test2"."title" FROM "test" AS 
>>>>>>>>>>>>>> "test1" LEFT JOIN "test" AS "test2" ON ("test1"."id" = 
>>>>>>>>>>>>>> "test2"."granny") 
>>>>>>>>>>>>>> WHERE (("test2"."type_marker" = 'object') OR 
>>>>>>>>>>>>>> (("test2"."type_marker" IS 
>>>>>>>>>>>>>> NULL) AND ("test1"."type_marker" = 'person')));
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> QUESTION:
>>>>>>>>>>>>>> The result with versioning turned off looks right.
>>>>>>>>>>>>>> It seems that the automatically inserted "AND... is_active" 
>>>>>>>>>>>>>> clauses are not correct.
>>>>>>>>>>>>>> Many thanks for your help and assistance.
>>>>>>>>>>>>>> Andreas
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -- 
>>>>>>>>>>>>> Resources:
>>>>>>>>>>>>> - http://web2py.com
>>>>>>>>>>>>> - http://web2py.com/book (Documentation)
>>>>>>>>>>>>> - http://github.com/web2py/web2py (Source code)
>>>>>>>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>>>>>>>>>> --- 
>>>>>>>>>>>>> You received this message because you are subscribed to the 
>>>>>>>>>>>>> Google Groups "web2py-users" group.
>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from 
>>>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> -- 
>>>>>>>>>>> Resources:
>>>>>>>>>>> - http://web2py.com
>>>>>>>>>>> - http://web2py.com/book (Documentation)
>>>>>>>>>>> - http://github.com/web2py/web2py (Source code)
>>>>>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>>>>>>>> --- 
>>>>>>>>>>> You received this message because you are subscribed to the 
>>>>>>>>>>> Google Groups "web2py-users" group.
>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from 
>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> -- 
>>>>>>>>> Resources:
>>>>>>>>> - http://web2py.com
>>>>>>>>> - http://web2py.com/book (Documentation)
>>>>>>>>> - http://github.com/web2py/web2py (Source code)
>>>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>>>>>> --- 
>>>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>>>> Groups "web2py-users" group.
>>>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>>>> send an email to [email protected].
>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>
>>>>>>>>
>>>>>>>> -- 
>>>>>>> Resources:
>>>>>>> - http://web2py.com
>>>>>>> - http://web2py.com/book (Documentation)
>>>>>>> - http://github.com/web2py/web2py (Source code)
>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>>>> --- 
>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>> Groups "web2py-users" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>> send an email to [email protected].
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>> -- 
>>>>> Resources:
>>>>> - http://web2py.com
>>>>> - http://web2py.com/book (Documentation)
>>>>> - http://github.com/web2py/web2py (Source code)
>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "web2py-users" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to [email protected].
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>> -- 
>>> Resources:
>>> - http://web2py.com
>>> - http://web2py.com/book (Documentation)
>>> - http://github.com/web2py/web2py (Source code)
>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>> --- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "web2py-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected] <javascript:>.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to