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'));
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
--