You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by zt...@apache.org on 2022/01/03 09:09:11 UTC

[hawq] 03/03: HAWQ-1826. fix gpfdist external table rename issue

This is an automated email from the ASF dual-hosted git repository.

ztao1987 pushed a commit to branch ztao
in repository https://gitbox.apache.org/repos/asf/hawq.git

commit 27ac97ce07c31f9bb3e42f0b2775ae6d3ba06f14
Author: ztao1987 <zh...@gmail.com>
AuthorDate: Mon Jan 3 17:08:13 2022 +0800

    HAWQ-1826. fix gpfdist external table rename issue
---
 src/backend/commands/tablecmds.c | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 60dc98b..fd93525 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -3814,7 +3814,39 @@ renamerel(Oid myrelid, const char *newrelname, RenameStmt *stmt)
 				}
 			}
 		}
-		renameHdfsPath(myrelid, pNode, oldrelname, newrelname);
+		// Filter out table which fmtopts == "formatter 'orc' category 'internal'".
+		// Example:
+		// create table test (int a) format 'orc';
+		cqContext  *exPcqCtx = caql_beginscan(
+		    NULL,
+		    cql("SELECT * FROM pg_exttable "
+		        " WHERE reloid = :1 ",
+		        ObjectIdGetDatum(myrelid)));
+		HeapTuple exTuple = caql_getnext(exPcqCtx);
+		bool notSupport = 0;
+		if (exTuple)
+		{
+		  bool isNull;
+		  Relation pgExtTableRel = heap_open(ExtTableRelationId, RowExclusiveLock);
+		  Datum fmtOptDatum = heap_getattr(exTuple, Anum_pg_exttable_fmtopts,
+		                                   RelationGetDescr(pgExtTableRel), &isNull);
+		  char *fmtOptString =
+		          DatumGetCString(DirectFunctionCall1(textout, fmtOptDatum));
+		  char *fmtName = getExtTblFormatterTypeInFmtOptsStr(fmtOptString);
+		  char *fmtCategory = getExtTblCategoryInFmtOptsStr(fmtOptString);
+		  notSupport =
+		      fmtName && fmtCategory && strstr(fmtCategory, "internal") &&
+		      strstr(fmtName, "orc");
+		  heap_close(pgExtTableRel, RowExclusiveLock);
+		}
+		caql_endscan(exPcqCtx);
+		if (notSupport)
+		{
+		  ereport(ERROR,
+		          (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+		              errmsg("rename is not supported."),
+		              errOmitLocation(true)));
+		}
 	}
 
 	/* MPP-6929: metadata tracking */