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 по дате отправления: