Re: [HACKERS] Open 6.4 items

Поиск
Список
Период
Сортировка
От The Hermit Hacker
Тема Re: [HACKERS] Open 6.4 items
Дата
Msg-id Pine.BSF.4.05.9810281114240.1918-100000@thelab.hub.org
обсуждение исходный текст
Ответ на Re: [HACKERS] Open 6.4 items  (jwieck@debis.com (Jan Wieck))
Ответы Re: [HACKERS] Open 6.4 items
Список pgsql-hackers
On Wed, 28 Oct 1998, Jan Wieck wrote:

> 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.
Is this safe to leave until post-v6.4 released? 
> 
>     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;
>   }
> 

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 



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

Предыдущее
От: "Thomas G. Lockhart"
Дата:
Сообщение: Re: [HACKERS] AIX 4.2.1 regression test
Следующее
От: "Thomas G. Lockhart"
Дата:
Сообщение: Re: [HACKERS] New INET and CIDR types