From eeecbd232483057501d35e87bdf8c958035e0926 Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Fri, 9 Jul 2021 17:04:39 +0300 Subject: [PATCH] Introduce ColumnarSupportsIndexAM --- src/backend/columnar/columnar_tableam.c | 16 +++++++++++++--- src/include/columnar/columnar_tableam.h | 1 + 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/backend/columnar/columnar_tableam.c b/src/backend/columnar/columnar_tableam.c index db5e19013..480e38e8e 100644 --- a/src/backend/columnar/columnar_tableam.c +++ b/src/backend/columnar/columnar_tableam.c @@ -1863,9 +1863,7 @@ ColumnarProcessUtility(PlannedStmt *pstmt, GetCreateIndexRelationLockMode(indexStmt)); if (rel->rd_tableam == GetColumnarTableAmRoutine()) { - /* for now, we don't support index access methods other than btree & hash */ - if (strncmp(indexStmt->accessMethod, "btree", NAMEDATALEN) != 0 && - strncmp(indexStmt->accessMethod, "hash", NAMEDATALEN) != 0) + if (!ColumnarSupportsIndexAM(indexStmt->accessMethod)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("only btree and hash indexes are supported on " @@ -1881,6 +1879,18 @@ ColumnarProcessUtility(PlannedStmt *pstmt, } +/* + * ColumnarSupportsIndexAM returns true if indexAM with given name is + * supported by columnar tables. + */ +bool +ColumnarSupportsIndexAM(char *indexAMName) +{ + return strncmp(indexAMName, "btree", NAMEDATALEN) == 0 || + strncmp(indexAMName, "hash", NAMEDATALEN) == 0; +} + + /* * IsColumnarTableAmTable returns true if relation has columnar_tableam * access method. This can be called before extension creation. diff --git a/src/include/columnar/columnar_tableam.h b/src/include/columnar/columnar_tableam.h index 2809c6439..adb819f1f 100644 --- a/src/include/columnar/columnar_tableam.h +++ b/src/include/columnar/columnar_tableam.h @@ -52,6 +52,7 @@ extern TableScanDesc columnar_beginscan_extended(Relation relation, Snapshot sna uint32 flags, Bitmapset *attr_needed, List *scanQual); extern int64 ColumnarScanChunkGroupsFiltered(TableScanDesc scanDesc); +extern bool ColumnarSupportsIndexAM(char *indexAMName); extern bool IsColumnarTableAmTable(Oid relationId); extern TableDDLCommand * ColumnarGetTableOptionsDDL(Oid relationId); extern char * GetShardedTableDDLCommandColumnar(uint64 shardId, void *context);