Re: [HACKERS] Open 6.4 items - Mailing list pgsql-hackers
From | jwieck@debis.com (Jan Wieck) |
---|---|
Subject | Re: [HACKERS] Open 6.4 items |
Date | |
Msg-id | m0zYWRE-000EBPC@orion.SAPserv.Hamburg.dsh.de Whole thread Raw |
In response to | Open 6.4 items (Bruce Momjian <maillist@candle.pha.pa.us>) |
Responses |
Re: [HACKERS] Open 6.4 items
Re: [HACKERS] Open 6.4 items |
List | 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 by date: