From: "Noel Burton-Krahn" <[EMAIL PROTECTED]>
This is a reasonable query:  load a person with address by the
person's id.  The 'id' column is unambiguous in the search call.
However, DBIx generates ambiguous SQL:

DBIx::Class::ResultSet::count(): DBI Exception: DBD::mysql::st execute
failed: Column 'id' in where clause is ambiguous [for Statement
"SELECT COUNT( * ) FROM person me LEFT JOIN address address ON (
address.person_id = me.id ) WHERE ( id = ? )" with ParamValues: 0='1']
at ./t/dbix_unique_prefix_where.t line 116

The simple way to fix it is to prefix "id" as "me.id".  I'd argue DBIx
should prefix all unqualified column names in the first argument to
search().  Asking users to rely on DBIx's current internal strategy of
using "me" as a prefix is not safe.  What if "me" changes to "this" in
a future release?  What if I make a table named "me"?

~Noel

Yes you are right, but maybe others already tried to find a solution for this, but couldn't do it.

If the query searches only in a single table, then the column name can be used without the table prefix. If the query uses 2 tables, but the column name is not found in both tables, then the column name can be also used without a prefix. If the query searches in 2 or more tables and the column name appears more than in a table, then the prefix should be added.

Well, in the first 2 cases, it is not a problem if that prefix is also added, so this solution can be possible.

I think that if the query needs to search in a table named "me" which is not the primary table, it probably gives another name instead of "me" for the main table, so that name shouldn't need to be hard coded in the programs.

By the way, does anyone know what happends if a secondary table is named "me"?

Octavian


_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk

Reply via email to