j4mie / paris

A lightweight Active Record implementation for PHP5, built on top of Idiorm.
http://j4mie.github.com/idiormandparis/
996 stars 131 forks source link

Quoted wildcards in associations #12

Closed signaturefish closed 13 years ago

signaturefish commented 13 years ago

Good afternoon,

I'm building a couple of projects that back on to idiorm/paris at the moment, and I seem to have hit a bug in the code that manages associations between Models. Essentially, when I attempt a "has_many_through()" call that should succeed, PDO throws an exception that indicates that somewhere along the line, something is quoting the SQL query incorrectly.

At some point, the system attempts a "SELECT table. FROM table JOIN...", which is quoted as "table"."", which fails because * is not a recognised column in that table. I can reproduce the bug in both MySQL and PostgreSQL (where both libraries otherwise perform very well, incidentally).

Example code can be found at my friend Aquarion's server, here: http://cenote.gkhs.net/~aquarion/idiormtest/ - that's running on MySQL.

We suspect, as the URL indicates, that the bug itself is likely in idiorm, but we're only really seeing its effects through paris. Feel free to move this issue to the idiorm issue-list if you prefer, of course.

j4mie commented 13 years ago

Hi,

Thanks for this report. The test cases are brilliant, and allowed me to track down the bug straight away.

It was a problem with Idiorm, but I'll leave the ticket here as it will require an update to Paris' tests to fix completely.

The problem was that Idiorm wasn't correctly checking for the wildcard ("*") when quoting column names. I've added in a simple check for this, and pushed it to the develop branch.

https://github.com/j4mie/idiorm/tree/develop

Would you might trying this out and ensuring that it fixes your issue before I merge it into the master branch?

Thanks again!

signaturefish commented 13 years ago

Hello,

That looks like a fix, yes. The code in the develop branch does the Right Thing under PHP/PostgreSQL. I'm waiting for aquarion to test the develop branch under MySQL, but if it works for you I suspect we can call it fixed.

Thanks for the prompt reply

j4mie commented 13 years ago

Thanks. For the record, I've tested this on SQLite too.

aquarion commented 13 years ago

I've now tested that on MySQL and it's fine too. Thanks

j4mie commented 13 years ago

Just tagged version 1.1.1 of Idiorm (fixing the bug) and Paris (updating incorrect tests).

Thanks again for the report.

Jamie