1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-22 21:53:06 +03:00

Allow FOR UPDATE to appear after LIMIT/OFFSET to match MySQL syntax and as

a more logical ordering.
This commit is contained in:
Bruce Momjian
2002-08-28 14:35:37 +00:00
parent 8e4357d8ad
commit 6077db92c2
4 changed files with 43 additions and 32 deletions

View File

@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.361 2002/08/27 04:55:08 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.362 2002/08/28 14:35:37 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -208,8 +208,8 @@ static void doNegateFloat(Value *v);
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,
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,26 +4180,32 @@ select_with_parens:
| '(' 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
* We now support both orderings, but prefer LIMIT/OFFSET before FOR UPDATE
* 2002-08-28 bjm
*/
select_no_parens:
simple_select { $$ = $1; }
| select_clause sort_clause opt_for_update_clause opt_select_limit
| 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 for_update_clause opt_select_limit
| select_clause opt_sort_clause select_limit opt_for_update_clause
{
insertSelectOptions((SelectStmt *) $1, NIL, $2,
insertSelectOptions((SelectStmt *) $1, $2, $4,
nth(0, $3), nth(1, $3));
$$ = $1;
}
| select_clause select_limit
{
insertSelectOptions((SelectStmt *) $1, NIL, NIL,
nth(0, $2), nth(1, $2));
$$ = $1;
}
;
select_clause:
@@ -4335,6 +4341,11 @@ opt_distinct:
| /*EMPTY*/ { $$ = NIL; }
;
opt_sort_clause:
sort_clause { $$ = $1;}
| /*EMPTY*/ { $$ = NIL; }
;
sort_clause:
ORDER BY sortby_list { $$ = $3; }
;