for example, heres a beast of a unit test: python test/orm/inheritance/query.py --log-debug=sqlalchemy.engine -- db oracle PolymorphicUnionsTest.test_primary_eager_aliasing
When you run on SQLite, one of the queries is: SELECT anon_1.people_person_id AS anon_1_people_person_id, anon_1.people_company_id AS anon_1_people_company_id, anon_1.people_name AS anon_1_people_name, anon_1.people_type AS anon_1_people_type, anon_1.engineers_person_id AS anon_1_engineers_person_id, anon_1.engineers_status AS anon_1_engineers_status, anon_1.engineers_engineer_name AS anon_1_engineers_engineer_name, anon_1.engineers_primary_language AS anon_1_engineers_primary_language, anon_1.managers_person_id AS anon_1_managers_person_id, anon_1.managers_status AS anon_1_managers_status, anon_1.managers_manager_name AS anon_1_managers_manager_name, anon_1.boss_boss_id AS anon_1_boss_boss_id, anon_1.boss_golf_swing AS anon_1_boss_golf_swing, machines_1.machine_id AS machines_1_machine_id, machines_1.name AS machines_1_name, machines_1.engineer_id AS machines_1_engineer_id FROM (SELECT people.person_id AS people_person_id, people.company_id AS people_company_id, people.name AS people_name, people.type AS people_type, engineers.person_id AS engineers_person_id, engineers.status AS engineers_status, engineers.engineer_name AS engineers_engineer_name, engineers.primary_language AS engineers_primary_language, managers.person_id AS managers_person_id, managers.status AS managers_status, managers.manager_name AS managers_manager_name, boss.boss_id AS boss_boss_id, boss.golf_swing AS boss_golf_swing FROM people LEFT OUTER JOIN engineers ON people.person_id = engineers.person_id LEFT OUTER JOIN managers ON people.person_id = managers.person_id LEFT OUTER JOIN boss ON managers.person_id = boss.boss_id ORDER BY people.person_id LIMIT 2 OFFSET 1) AS anon_1 LEFT OUTER JOIN machines AS machines_1 ON anon_1.engineers_person_id = machines_1.engineer_id ORDER BY anon_1.people_person_id, machines_1.oid of note is the anonymous label "anon_1_engineers_primary_language", 34 characters. This label is generated from an anonymous alias name combined with a column name, which is itself a combination of the original table name and column name. So theres three stages of name generation represented here. Here it is on oracle, including the result rows: SELECT anon_1.people_person_id AS anon_1_people_person_id, anon_1.people_company_id AS anon_1_people_company_id, anon_1.people_name AS anon_1_people_name, anon_1.people_type AS anon_1_people_type, anon_1.managers_person_id AS anon_1_managers_person_id, anon_1.managers_status AS anon_1_managers_status, anon_1.managers_manager_name AS anon_1_managers_manager_name, anon_1.boss_boss_id AS anon_1_boss_boss_id, anon_1.boss_golf_swing AS anon_1_boss_golf_swing, anon_1.engineers_person_id AS anon_1_engineers_person_id, anon_1.engineers_status AS anon_1_engineers_status, anon_1.engineers_engineer_name AS anon_1_engineers_engineer_name, anon_1.engineers_primary_language AS anon_1_engineers_primary_1, machines_1.machine_id AS machines_1_machine_id, machines_1.name AS machines_1_name, machines_1.engineer_id AS machines_1_engineer_id FROM (SELECT people_person_id, people_company_id, people_name, people_type, managers_person_id, managers_status, managers_manager_name, boss_boss_id, boss_golf_swing, engineers_person_id, engineers_status, engineers_engineer_name, engineers_primary_language FROM (SELECT people.person_id AS people_person_id, people.company_id AS people_company_id, people.name AS people_name, people.type AS people_type, managers.person_id AS managers_person_id, managers.status AS managers_status, managers.manager_name AS managers_manager_name, boss.boss_id AS boss_boss_id, boss.golf_swing AS boss_golf_swing, engineers.person_id AS engineers_person_id, engineers.status AS engineers_status, engineers.engineer_name AS engineers_engineer_name, engineers.primary_language AS engineers_primary_language, ROW_NUMBER() OVER (ORDER BY people.person_id) AS ora_rn FROM people LEFT OUTER JOIN managers ON people.person_id = managers.person_id LEFT OUTER JOIN boss ON managers.person_id = boss.boss_id LEFT OUTER JOIN engineers ON people.person_id = engineers.person_id) WHERE ora_rn>1 AND ora_rn<=3) anon_1 LEFT OUTER JOIN machines machines_1 ON anon_1.engineers_person_id = machines_1.engineer_id ORDER BY anon_1.people_person_id, machines_1.machine_id INFO:sqlalchemy.engine.base.Engine.0x..4c:{} DEBUG:sqlalchemy.engine.base.Engine.0x..4c:Col ('ANON_1_PEOPLE_PERSON_ID', 'ANON_1_PEOPLE_COMPANY_ID', 'ANON_1_PEOPLE_NAME', 'ANON_1_PEOPLE_TYPE', 'ANON_1_MANAGERS_PERSON_ID', 'ANON_1_MANAGERS_STATUS', 'ANON_1_MANAGERS_MANAGER_NAME', 'ANON_1_BOSS_BOSS_ID', 'ANON_1_BOSS_GOLF_SWING', 'ANON_1_ENGINEERS_PERSON_ID', 'ANON_1_ENGINEERS_STATUS', 'ANON_1_ENGINEERS_ENGINEER_NAME', 'ANON_1_ENGINEERS_PRIMARY_1', 'MACHINES_1_MACHINE_ID', 'MACHINES_1_NAME', 'MACHINES_1_ENGINEER_ID') DEBUG:sqlalchemy.engine.base.Engine.0x..4c:Row (2, 1, 'wally', 'engineer', None, None, None, None, None, 2, 'regular engineer', 'wally', 'c++', 3, 'Commodore 64', 2) DEBUG:sqlalchemy.engine.base.Engine.0x..4c:Row (3, 1, 'pointy haired boss', 'boss', 3, 'da boss', 'pointy', 3, 'fore', None, None, None, None, None, None, None) Where you can see that "anon_1_engineers_primary_language" becomes "anon_1_engineers_primary_1" (27 characters) - this translation occurs as late as possible. It shows up as that name in cursor.description, and the ResultProxy translates that truncated name back to a name matching the original column object. On Jun 13, 2008, at 11:12 AM, Michael Bayer wrote: > > > On Jun 13, 2008, at 3:58 AM, Egil Möller wrote: > >> I and a coworker are currently working on a patch-set to the oracle >> driver for SA for this very reason, fixing issues like: >> >> * broken mangling of forbidden/to long table/column names > > really ? we have a lot of tests which pass fine for that, including > when aliases are created, etc. In compiler.py, all names go through > the same "length" filter no matter how they got generated (the only > exception to this is the "too long index names" ticket which is > strictly a schema thing). We have a "long labels" test specifically > for this, and lots of ORM tests generate very long names as well (all > of which work fine with Oracle). We did a tremendous amount of > development on this a few years back and noone has had issues since. > > can you post a ticket with an example ? Also if producing fixes, > keep in mind theres some compiler differences between 0.4 and 0.5, 0.5 > is the direction we're heading.... > >> >> * missing support for the BOOL data type > > there may or may not be a ticket for this (please post one if not) > >> >> * missing support for boolean expressions in the column list ( >> select([tbl.c.col1 == tbl.c.col2]) ) (related to the last one above) > > ditto > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---