On Wed, Mar 14, 2012 at 12:06:20PM -0400, Robert Haas wrote: > On Wed, Mar 14, 2012 at 10:22 AM, David Fetter <da...@fetter.org> 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 <da...@fetter.org> http://fetter.org/ Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter Skype: davidfetter XMPP: david.fet...@gmail.com 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 (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers