Re: [HACKERS] Open 6.4 items

Поиск
Список
Период
Сортировка
От jwieck@debis.com (Jan Wieck)
Тема Re: [HACKERS] Open 6.4 items
Дата
Msg-id m0zYWRE-000EBPC@orion.SAPserv.Hamburg.dsh.de
обсуждение исходный текст
Ответ на Open 6.4 items  (Bruce Momjian <maillist@candle.pha.pa.us>)
Ответы Re: [HACKERS] Open 6.4 items
Re: [HACKERS] Open 6.4 items
Список pgsql-hackers
Bruce Momjian wrote:
>
> Additions
> ---------
> CREATE TABLE test (x text, s serial) fails if no database creation permission
> regression test all platforms

    The  patch  below  arranges  that the sequence(s) get created
    first.  Unprivileged user now can create  table  with  serial
    columns.

    Regression tested.


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#======================================== jwieck@debis.com (Jan Wieck) #


*** analyze.c.orig    Wed Oct 28 14:50:47 1998
--- analyze.c    Wed Oct 28 14:59:12 1998
***************
*** 42,48 ****
  static Query *transformCursorStmt(ParseState *pstate, SelectStmt *stmt);
  static Query *transformCreateStmt(ParseState *pstate, CreateStmt *stmt);

! List       *extras = NIL;

  /*
   * parse_analyze -
--- 42,49 ----
  static Query *transformCursorStmt(ParseState *pstate, SelectStmt *stmt);
  static Query *transformCreateStmt(ParseState *pstate, CreateStmt *stmt);

! List       *extras_before = NIL;
! List       *extras_after = NIL;

  /*
   * parse_analyze -
***************
*** 57,62 ****
--- 58,64 ----
  {
      QueryTreeList *result;
      ParseState *pstate;
+     Query *parsetree;
      int            i = 0;

      result = malloc(sizeof(QueryTreeList));
***************
*** 66,88 ****
      while (pl != NIL)
      {
          pstate = make_parsestate(parentParseState);
!         result->qtrees[i++] = transformStmt(pstate, lfirst(pl));
          if (pstate->p_target_relation != NULL)
              heap_close(pstate->p_target_relation);

!         if (extras != NIL)
          {
!             result->len += length(extras);
              result->qtrees = (Query **) realloc(result->qtrees, result->len * sizeof(Query *));
!             while (extras != NIL)
              {
!                 result->qtrees[i++] = transformStmt(pstate, lfirst(extras));
                  if (pstate->p_target_relation != NULL)
                      heap_close(pstate->p_target_relation);
!                 extras = lnext(extras);
              }
          }
!         extras = NIL;
          pl = lnext(pl);
          pfree(pstate);
      }
--- 68,107 ----
      while (pl != NIL)
      {
          pstate = make_parsestate(parentParseState);
!         parsetree = transformStmt(pstate, lfirst(pl));
          if (pstate->p_target_relation != NULL)
              heap_close(pstate->p_target_relation);

!         if (extras_before != NIL)
          {
!             result->len += length(extras_before);
              result->qtrees = (Query **) realloc(result->qtrees, result->len * sizeof(Query *));
!             while (extras_before != NIL)
              {
!                 result->qtrees[i++] = transformStmt(pstate, lfirst(extras_before));
                  if (pstate->p_target_relation != NULL)
                      heap_close(pstate->p_target_relation);
!                 extras_before = lnext(extras_before);
              }
          }
!         extras_before = NIL;
!
!         result->qtrees[i++] = parsetree;
!
!         if (extras_after != NIL)
!         {
!             result->len += length(extras_after);
!             result->qtrees = (Query **) realloc(result->qtrees, result->len * sizeof(Query *));
!             while (extras_after != NIL)
!             {
!                 result->qtrees[i++] = transformStmt(pstate, lfirst(extras_after));
!                 if (pstate->p_target_relation != NULL)
!                     heap_close(pstate->p_target_relation);
!                 extras_after = lnext(extras_after);
!             }
!         }
!         extras_after = NIL;
!
          pl = lnext(pl);
          pfree(pstate);
      }
***************
*** 487,492 ****
--- 506,512 ----
      Constraint *constraint;
      List       *keys;
      Ident       *key;
+     List       *blist = NIL;
      List       *ilist = NIL;
      IndexStmt  *index;
      IndexElem  *iparam;
***************
*** 553,559 ****
                      elog(NOTICE, "CREATE TABLE will create implicit sequence %s for SERIAL column %s.%s",
                        sequence->seqname, stmt->relname, column->colname);

!                     ilist = lcons(sequence, NIL);
                  }

                  if (column->constraints != NIL)
--- 573,579 ----
                      elog(NOTICE, "CREATE TABLE will create implicit sequence %s for SERIAL column %s.%s",
                        sequence->seqname, stmt->relname, column->colname);

!                     blist = lcons(sequence, NIL);
                  }

                  if (column->constraints != NIL)
***************
*** 745,751 ****
      }

      q->utilityStmt = (Node *) stmt;
!     extras = ilist;

      return q;
  }
--- 765,772 ----
      }

      q->utilityStmt = (Node *) stmt;
!     extras_before = blist;
!     extras_after = ilist;

      return q;
  }

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

Предыдущее
От: "TeknSOFT S.n.c."
Дата:
Сообщение: SCO 5.0.x binaries ?
Следующее
От: "Thomas G. Lockhart"
Дата:
Сообщение: Re: [HACKERS] AIX 4.2.1 regression test