aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/gram.y48
-rw-r--r--src/backend/parser/parse_clause.c40
-rw-r--r--src/backend/parser/parse_oper.c2
-rw-r--r--src/backend/parser/parse_relation.c23
-rw-r--r--src/backend/parser/parse_target.c2
-rw-r--r--src/backend/parser/parse_type.c16
-rw-r--r--src/backend/parser/parse_utilcmd.c46
7 files changed, 39 insertions, 138 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 2effd511358..2c2208ffb72 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -440,7 +440,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%type <boolean> opt_instead
%type <boolean> opt_unique opt_concurrently opt_verbose opt_full
%type <boolean> opt_freeze opt_analyze opt_default opt_recheck
-%type <defelt> opt_binary opt_oids copy_delimiter
+%type <defelt> opt_binary copy_delimiter
%type <boolean> copy_from opt_program
@@ -2311,14 +2311,7 @@ alter_table_cmd:
n->missing_ok = false;
$$ = (Node *)n;
}
- /* ALTER TABLE <name> SET WITH OIDS */
- | SET WITH OIDS
- {
- AlterTableCmd *n = makeNode(AlterTableCmd);
- n->subtype = AT_AddOids;
- $$ = (Node *)n;
- }
- /* ALTER TABLE <name> SET WITHOUT OIDS */
+ /* ALTER TABLE <name> SET WITHOUT OIDS, for backward compat */
| SET WITHOUT OIDS
{
AlterTableCmd *n = makeNode(AlterTableCmd);
@@ -2961,23 +2954,23 @@ ClosePortalStmt:
* syntax had a hard-wired, space-separated set of options.
*
* Really old syntax, from versions 7.2 and prior:
- * COPY [ BINARY ] table [ WITH OIDS ] FROM/TO file
+ * COPY [ BINARY ] table FROM/TO file
* [ [ USING ] DELIMITERS 'delimiter' ] ]
* [ WITH NULL AS 'null string' ]
* This option placement is not supported with COPY (query...).
*
*****************************************************************************/
-CopyStmt: COPY opt_binary qualified_name opt_column_list opt_oids
+CopyStmt: COPY opt_binary qualified_name opt_column_list
copy_from opt_program copy_file_name copy_delimiter opt_with copy_options
{
CopyStmt *n = makeNode(CopyStmt);
n->relation = $3;
n->query = NULL;
n->attlist = $4;
- n->is_from = $6;
- n->is_program = $7;
- n->filename = $8;
+ n->is_from = $5;
+ n->is_program = $6;
+ n->filename = $7;
if (n->is_program && n->filename == NULL)
ereport(ERROR,
@@ -2989,12 +2982,10 @@ CopyStmt: COPY opt_binary qualified_name opt_column_list opt_oids
/* Concatenate user-supplied flags */
if ($2)
n->options = lappend(n->options, $2);
- if ($5)
- n->options = lappend(n->options, $5);
- if ($9)
- n->options = lappend(n->options, $9);
- if ($11)
- n->options = list_concat(n->options, $11);
+ if ($8)
+ n->options = lappend(n->options, $8);
+ if ($10)
+ n->options = list_concat(n->options, $10);
$$ = (Node *)n;
}
| COPY '(' PreparableStmt ')' TO opt_program copy_file_name opt_with copy_options
@@ -3054,10 +3045,6 @@ copy_opt_item:
{
$$ = makeDefElem("format", (Node *)makeString("binary"), @1);
}
- | OIDS
- {
- $$ = makeDefElem("oids", (Node *)makeInteger(true), @1);
- }
| FREEZE
{
$$ = makeDefElem("freeze", (Node *)makeInteger(true), @1);
@@ -3118,14 +3105,6 @@ opt_binary:
| /*EMPTY*/ { $$ = NULL; }
;
-opt_oids:
- WITH OIDS
- {
- $$ = makeDefElem("oids", (Node *)makeInteger(true), @1);
- }
- | /*EMPTY*/ { $$ = NULL; }
- ;
-
copy_delimiter:
opt_using DELIMITERS Sconst
{
@@ -3942,11 +3921,10 @@ part_elem: ColId opt_collate opt_class
$$ = n;
}
;
-/* WITH (options) is preferred, WITH OIDS and WITHOUT OIDS are legacy forms */
+/* WITHOUT OIDS is legacy only */
OptWith:
WITH reloptions { $$ = $2; }
- | WITH OIDS { $$ = list_make1(makeDefElem("oids", (Node *) makeInteger(true), @1)); }
- | WITHOUT OIDS { $$ = list_make1(makeDefElem("oids", (Node *) makeInteger(false), @1)); }
+ | WITHOUT OIDS { $$ = NIL; }
| /*EMPTY*/ { $$ = NIL; }
;
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c
index 660011a3ec3..4ba51203a6a 100644
--- a/src/backend/parser/parse_clause.c
+++ b/src/backend/parser/parse_clause.c
@@ -250,46 +250,6 @@ setTargetTable(ParseState *pstate, RangeVar *relation,
}
/*
- * Given a relation-options list (of DefElems), return true iff the specified
- * table/result set should be created with OIDs. This needs to be done after
- * parsing the query string because the return value can depend upon the
- * default_with_oids GUC var.
- *
- * In some situations, we want to reject an OIDS option even if it's present.
- * That's (rather messily) handled here rather than reloptions.c, because that
- * code explicitly punts checking for oids to here.
- */
-bool
-interpretOidsOption(List *defList, bool allowOids)
-{
- ListCell *cell;
-
- /* Scan list to see if OIDS was included */
- foreach(cell, defList)
- {
- DefElem *def = (DefElem *) lfirst(cell);
-
- if (def->defnamespace == NULL &&
- strcmp(def->defname, "oids") == 0)
- {
- if (!allowOids)
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("unrecognized parameter \"%s\"",
- def->defname)));
- return defGetBoolean(def);
- }
- }
-
- /* Force no-OIDS result if caller disallows OIDS. */
- if (!allowOids)
- return false;
-
- /* OIDS option was not specified, so use default. */
- return default_with_oids;
-}
-
-/*
* Extract all not-in-common columns from column lists of a source table
*/
static void
diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c
index b279e1236ad..2f780b9941d 100644
--- a/src/backend/parser/parse_oper.c
+++ b/src/backend/parser/parse_oper.c
@@ -244,7 +244,7 @@ get_sort_group_operators(Oid argtype,
Oid
oprid(Operator op)
{
- return HeapTupleGetOid(op);
+ return ((Form_pg_operator) GETSTRUCT(op))->oid;
}
/* given operator tuple, return the underlying function's OID */
diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c
index 66a7105b099..378cbcbf79e 100644
--- a/src/backend/parser/parse_relation.c
+++ b/src/backend/parser/parse_relation.c
@@ -1528,7 +1528,7 @@ addRangeTableEntryForFunction(ParseState *pstate,
else if (functypclass == TYPEFUNC_SCALAR)
{
/* Base data type, i.e. scalar */
- tupdesc = CreateTemplateTupleDesc(1, false);
+ tupdesc = CreateTemplateTupleDesc(1);
TupleDescInitEntry(tupdesc,
(AttrNumber) 1,
chooseScalarFunctionAlias(funcexpr, funcname,
@@ -1545,7 +1545,7 @@ addRangeTableEntryForFunction(ParseState *pstate,
* Use the column definition list to construct a tupdesc and fill
* in the RangeTblFunction's lists.
*/
- tupdesc = CreateTemplateTupleDesc(list_length(coldeflist), false);
+ tupdesc = CreateTemplateTupleDesc(list_length(coldeflist));
i = 1;
foreach(col, coldeflist)
{
@@ -1619,7 +1619,7 @@ addRangeTableEntryForFunction(ParseState *pstate,
totalatts++;
/* Merge the tuple descs of each function into a composite one */
- tupdesc = CreateTemplateTupleDesc(totalatts, false);
+ tupdesc = CreateTemplateTupleDesc(totalatts);
natts = 0;
for (i = 0; i < nfuncs; i++)
{
@@ -3113,10 +3113,7 @@ attnameAttNum(Relation rd, const char *attname, bool sysColOK)
if (sysColOK)
{
if ((i = specialAttNum(attname)) != InvalidAttrNumber)
- {
- if (i != ObjectIdAttributeNumber || rd->rd_rel->relhasoids)
- return i;
- }
+ return i;
}
/* on failure */
@@ -3125,20 +3122,18 @@ attnameAttNum(Relation rd, const char *attname, bool sysColOK)
/* specialAttNum()
*
- * Check attribute name to see if it is "special", e.g. "oid".
+ * Check attribute name to see if it is "special", e.g. "xmin".
* - thomas 2000-02-07
*
* Note: this only discovers whether the name could be a system attribute.
- * Caller needs to verify that it really is an attribute of the rel,
- * at least in the case of "oid", which is now optional.
+ * Caller needs to ensure that it really is an attribute of the rel.
*/
static int
specialAttNum(const char *attname)
{
const FormData_pg_attribute *sysatt;
- sysatt = SystemAttributeByName(attname,
- true /* "oid" will be accepted */ );
+ sysatt = SystemAttributeByName(attname);
if (sysatt != NULL)
return sysatt->attnum;
return InvalidAttrNumber;
@@ -3159,7 +3154,7 @@ attnumAttName(Relation rd, int attid)
{
const FormData_pg_attribute *sysatt;
- sysatt = SystemAttributeDefinition(attid, rd->rd_rel->relhasoids);
+ sysatt = SystemAttributeDefinition(attid);
return &sysatt->attname;
}
if (attid > rd->rd_att->natts)
@@ -3181,7 +3176,7 @@ attnumTypeId(Relation rd, int attid)
{
const FormData_pg_attribute *sysatt;
- sysatt = SystemAttributeDefinition(attid, rd->rd_rel->relhasoids);
+ sysatt = SystemAttributeDefinition(attid);
return sysatt->atttypid;
}
if (attid > rd->rd_att->natts)
diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c
index 3d31be38d56..b8702d914dc 100644
--- a/src/backend/parser/parse_target.c
+++ b/src/backend/parser/parse_target.c
@@ -1503,7 +1503,7 @@ expandRecordVariable(ParseState *pstate, Var *var, int levelsup)
expandRTE(rte, var->varno, 0, var->location, false,
&names, &vars);
- tupleDesc = CreateTemplateTupleDesc(list_length(vars), false);
+ tupleDesc = CreateTemplateTupleDesc(list_length(vars));
i = 1;
forboth(lname, names, lvar, vars)
{
diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c
index d959b6122a5..a9dead5ae01 100644
--- a/src/backend/parser/parse_type.c
+++ b/src/backend/parser/parse_type.c
@@ -161,7 +161,7 @@ LookupTypeName(ParseState *pstate, const TypeName *typeName,
namespaceId = LookupExplicitNamespace(schemaname, missing_ok);
if (OidIsValid(namespaceId))
- typoid = GetSysCacheOid2(TYPENAMENSP,
+ typoid = GetSysCacheOid2(TYPENAMENSP, Anum_pg_type_oid,
PointerGetDatum(typname),
ObjectIdGetDatum(namespaceId));
else
@@ -230,7 +230,7 @@ LookupTypeNameOid(ParseState *pstate, const TypeName *typeName, bool missing_ok)
return InvalidOid;
}
- typoid = HeapTupleGetOid(tup);
+ typoid = ((Form_pg_type) GETSTRUCT(tup))->oid;
ReleaseSysCache(tup);
return typoid;
@@ -277,7 +277,7 @@ typenameTypeId(ParseState *pstate, const TypeName *typeName)
Type tup;
tup = typenameType(pstate, typeName, NULL);
- typoid = HeapTupleGetOid(tup);
+ typoid = ((Form_pg_type) GETSTRUCT(tup))->oid;
ReleaseSysCache(tup);
return typoid;
@@ -296,7 +296,7 @@ typenameTypeIdAndMod(ParseState *pstate, const TypeName *typeName,
Type tup;
tup = typenameType(pstate, typeName, typmod_p);
- *typeid_p = HeapTupleGetOid(tup);
+ *typeid_p = ((Form_pg_type) GETSTRUCT(tup))->oid;
ReleaseSysCache(tup);
}
@@ -572,7 +572,7 @@ typeTypeId(Type tp)
{
if (tp == NULL) /* probably useless */
elog(ERROR, "typeTypeId() called with NULL type struct");
- return HeapTupleGetOid(tp);
+ return ((Form_pg_type) GETSTRUCT(tp))->oid;
}
/* given type (as type struct), return the length of type */
@@ -832,13 +832,15 @@ parseTypeString(const char *str, Oid *typeid_p, int32 *typmod_p, bool missing_ok
}
else
{
- if (!((Form_pg_type) GETSTRUCT(tup))->typisdefined)
+ Form_pg_type typ = (Form_pg_type) GETSTRUCT(tup);
+
+ if (!typ->typisdefined)
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_OBJECT),
errmsg("type \"%s\" is only a shell",
TypeNameToString(typeName)),
parser_errposition(NULL, typeName->location)));
- *typeid_p = HeapTupleGetOid(tup);
+ *typeid_p = typ->oid;
ReleaseSysCache(tup);
}
}
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index 2e222d822b3..52582d0a13f 100644
--- a/src/backend/parser/parse_utilcmd.c
+++ b/src/backend/parser/parse_utilcmd.c
@@ -80,7 +80,6 @@ typedef struct
List *inhRelations; /* relations to inherit from */
bool isforeign; /* true if CREATE/ALTER FOREIGN TABLE */
bool isalter; /* true if altering existing table */
- bool hasoids; /* does relation have an OID column? */
List *columns; /* ColumnDef items */
List *ckconstraints; /* CHECK constraints */
List *fkconstraints; /* FOREIGN KEY constraints */
@@ -168,7 +167,6 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)
Oid namespaceid;
Oid existing_relid;
ParseCallbackState pcbstate;
- bool like_found = false;
bool is_foreign_table = IsA(stmt, CreateForeignTableStmt);
/*
@@ -247,18 +245,6 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)
cxt.partbound = stmt->partbound;
cxt.ofType = (stmt->ofTypename != NULL);
- /*
- * Notice that we allow OIDs here only for plain tables, even though
- * foreign tables also support them. This is necessary because the
- * default_with_oids GUC must apply only to plain tables and not any other
- * relkind; doing otherwise would break existing pg_dump files. We could
- * allow explicit "WITH OIDS" while not allowing default_with_oids to
- * affect other relkinds, but it would complicate interpretOidsOption(),
- * and right now there's no WITH OIDS option in CREATE FOREIGN TABLE
- * anyway.
- */
- cxt.hasoids = interpretOidsOption(stmt->options, !cxt.isforeign);
-
Assert(!stmt->ofTypename || !stmt->inhRelations); /* grammar enforces */
if (stmt->ofTypename)
@@ -291,7 +277,6 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)
break;
case T_TableLikeClause:
- like_found = true;
transformTableLikeClause(&cxt, (TableLikeClause *) element);
break;
@@ -303,20 +288,6 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)
}
/*
- * If we had any LIKE tables, they may require creation of an OID column
- * even though the command's own WITH clause didn't ask for one (or,
- * perhaps, even specifically rejected having one). Insert a WITH option
- * to ensure that happens. We prepend to the list because the first oid
- * option will be honored, and we want to override anything already there.
- * (But note that DefineRelation will override this again to add an OID
- * column if one appears in an inheritance parent table.)
- */
- if (like_found && cxt.hasoids)
- stmt->options = lcons(makeDefElem("oids",
- (Node *) makeInteger(true), -1),
- stmt->options);
-
- /*
* transformIndexConstraints wants cxt.alist to contain only index
* statements, so transfer anything we already have into save_alist.
*/
@@ -692,7 +663,7 @@ transformColumnDefinition(CreateStmtContext *cxt, ColumnDef *column)
errmsg("identity columns are not supported on partitions")));
ctype = typenameType(cxt->pstate, column->typeName, NULL);
- typeOid = HeapTupleGetOid(ctype);
+ typeOid = ((Form_pg_type) GETSTRUCT(ctype))->oid;
ReleaseSysCache(ctype);
if (saw_identity)
@@ -1079,9 +1050,6 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla
}
}
- /* We use oids if at least one LIKE'ed table has oids. */
- cxt->hasoids |= relation->rd_rel->relhasoids;
-
/*
* Copy CHECK constraints if requested, being careful to adjust attribute
* numbers so they match the child.
@@ -1245,7 +1213,7 @@ transformOfType(CreateStmtContext *cxt, TypeName *ofTypename)
tuple = typenameType(NULL, ofTypename, NULL);
check_of_type(tuple);
- ofTypeId = HeapTupleGetOid(tuple);
+ ofTypeId = ((Form_pg_type) GETSTRUCT(tuple))->oid;
ofTypename->typeOid = ofTypeId; /* cached for later */
tupdesc = lookup_rowtype_tupdesc(ofTypeId, -1);
@@ -2078,8 +2046,7 @@ transformIndexConstraint(Constraint *constraint, CreateStmtContext *cxt)
attform = TupleDescAttr(heap_rel->rd_att, attnum - 1);
}
else
- attform = SystemAttributeDefinition(attnum,
- heap_rel->rd_rel->relhasoids);
+ attform = SystemAttributeDefinition(attnum);
attname = pstrdup(NameStr(attform->attname));
if (i < index_form->indnkeyatts)
@@ -2169,7 +2136,7 @@ transformIndexConstraint(Constraint *constraint, CreateStmtContext *cxt)
if (constraint->contype == CONSTR_PRIMARY)
column->is_not_null = true;
}
- else if (SystemAttributeByName(key, cxt->hasoids) != NULL)
+ else if (SystemAttributeByName(key) != NULL)
{
/*
* column will be a system column in the new table, so accept
@@ -2292,7 +2259,7 @@ transformIndexConstraint(Constraint *constraint, CreateStmtContext *cxt)
if (!found)
{
- if (SystemAttributeByName(key, cxt->hasoids) != NULL)
+ if (SystemAttributeByName(key) != NULL)
{
/*
* column will be a system column in the new table, so accept
@@ -2966,7 +2933,6 @@ transformAlterTableStmt(Oid relid, AlterTableStmt *stmt,
cxt.rel = rel;
cxt.inhRelations = NIL;
cxt.isalter = true;
- cxt.hasoids = false; /* need not be right */
cxt.columns = NIL;
cxt.ckconstraints = NIL;
cxt.fkconstraints = NIL;
@@ -3400,7 +3366,7 @@ transformColumnType(CreateStmtContext *cxt, ColumnDef *column)
ereport(ERROR,
(errcode(ERRCODE_DATATYPE_MISMATCH),
errmsg("collations are not supported by type %s",
- format_type_be(HeapTupleGetOid(ctype))),
+ format_type_be(typtup->oid)),
parser_errposition(cxt->pstate,
column->collClause->location)));
}