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