I found this email from April.  It properly points out that our
LIMIT/FOR UPDATE ordering doesn't match MySQL's, and MySQL's looks more
correct, specifically that the FOR UPDATE is after the LIMIT.  Our
grammar is:

       | select_clause sort_clause opt_for_update_clause opt_select_limit

How do we want to deal with this?  I tried allowing both orderings with
the attached patch but got:

        bison -y -d  gram.y
        conflicts:  4 shift/reduce, 5 reduce/reduce

---------------------------------------------------------------------------

Magnus Enbom wrote:
> Hi,
> 
> I've just been hit by a small but annoying difference between postgres(7.2)
> and mysql(4.x).
> In postgresql you do:
> 
> SELECT * FROM table FOR UPDATE LIMIT 1;
> 
> and in mysql you do:
> 
> SELECT * FROM table LIMIT 1 FOR UPDATE;
> 
> Is it possible for postgres to accept the mysql syntax as well?
> It's not that many databases that implement LIMIT, so it would be nice if the
> ones that do have the same syntax(or can accept each others variants).
> 
> -- Magnus
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: gram.y
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/parser/gram.y,v
retrieving revision 2.360
diff -c -r2.360 gram.y
*** gram.y      19 Aug 2002 15:08:47 -0000      2.360
--- gram.y      26 Aug 2002 00:29:24 -0000
***************
*** 4114,4123 ****
--- 4114,4135 ----
                                                                                nth(0, 
$4), nth(1, $4));
                                        $$ = $1;
                                }
+                       | select_clause sort_clause opt_select_limit 
+opt_for_update_clause
+                               {
+                                       insertSelectOptions((SelectStmt *) $1, $2, $4,
+                                                                               nth(0, 
+$3), nth(1, $3));
+                                       $$ = $1;
+                               }
                        | select_clause for_update_clause opt_select_limit
                                {
                                        insertSelectOptions((SelectStmt *) $1, NIL, $2,
                                                                                nth(0, 
$3), nth(1, $3));
+                                       $$ = $1;
+                               }
+                       | select_clause opt_select_limit for_update_clause
+                               {
+                                       insertSelectOptions((SelectStmt *) $1, NIL, $3,
+                                                                               nth(0, 
+$2), nth(1, $2));
                                        $$ = $1;
                                }
                        | select_clause select_limit

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to