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])