On Wed, Mar 14, 2012 at 12:06:20PM -0400, Robert Haas wrote:
> On Wed, Mar 14, 2012 at 10:22 AM, David Fetter <[email protected]> wrote:
> >> I think that instead of inventing new grammar productions and a new
> >> node type for this, you should just reuse the existing productions for
> >> LIKE clauses and then reject invalid options during parse analysis.
> >
> > OK. Should I first merge CREATE FOREIGN TABLE with CREATE TABLE and
> > submit that as a separate patch?
>
> I don't see any reason to do that. I merely meant that you could
> reuse TableLikeClause or maybe even TableElement in the grammer for
> CreateForeignTableStmt.
Next WIP patch attached implementing this via reusing TableLikeClause
and refactoring transformTableLikeClause().
What say?
Cheers,
David.
--
David Fetter <[email protected]> http://fetter.org/
Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter
Skype: davidfetter XMPP: [email protected]
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics
Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate
*** a/src/backend/parser/gram.y
--- b/src/backend/parser/gram.y
***************
*** 3950,3955 **** ForeignTableElementList:
--- 3950,3956 ----
ForeignTableElement:
columnDef { $$ =
$1; }
+ | TableLikeClause { $$ = $1; }
;
/*****************************************************************************
*** a/src/backend/parser/parse_utilcmd.c
--- b/src/backend/parser/parse_utilcmd.c
***************
*** 652,657 **** transformTableLikeClause(CreateStmtContext *cxt,
TableLikeClause *table_like_cla
--- 652,678 ----
table_like_clause->relation->relname)));
cancel_parser_errposition_callback(&pcbstate);
+
+ /*
+ * For foreign tables, disallow some options.
+ */
+ if (strcmp(cxt->stmtType, "CREATE FOREIGN TABLE")==0)
+ {
+ if (table_like_clause->options & CREATE_TABLE_LIKE_CONSTRAINTS)
+ {
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("\"%s\" is a foreign table.
Only local tables can take LIKE CONSTRAINTS",
+
table_like_clause->relation->relname)));
+ }
+ else if (table_like_clause->options & CREATE_TABLE_LIKE_INDEXES)
+ {
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("\"%s\" is a foreign table.
Only local tables can take LIKE INDEXES",
+
table_like_clause->relation->relname)));
+ }
+ }
/*
* Check for privileges
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers