@ -92,6 +92,7 @@ typedef struct
IndexStmt * pkey ; /* PRIMARY KEY index, if any */
bool ispartitioned ; /* true if table is partitioned */
PartitionBoundSpec * partbound ; /* transformed FOR VALUES */
bool ofType ; /* true if statement contains OF typename */
} CreateStmtContext ;
/* State shared by transformCreateSchemaStmt and its subroutines */
@ -240,6 +241,8 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)
cxt . alist = NIL ;
cxt . pkey = NULL ;
cxt . ispartitioned = stmt - > partspec ! = NULL ;
cxt . partbound = stmt - > partbound ;
cxt . ofType = ( stmt - > ofTypename ! = NULL ) ;
/*
* Notice that we allow OIDs here only for plain tables , even though
@ -662,6 +665,15 @@ transformColumnDefinition(CreateStmtContext *cxt, ColumnDef *column)
Type ctype ;
Oid typeOid ;
if ( cxt - > ofType )
ereport ( ERROR ,
( errcode ( ERRCODE_FEATURE_NOT_SUPPORTED ) ,
errmsg ( " identity colums are not supported on typed tables " ) ) ) ;
if ( cxt - > partbound )
ereport ( ERROR ,
( errcode ( ERRCODE_FEATURE_NOT_SUPPORTED ) ,
errmsg ( " identify columns are not supported on partitions " ) ) ) ;
ctype = typenameType ( cxt - > pstate , column - > typeName , NULL ) ;
typeOid = HeapTupleGetOid ( ctype ) ;
ReleaseSysCache ( ctype ) ;
@ -2697,6 +2709,7 @@ transformAlterTableStmt(Oid relid, AlterTableStmt *stmt,
cxt . pkey = NULL ;
cxt . ispartitioned = ( rel - > rd_rel - > relkind = = RELKIND_PARTITIONED_TABLE ) ;
cxt . partbound = NULL ;
cxt . ofType = false ;
/*
* The only subtypes that currently require parse transformation handling