mirror of https://github.com/citusdata/citus.git
Refactor index check in ColumnarProcessUtility
parent
4f3c672ebe
commit
94f30a0428
|
@ -1348,24 +1348,24 @@ ColumnarProcessUtility(PlannedStmt *pstmt,
|
|||
{
|
||||
IndexStmt *indexStmt = (IndexStmt *) parsetree;
|
||||
|
||||
/*
|
||||
* We should reject CREATE INDEX CONCURRENTLY before DefineIndex() is
|
||||
* called. Erroring in callbacks called from DefineIndex() will create
|
||||
* the index and mark it as INVALID, which will cause segfault during
|
||||
* inserts.
|
||||
*/
|
||||
if (indexStmt->concurrent)
|
||||
Relation rel = relation_openrv(indexStmt->relation,
|
||||
GetCreateIndexRelationLockMode(indexStmt));
|
||||
if (rel->rd_tableam == GetColumnarTableAmRoutine())
|
||||
{
|
||||
Relation rel = relation_openrv(indexStmt->relation,
|
||||
ShareUpdateExclusiveLock);
|
||||
if (rel->rd_tableam == GetColumnarTableAmRoutine())
|
||||
/*
|
||||
* We should reject CREATE INDEX CONCURRENTLY before DefineIndex() is
|
||||
* called. Erroring in callbacks called from DefineIndex() will create
|
||||
* the index and mark it as INVALID, which will cause segfault during
|
||||
* inserts.
|
||||
*/
|
||||
if (indexStmt->concurrent)
|
||||
{
|
||||
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("indexes not supported for columnar tables")));
|
||||
}
|
||||
|
||||
RelationClose(rel);
|
||||
}
|
||||
|
||||
RelationClose(rel);
|
||||
}
|
||||
|
||||
PrevProcessUtilityHook(pstmt, queryString, context,
|
||||
|
|
|
@ -62,7 +62,6 @@ static List * GenerateIndexParameters(IndexStmt *createIndexStatement);
|
|||
static DDLJob * GenerateCreateIndexDDLJob(IndexStmt *createIndexStatement,
|
||||
const char *createIndexCommand);
|
||||
static Oid CreateIndexStmtGetRelationId(IndexStmt *createIndexStatement);
|
||||
static LOCKMODE GetCreateIndexRelationLockMode(IndexStmt *createIndexStatement);
|
||||
static List * CreateIndexTaskList(IndexStmt *indexStmt);
|
||||
static List * CreateReindexTaskList(Oid relationId, ReindexStmt *reindexStmt);
|
||||
static void RangeVarCallbackForDropIndex(const RangeVar *rel, Oid relOid, Oid oldRelOid,
|
||||
|
@ -502,7 +501,7 @@ CreateIndexStmtGetRelationId(IndexStmt *createIndexStatement)
|
|||
* GetCreateIndexRelationLockMode returns required lock mode to open the
|
||||
* relation that given CREATE INDEX command operates on.
|
||||
*/
|
||||
static LOCKMODE
|
||||
LOCKMODE
|
||||
GetCreateIndexRelationLockMode(IndexStmt *createIndexStatement)
|
||||
{
|
||||
if (createIndexStatement->concurrent)
|
||||
|
|
|
@ -266,6 +266,7 @@ extern char * ChooseIndexName(const char *tabname, Oid namespaceId,
|
|||
bool primary, bool isconstraint);
|
||||
extern char * ChooseIndexNameAddition(List *colnames);
|
||||
extern List * ChooseIndexColumnNames(List *indexElems);
|
||||
extern LOCKMODE GetCreateIndexRelationLockMode(IndexStmt *createIndexStatement);
|
||||
extern List * PreprocessReindexStmt(Node *ReindexStatement,
|
||||
const char *ReindexCommand,
|
||||
ProcessUtilityContext processUtilityContext);
|
||||
|
|
Loading…
Reference in New Issue