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

Reply via email to