Peter Rabbitson via RT wrote:
Show quoted text> <URL:
https://rt.cpan.org/Ticket/Display.html?id=58554 >
>
> On Mon Jun 21 04:10:56 2010, SREZIC wrote:
>
>> Using the following query:
>>
>> $schema->resultset('Test')->find({ col => 1}, { for => "update",
>> rows => 1});
>>
>> Generates the following error:
>>
>> DBIx::Class::ResultSet::find(): DBI Exception: DBD::mysql::st execute
>> failed: You have an error in your SQL syntax; check the manual that
>> corresponds to your MySQL server version for the right syntax to use
>> near 'LIMIT 1' at line 1 [for Statement "SELECT me.col FROM test me
>> WHERE ( me.col = ? ) FOR UPDATE LIMIT 1" with ParamValues: 0=1] at
>> ./dbixclass-forupdate.pl line 30
>>
>> A manual test in the mysql shell show the same problem. If the "FOR
>> UPDATE" and "LIMIT 1" expressions are swapped, then everything works. In
>> the 'net I found an old post about this problem:
>>
http://lists.mysql.com/internals/3246
>>
>>
>
> Damn that sucks :) Please supply a patch [1] to t/71mysql.t illustrating
> the problem (also include a version with LIMIT and OFFSET keywords). The
> fix shouldn't be too hard (some overrides in DBIC::SQLAHacks::MySQL)
>
Patch attached. FWIW, this test case passes with DBIx::Class 0.08120. So
a git bisect could probably help...
Regards,
Slaven
From 2926152c33b2bd41f7ba2ca383e51920b33a0e2b Mon Sep 17 00:00:00 2001
From: Slaven Rezic <srezic@iconmobile.com>
Date: Tue, 22 Jun 2010 10:55:48 +0200
Subject: [PATCH] test case for RT #58554 (FOR UPDATE together with LIMIT ...)
---
t/71mysql.t | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
mode change 100644 => 100755 t/71mysql.t
diff --git a/t/71mysql.t b/t/71mysql.t
old mode 100644
new mode 100755
index 8d5a323..d569d81
--- a/t/71mysql.t
+++ b/t/71mysql.t
@@ -334,4 +334,9 @@ my $schema2 = DBICTest::Schema->connect($dsn, $user, $pass);
$schema2->resultset("Artist")->find(4);
isa_ok($schema2->storage->sql_maker, 'DBIx::Class::SQLAHacks::MySQL');
+{ # RT #58554
+ $schema->resultset('CD')->find({cdid => 1}, {for => 'update', rows => 1});
+ pass 'Correct SQL for "LIMIT ... FOR UPDATE"';
+}
+
done_testing;
--
1.7.0.3