Received: from dsh.de (firewall-user@neptun.sns-felb.debis.de [53.122.101.2]) by hub.org (8.9.1/8.9.1) with ESMTP id JAA14615 for ; Wed, 28 Oct 1998 09:02:33 -0500 (EST) (envelope-from wieck@sapserv.debis.de) Received: by dsh.de; id PAA11715; Wed, 28 Oct 1998 15:04:53 +0100 (MET) Received: from dshmail.dsh.de(53.47.15.3) by neptun.dsh.de via smap (3.2) id xma011479; Wed, 28 Oct 98 15:04:35 +0100 Received: from mail1.hh1.dsh.de (mail1.hh1.dsh.de [53.47.9.5]) by dshmail.dsh.de (8.8.7/8.8.7) with ESMTP id PAA28387; Wed, 28 Oct 1998 15:02:13 +0100 (MET) Received: from mars.SAPserv.Hamburg.dsh.de (root@mail5.hh1.dsh.de [53.2.168.17]) by mail1.hh1.dsh.de (8.8.7/8.8.7) with SMTP id PAA30175; Wed, 28 Oct 1998 15:04:49 +0100 Received: from orion.SAPserv.Hamburg.dsh.de by mars.SAPserv.Hamburg.dsh.de with smtp for <> id m0zYTsd-000B5AC; Wed, 28 Oct 98 12:35 MET Received: by orion.SAPserv.Hamburg.dsh.de for maillist@candle.pha.pa.us id m0zYWRE-000EBPC; Wed, 28 Oct 98 15:19 MET Message-Id: From: jwieck@debis.com (Jan Wieck) Subject: Re: [HACKERS] Open 6.4 items To: maillist@candle.pha.pa.us (Bruce Momjian) Date: Wed, 28 Oct 1998 15:19:03 +0100 (MET) Cc: hackers@postgreSQL.org Reply-To: jwieck@debis.com (Jan Wieck) In-Reply-To: <199810280517.AAA09187@candle.pha.pa.us> from "Bruce Momjian" at Oct 28, 98 00:17:54 am X-Mailer: ELM [version 2.4 PL25] Content-Type: text 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; }