Re: [SQL] LIMIT 1 FOR UPDATE or FOR UPDATE LIMIT 1?

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: [SQL] LIMIT 1 FOR UPDATE or FOR UPDATE LIMIT 1?
Дата
Msg-id 200208280245.g7S2jO803463@candle.pha.pa.us
обсуждение исходный текст
Ответы Re: [SQL] LIMIT 1 FOR UPDATE or FOR UPDATE LIMIT 1?
Re: [SQL] LIMIT 1 FOR UPDATE or FOR UPDATE LIMIT 1?
Список pgsql-hackers
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
  pgman@candle.pha.pa.us               |  (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; }
          ;


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Gavin Sherry
Дата:
Сообщение: Re: Proposed GUC Variable
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: [PATCHES] fix for palloc() of user-supplied length