OK, patch attached. It was actually easier than I thought. We have to decide if we are going to remove the old syntax in 7.4.
Regression tests pass. No doc updates yet. --------------------------------------------------------------------------- Christopher Kings-Lynne wrote: > > OK, no one has commented on this, so I guess I am going to have to guess > > the group's preference. > > > > My guess, seeing as very few probably use LIMIT and FOR UPDATE together, > > is to swap them and document it in the release notes. Was I correct in > > my guess? > > I'm sure very few people do it - but are you sure you can't just allow both > syntaxes? > > Chris > > > ---------------------------(end of broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > > http://www.postgresql.org/users-lounge/docs/faq.html > -- 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: src/backend/parser/gram.y =================================================================== RCS file: /cvsroot/pgsql-server/src/backend/parser/gram.y,v retrieving revision 2.361 diff -c -c -r2.361 gram.y *** src/backend/parser/gram.y 27 Aug 2002 04:55:08 -0000 2.361 --- src/backend/parser/gram.y 28 Aug 2002 02:42:16 -0000 *************** *** 208,215 **** func_args_list, func_as, createfunc_opt_list oper_argtypes, RuleActionList, RuleActionMulti, opt_column_list, columnList, opt_name_list, ! sort_clause, sortby_list, index_params, index_list, ! name_list, from_clause, from_list, opt_array_bounds, qualified_name_list, any_name, any_name_list, any_operator, expr_list, dotted_name, attrs, target_list, update_target_list, insert_column_list, --- 208,215 ---- func_args_list, func_as, createfunc_opt_list oper_argtypes, RuleActionList, RuleActionMulti, opt_column_list, columnList, opt_name_list, ! sort_clause, opt_sort_clause, sortby_list, index_params, ! index_list,name_list, from_clause, from_list, opt_array_bounds, qualified_name_list, any_name, any_name_list, any_operator, expr_list, dotted_name, attrs, target_list, update_target_list, insert_column_list, *************** *** 4180,4203 **** | '(' select_with_parens ')' { $$ = $2; } ; select_no_parens: simple_select { $$ = $1; } ! | select_clause sort_clause opt_for_update_clause opt_select_limit { ! insertSelectOptions((SelectStmt *) $1, $2, $3, ! nth(0, $4), nth(1, $4)); $$ = $1; } ! | select_clause for_update_clause opt_select_limit { ! insertSelectOptions((SelectStmt *) $1, NIL, $2, ! nth(0, $3), nth(1, $3)); $$ = $1; } ! | select_clause select_limit { ! insertSelectOptions((SelectStmt *) $1, NIL, NIL, ! nth(0, $2), nth(1, $2)); $$ = $1; } ; --- 4180,4208 ---- | '(' select_with_parens ')' { $$ = $2; } ; + /* + * FOR UPDATE may be before or after LIMIT/OFFSET. + * In <=7.2.X, LIMIT/OFFSET had to be after FOR UPDATE + * In >7.3.X, LIMIT/OFFSET will have to be before FOR UPDATE + */ select_no_parens: simple_select { $$ = $1; } ! | select_clause sort_clause { ! insertSelectOptions((SelectStmt *) $1, $2, NIL, ! NULL, NULL); $$ = $1; } ! | select_clause opt_sort_clause for_update_clause opt_select_limit { ! insertSelectOptions((SelectStmt *) $1, $2, $3, ! nth(0, $4), nth(1, $4)); $$ = $1; } ! | select_clause opt_sort_clause select_limit opt_for_update_clause { ! insertSelectOptions((SelectStmt *) $1, $2, $4, ! nth(0, $3), nth(1, $3)); $$ = $1; } ; *************** *** 4332,4337 **** --- 4337,4347 ---- DISTINCT { $$ = makeList1(NIL); } | DISTINCT ON '(' expr_list ')' { $$ = $4; } | ALL { $$ = NIL; } + | /*EMPTY*/ + { $$ = NIL; } + ; + + opt_sort_clause: + sort_clause + { $$ = $1;} | /*EMPTY*/ { $$ = NIL; } ;
---------------------------(end of broadcast)--------------------------- TIP 2: you can get off all lists at once with the unregister command (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])