uhm....
the thing is, if you have record versioning, all active records should be 
marked with True. There's no point in record versioning if active records 
can be False or True *or None*. They can be either True or False to 
correctly identify the single active record on those tables..... am I 
missing something ? 

On Saturday, December 22, 2012 12:52:59 AM UTC+1, Massimo Di Pierro wrote:
>
> It is correct in the sense it is what I intended it to be. You are 
> proposing a change of behavior. I see where you are coming from. Please 
> open a ticket about this.
>
> I would like to have some more opinions about this. Should None in 
> is_active be treated as True?
>
>
> On Friday, 21 December 2012 14:02:25 UTC-6, Cliff Kachinske wrote:
>>
>> SQL is incorrect.  
>>
>> is:  "AND supplier_contacts.is_active = 'T'"
>> should be "AND (supplier_contacts.is_active = 'T' OR 
>> supplier_contacts.is_active IS NULL)"
>>
>> On Friday, December 21, 2012 1:05:16 PM UTC-5, Massimo Di Pierro wrote:
>>>
>>> It looks to be the generated SQL is correct. It is possible you enabled 
>>> record versioning and that added the common_filter is_active==True. Yet 
>>> perhaps you have records with is_active=None and therefore they showed up 
>>> before and not now.
>>>
>>> On Friday, 21 December 2012 10:50:13 UTC-6, Cliff Kachinske wrote:
>>>>
>>>> Salient details from two tables:
>>>>
>>>> db.define_table(
>>>>     'suppliers',
>>>>     Field('name', length=256, required=True, notnull=True),
>>>>     ....
>>>>
>>>>
>>>> db.define_table(
>>>>     'supplier_contacts',
>>>>     Field('supplier_id', db.suppliers),
>>>>     Field('first_name', length=32, required=True, notnull=True),
>>>>
>>>>
>>>>
>>>> The code below worked in 1.99.7.  If the supplier had two contacts, it 
>>>> would return two rows as expected, both with the same supplier data but 
>>>> each with individual contact data.  
>>>>
>>>> In 2.2.1 it returns no rows.
>>>>
>>>> def get_approved_suppliers(product_id):
>>>>
>>>> return db(
>>>>             (db.product_suppliers.product_id==product_id) &
>>>>             (db.product_suppliers.supplier_id==db.suppliers.id)
>>>>             ).select(
>>>>                     db.suppliers.id,
>>>>                     db.suppliers.name,
>>>>                     # more supplier details omitted for brevity,
>>>>                     db.supplier_contacts.id,
>>>>                     db.supplier_contacts.first_name,
>>>>                     # contact details omitted for brevity.
>>>>                     left = db.supplier_contacts.on(
>>>>                         db.supplier_contacts.supplier_id==db.suppliers.
>>>> id
>>>>                         )
>>>>                     )
>>>>
>>>>
>>>> This is the query as shown by db._lastsql.  (Broken into chunks for 
>>>> readability)
>>>>
>>>> SELECT  suppliers.id, suppliers.name, suppliers.address, suppliers.
>>>> address_2, suppliers.city, suppliers.state, suppliers.zip, suppliers.
>>>> land_line, suppliers.fax, suppliers.email, 
>>>> suppliers.website,supplier_contacts
>>>> .id, supplier_contacts.first_name, 
>>>> supplier_contacts.middle_name,supplier_contacts
>>>> .last_name, supplier_contacts.generation, 
>>>> supplier_contacts.email,supplier_contacts
>>>> .mobile, supplier_contacts.land_line, supplier_contacts.fax 
>>>>
>>>> FROM product_suppliers, suppliers 
>>>>
>>>> LEFT JOIN supplier_contacts ON (supplier_contacts.supplier_id =suppliers
>>>> .id) 
>>>>
>>>> WHERE (((((product_suppliers.product_id = 340) AND 
>>>> (product_suppliers.supplier_id 
>>>> = suppliers.id)) AND (product_suppliers.is_active = 'T')) AND (
>>>> suppliers.is_active = 'T')) AND (supplier_contacts.is_active = 'T'));
>>>>
>>>>
>>>>
>>>>
>>>>

-- 



Reply via email to