Skip to content

Commit 0bd3606

Browse files
author
Neil Conway
committed
Fix a minor bug introduced by the recent CREATE TABLE AS / WITH OIDS
patch: a 3-value enum was mistakenly assigned directly to a 'bool' in transformCreateStmt(). Along the way, change makeObjectName() to be static, as it isn't used outside analyze.c
1 parent cd1702d commit 0bd3606

File tree

5 files changed

+39
-42
lines changed

5 files changed

+39
-42
lines changed

src/backend/commands/tablecmds.c

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.95 2004/01/10 23:28:44 neilc Exp $
11+
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.96 2004/01/23 02:13:11 neilc Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -39,6 +39,7 @@
3939
#include "optimizer/plancat.h"
4040
#include "optimizer/prep.h"
4141
#include "parser/gramparse.h"
42+
#include "parser/parse_clause.h"
4243
#include "parser/parse_coerce.h"
4344
#include "parser/parse_expr.h"
4445
#include "parser/parse_oper.h"
@@ -47,7 +48,6 @@
4748
#include "utils/acl.h"
4849
#include "utils/builtins.h"
4950
#include "utils/fmgroids.h"
50-
#include "utils/guc.h"
5151
#include "utils/inval.h"
5252
#include "utils/lsyscache.h"
5353
#include "utils/relcache.h"
@@ -189,22 +189,7 @@ DefineRelation(CreateStmt *stmt, char relkind)
189189
if (parentHasOids)
190190
descriptor->tdhasoid = true;
191191
else
192-
{
193-
switch (stmt->hasoids)
194-
{
195-
case MUST_HAVE_OIDS:
196-
descriptor->tdhasoid = true;
197-
break;
198-
199-
case MUST_NOT_HAVE_OIDS:
200-
descriptor->tdhasoid = false;
201-
break;
202-
203-
case DEFAULT_OIDS:
204-
descriptor->tdhasoid = default_with_oids;
205-
break;
206-
}
207-
}
192+
descriptor->tdhasoid = interpretOidsOption(stmt->hasoids);
208193

209194
if (old_constraints != NIL)
210195
{

src/backend/parser/analyze.c

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
9-
* $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.296 2004/01/14 23:01:55 tgl Exp $
9+
* $PostgreSQL: pgsql/src/backend/parser/analyze.c,v 1.297 2004/01/23 02:13:12 neilc Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -142,6 +142,7 @@ static void release_pstate_resources(ParseState *pstate);
142142
static FromExpr *makeFromExpr(List *fromlist, Node *quals);
143143
static bool check_parameter_resolution_walker(Node *node,
144144
check_parameter_resolution_context *context);
145+
static char *makeObjectName(char *name1, char *name2, char *typename);
145146

146147

147148
/*
@@ -735,7 +736,7 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt,
735736
* from the truncated characters. Currently it seems best to keep it simple,
736737
* so that the generated names are easily predictable by a person.
737738
*/
738-
char *
739+
static char *
739740
makeObjectName(char *name1, char *name2, char *typename)
740741
{
741742
char *name;
@@ -859,7 +860,6 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt,
859860
cxt.stmtType = "CREATE TABLE";
860861
cxt.relation = stmt->relation;
861862
cxt.inhRelations = stmt->inhRelations;
862-
cxt.hasoids = stmt->hasoids;
863863
cxt.relOid = InvalidOid;
864864
cxt.columns = NIL;
865865
cxt.ckconstraints = NIL;
@@ -868,6 +868,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt,
868868
cxt.blist = NIL;
869869
cxt.alist = NIL;
870870
cxt.pkey = NULL;
871+
cxt.hasoids = interpretOidsOption(stmt->hasoids);
871872

872873
/*
873874
* Run through each primary element in the table creation clause.
@@ -1979,20 +1980,7 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt)
19791980
if (stmt->intoColNames)
19801981
applyColumnNames(qry->targetList, stmt->intoColNames);
19811982

1982-
switch (stmt->intoHasOids)
1983-
{
1984-
case MUST_HAVE_OIDS:
1985-
qry->intoHasOids = true;
1986-
break;
1987-
1988-
case MUST_NOT_HAVE_OIDS:
1989-
qry->intoHasOids = false;
1990-
break;
1991-
1992-
case DEFAULT_OIDS:
1993-
qry->intoHasOids = default_with_oids;
1994-
break;
1995-
}
1983+
qry->intoHasOids = interpretOidsOption(stmt->intoHasOids);
19961984

19971985
/* mark column origins */
19981986
markTargetListOrigins(pstate, qry->targetList);

src/backend/parser/parse_clause.c

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.126 2004/01/14 23:01:55 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.127 2004/01/23 02:13:12 neilc Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -191,7 +191,33 @@ interpretInhOption(InhOption inhOpt)
191191
case INH_DEFAULT:
192192
return SQL_inheritance;
193193
}
194-
elog(ERROR, "bogus InhOption value");
194+
elog(ERROR, "bogus InhOption value: %d", inhOpt);
195+
return false; /* keep compiler quiet */
196+
}
197+
198+
/*
199+
* Given an enum that indicates whether WITH / WITHOUT OIDS was
200+
* specified by the user, return true iff the specified table/result
201+
* set should be created with OIDs. This needs to be done after
202+
* parsing the query string because the return value can depend upon
203+
* the default_with_oids GUC var.
204+
*/
205+
bool
206+
interpretOidsOption(ContainsOids opt)
207+
{
208+
switch (opt)
209+
{
210+
case MUST_HAVE_OIDS:
211+
return true;
212+
213+
case MUST_NOT_HAVE_OIDS:
214+
return false;
215+
216+
case DEFAULT_OIDS:
217+
return default_with_oids;
218+
}
219+
220+
elog(ERROR, "bogus ContainsOids value: %d", opt);
195221
return false; /* keep compiler quiet */
196222
}
197223

src/include/parser/analyze.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
9-
* $PostgreSQL: pgsql/src/include/parser/analyze.h,v 1.24 2003/11/29 22:41:09 pgsql Exp $
9+
* $PostgreSQL: pgsql/src/include/parser/analyze.h,v 1.25 2004/01/23 02:13:12 neilc Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -24,7 +24,4 @@ extern List *analyzeCreateSchemaStmt(CreateSchemaStmt *stmt);
2424

2525
extern void CheckSelectForUpdate(Query *qry);
2626

27-
/* This was exported to allow ADD CONSTRAINT to make use of it */
28-
extern char *makeObjectName(char *name1, char *name2, char *typename);
29-
3027
#endif /* ANALYZE_H */

src/include/parser/parse_clause.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/parser/parse_clause.h,v 1.39 2004/01/14 23:01:55 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/parser/parse_clause.h,v 1.40 2004/01/23 02:13:12 neilc Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -20,6 +20,7 @@ extern void transformFromClause(ParseState *pstate, List *frmList);
2020
extern int setTargetTable(ParseState *pstate, RangeVar *relation,
2121
bool inh, bool alsoSource, AclMode requiredPerms);
2222
extern bool interpretInhOption(InhOption inhOpt);
23+
extern bool interpretOidsOption(ContainsOids opt);
2324

2425
extern Node *transformWhereClause(ParseState *pstate, Node *clause,
2526
const char *constructName);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy