Обсуждение: Open 6.4 items
Additions --------- CREATE TABLE test (x text, s serial) fails if no database creation permission regression test all platforms Serious Items ------------ change pg args for platforms that don't support argv changes(setproctitle()?, sendmail hack?) Docs ---- generate html/postscript documentation (User's Guide, Administrator's Guide, Programmer's Guide) (Thomas) make sure all changes are documented properly markup and merge JDBC docs from Peter (Thomas, others??) merge the release notes into doc/src/sgml/release.sgml (Bruce, Thomas) generate new text-format INSTALL and README from sgml sources (Thomas) markup of Jan's PL docs Minor items ----------- cnf-ify still can exhaust memory, make SET KSQO more generic permissions on indexes: what do they do? should it be prevented? allow multiple generic operators in expressions without the use of parentheses document/trigger/rule so changes to pg_shadow create pg_pwd large objects orphanage improve group handling improve PRIMARY KEY handling generate postmaster pid file and remove flock/fcntl lock code add ability to specifiy location of lock/socket files -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
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; }
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
Marc wrote: > > 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? I just did it now to let Bruce get rid of the open item. If it shouldn't be in 6.4, why is it on it's open item list then? 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) #
Thanks. Applied. > 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; > } > -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
> Marc wrote: > > > > > 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? > > I just did it now to let Bruce get rid of the open item. If > it shouldn't be in 6.4, why is it on it's open item list > then? It has been on the open items. In fact, it is the only hot item, except for the 'pg args' thing, which is not as hot. It is serious breakage, in the sense that if we don't fix it, we must remove reference to the new SERIAL type. As to why no one fixed it earlier, ...? Must be the same reason 'ps args' is not fixed. :-) -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
> > Thanks. Applied. > > > 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. So Marc's assumption that his BETA3 is what we release was false. We really know how to trigger his hot buttons - eh? :-) 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) #
> > > > Thanks. Applied. > > > > > 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. > > So Marc's assumption that his BETA3 is what we release was > false. We really know how to trigger his hot buttons - eh? > :-) You want even worse. I fixed a problem in the system table just now with the lseg_eq <> problem. That requires an initdb for people to see the fix. But we might as well fix it now, because we can't ask for initdb after the final release. Can someone check that that fix does not affect the regression test results? I doubt we do lseg not-equal tests in the regression suite. You will have to do an initdb to see the change. -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
> It is serious breakage, in the sense that if we don't fix it, we must > remove reference to the new SERIAL type. > As to why no one fixed it earlier, ...? Must be the same reason 'ps > args' is not fixed. :-) I'm comfortable with Jan's patches, and it's my code he's mucking with :) For the transformation from serial to int4 with index and sequence, the only time that code gets traversed is for the serial type. So it shouldn't have hidden side effects (yeah, sure...) 'Course, I see Bruce has already committed it anyway... - Tom
> So Marc's assumption that his BETA3 is what we release was > false. We really know how to trigger his hot buttons - eh? > :-) Good point. I just committed a _very_ small bit of code in the ODBC interface which is non-essential, but potentially useful. Also, he will have to rebuild a tarball one more time anyway to get the new docs, which won't be finished until the last minute. Just to get his blood pressure up, I'll mention that there is a chance I'll ask for a couple of extra days to finish docs, but I'm hoping to have them done on time :) - Tom
Bruce Momjian <maillist@candle.pha.pa.us> writes: > But we might as well fix it now, because we can't ask for initdb after > the final release. > Can someone check that that fix does not affect the regression test > results? I doubt we do lseg not-equal tests in the regression suite. > You will have to do an initdb to see the change. I just rebuilt and initdb'd. Regression test state is the same as before, except that the new inet test fails: *** expected/inet.out Tue Oct 27 14:34:02 1998 --- results/inet.out Wed Oct 28 14:02:45 1998 *************** *** 53,66 **** i as inet, network(i) as "network(inet)" FROM INET_TBL; eight|cidr |network(cidr)|inet |network(inet) -----+------------+-------------+----------------+------------- ! |192.168.1/24| 0.1.168.192|192.168.1.226/24| 0.1.168.192 ! |192.168.1/24| 0.1.168.192|192.168.1.226 |226.1.168.192 ! |10/8 | 0.0.0.10|10.1.2.3/8 | 0.0.0.10 ! |10.0.0.0/32 | 0.0.0.10|10.1.2.3/8 | 0.0.0.10 ! |10.1.2.3/32 | 3.2.1.10|10.1.2.3 | 3.2.1.10 ! |10.1.2/24 | 0.2.1.10|10.1.2.3/24 | 0.2.1.10 ! |10.1/16 | 0.0.1.10|10.1.2.3/16 | 0.0.1.10 ! |10/8 | 0.0.0.10|10.1.2.3/8 | 0.0.0.10 (8 rows) QUERY: SELECT '' as eight, c as cidr, masklen(c)as "masklen(cidr)", --- 53,66 ---- i as inet, network(i) as "network(inet)" FROM INET_TBL; eight|cidr |network(cidr)|inet |network(inet) -----+------------+-------------+----------------+------------- ! |192.168.1/24| 192.168.1.0|192.168.1.226/24| 192.168.1.0 ! |192.168.1/24| 192.168.1.0|192.168.1.226 |192.168.1.226 ! |10/8 | 10.0.0.0|10.1.2.3/8 | 10.0.0.0 ! |10.0.0.0/32 | 10.0.0.0|10.1.2.3/8 | 10.0.0.0 ! |10.1.2.3/32 | 10.1.2.3|10.1.2.3 | 10.1.2.3 ! |10.1.2/24 | 10.1.2.0|10.1.2.3/24 | 10.1.2.0 ! |10.1/16 | 10.1.0.0|10.1.2.3/16 | 10.1.0.0 ! |10/8 | 10.0.0.0|10.1.2.3/8 | 10.0.0.0 (8 rows) QUERY: SELECT '' as eight, c as cidr, masklen(c)as "masklen(cidr)", ---------------------- Offhand I would say that it's the "expected" file that is broken. Shouldn't those octets be coming out in the other order? regards, tom lane
On Wed, 28 Oct 1998, Jan Wieck wrote: > > > > Thanks. Applied. > > > > > 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. > > So Marc's assumption that his BETA3 is what we release was > false. We really know how to trigger his hot buttons - eh? > :-) If it was 'the release', it wouldn't have been named BETA :) I'll build a BETA4 tomorrow...release set for Monday... Marc G. Fournier Systems Administrator @ hub.org primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org