agreeing too. Someone applying versioning AFTER must know that he must set all current records to True (maybe a note marked "important" on the relevant section on the book may be appropriate). Better a one-time operation than large where conditions appearing everywhere and killing performances.
On Saturday, December 22, 2012 4:00:42 PM UTC+1, Massimo Di Pierro wrote: > > I think we agree with each other. The problem is that somebody may add > auth.signature later and therefore precent records will have > is_active=None. The user will have to manually set is_active from None to > True. > > On Saturday, 22 December 2012 07:08:58 UTC-6, Niphlod wrote: >> >> 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')); >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> --