From 72335a20156b19be3a53ef686e0b31140c6f38e5 Mon Sep 17 00:00:00 2001
From: Simon Riggs <simon@2ndQuadrant.com>
Date: Sat, 9 Jun 2012 16:35:26 +0100
Subject: [PATCH] Add ERROR msg for GLOBAL/LOCAL TEMP is not yet implemented

---
 src/backend/parser/gram.y                  | 56 +++++++++++++++++++---
 src/test/regress/expected/create_table.out | 16 +++++++
 src/test/regress/sql/create_table.sql      |  5 ++
 3 files changed, 71 insertions(+), 6 deletions(-)

diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 9eb1bed58e6..107a8051205 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -2507,15 +2507,43 @@ CreateStmt:	CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')'
  * Redundancy here is needed to avoid shift/reduce conflicts,
  * since TEMP is not a reserved word.  See also OptTempTableName.
  *
- * NOTE: we accept both GLOBAL and LOCAL options; since we have no modules
- * the LOCAL keyword is really meaningless.
+ * NOTE: we don't accept either the GLOBAL or LOCAL options: not yet implemented.
  */
 OptTemp:	TEMPORARY					{ $$ = RELPERSISTENCE_TEMP; }
 			| TEMP						{ $$ = RELPERSISTENCE_TEMP; }
-			| LOCAL TEMPORARY			{ $$ = RELPERSISTENCE_TEMP; }
-			| LOCAL TEMP				{ $$ = RELPERSISTENCE_TEMP; }
-			| GLOBAL TEMPORARY			{ $$ = RELPERSISTENCE_TEMP; }
-			| GLOBAL TEMP				{ $$ = RELPERSISTENCE_TEMP; }
+			| LOCAL TEMPORARY
+				{
+					ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("LOCAL TEMPORARY not yet implemented"),
+						 parser_errposition(@1)));
+					$$ = RELPERSISTENCE_TEMP;
+				}
+			| LOCAL TEMP
+				{
+					ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("LOCAL TEMPORARY not yet implemented"),
+						 parser_errposition(@1)));
+					$$ = RELPERSISTENCE_TEMP;
+				}
+			| GLOBAL TEMPORARY
+				{
+					ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("GLOBAL TEMPORARY not yet implemented"),
+						 parser_errposition(@1)));
+					$$ = RELPERSISTENCE_TEMP;
+				}
+			| GLOBAL TEMP
+				{
+					ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("GLOBAL TEMPORARY not yet implemented"),
+						 parser_errposition(@1)));
+					$$ = RELPERSISTENCE_TEMP;
+				}
+
 			| UNLOGGED					{ $$ = RELPERSISTENCE_UNLOGGED; }
 			| /*EMPTY*/					{ $$ = RELPERSISTENCE_PERMANENT; }
 		;
@@ -8921,21 +8949,37 @@ OptTempTableName:
 			| LOCAL TEMPORARY opt_table qualified_name
 				{
 					$$ = $4;
+					ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("LOCAL TEMPORARY not yet implemented"),
+						 parser_errposition(@1)));
 					$$->relpersistence = RELPERSISTENCE_TEMP;
 				}
 			| LOCAL TEMP opt_table qualified_name
 				{
 					$$ = $4;
+					ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("LOCAL TEMPORARY not yet implemented"),
+						 parser_errposition(@1)));
 					$$->relpersistence = RELPERSISTENCE_TEMP;
 				}
 			| GLOBAL TEMPORARY opt_table qualified_name
 				{
 					$$ = $4;
+					ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("GLOBAL TEMPORARY not yet implemented"),
+						 parser_errposition(@1)));
 					$$->relpersistence = RELPERSISTENCE_TEMP;
 				}
 			| GLOBAL TEMP opt_table qualified_name
 				{
 					$$ = $4;
+					ereport(ERROR,
+						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+						 errmsg("GLOBAL TEMPORARY not yet implemented"),
+						 parser_errposition(@1)));
 					$$->relpersistence = RELPERSISTENCE_TEMP;
 				}
 			| UNLOGGED opt_table qualified_name
diff --git a/src/test/regress/expected/create_table.out b/src/test/regress/expected/create_table.out
index d20790f9098..0b2cbc734a8 100644
--- a/src/test/regress/expected/create_table.out
+++ b/src/test/regress/expected/create_table.out
@@ -220,3 +220,19 @@ NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "doubly_temp_pkey
 CREATE TEMP TABLE public.temp_to_perm (a int primary key);		-- not OK
 ERROR:  cannot create temporary relation in non-temporary schema
 DROP TABLE unlogged1, public.unlogged2;
+CREATE GLOBAL TEMPORARY TABLE global_temp1 (a int, b text);		-- not yet OK
+ERROR:  GLOBAL TEMPORARY not yet implemented
+LINE 1: CREATE GLOBAL TEMPORARY TABLE global_temp1 (a int, b text);
+               ^
+CREATE GLOBAL TEMP TABLE global_temp2 (a int, b text);			-- not yet OK
+ERROR:  GLOBAL TEMPORARY not yet implemented
+LINE 1: CREATE GLOBAL TEMP TABLE global_temp2 (a int, b text);
+               ^
+CREATE LOCAL TEMP TABLE local_temp (a int, b text);				-- not yet OK
+ERROR:  LOCAL TEMPORARY not yet implemented
+LINE 1: CREATE LOCAL TEMP TABLE local_temp (a int, b text);
+               ^
+CREATE LOCAL TEMP TABLE local_temp (a int, b text);				-- not yet OK
+ERROR:  LOCAL TEMPORARY not yet implemented
+LINE 1: CREATE LOCAL TEMP TABLE local_temp (a int, b text);
+               ^
diff --git a/src/test/regress/sql/create_table.sql b/src/test/regress/sql/create_table.sql
index a050e8b6d1a..ab0145531cf 100644
--- a/src/test/regress/sql/create_table.sql
+++ b/src/test/regress/sql/create_table.sql
@@ -250,3 +250,8 @@ CREATE TEMP TABLE explicitly_temp (a int primary key);			-- also OK
 CREATE TEMP TABLE pg_temp.doubly_temp (a int primary key);		-- also OK
 CREATE TEMP TABLE public.temp_to_perm (a int primary key);		-- not OK
 DROP TABLE unlogged1, public.unlogged2;
+
+CREATE GLOBAL TEMPORARY TABLE global_temp1 (a int, b text);		-- not yet OK
+CREATE GLOBAL TEMP TABLE global_temp2 (a int, b text);			-- not yet OK
+CREATE LOCAL TEMP TABLE local_temp (a int, b text);				-- not yet OK
+CREATE LOCAL TEMP TABLE local_temp (a int, b text);				-- not yet OK
-- 
GitLab