morningman commented on a change in pull request #2573: implements create drop 
show index syntax for bitmap index [#2487]
URL: https://github.com/apache/incubator-doris/pull/2573#discussion_r361889726
 
 

 ##########
 File path: fe/src/main/java/org/apache/doris/analysis/AlterTableStmt.java
 ##########
 @@ -61,7 +68,49 @@ public void analyze(Analyzer analyzer) throws 
AnalysisException, UserException {
             
ErrorReport.reportAnalysisException(ErrorCode.ERR_NO_ALTER_OPERATION);
         }
         for (AlterClause op : ops) {
-            op.analyze(analyzer);
+            if (op instanceof CreateIndexClause) {
+                Table table = 
Catalog.getInstance().getDb(tbl.getDb()).getTable(tbl.getTbl());
+                if (table instanceof OlapTable) {
+                    op.analyze(analyzer);
+                    List<Index> indexes = ((OlapTable) table).getIndexes();
+                    IndexDef indexDef = ((CreateIndexClause) op).getIndexDef();
+                    Set<String> newColset = new 
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
+                    newColset.addAll(indexDef.getColumns());
+                    for (Index idx : indexes) {
+                        if 
(idx.getIndexName().equalsIgnoreCase(indexDef.getIndexName())) {
+                            throw new AnalysisException("index `" + 
indexDef.getIndexName() + "` already exist.");
+                        }
+                        Set<String> idxSet = new 
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
+                        idxSet.addAll(idx.getColumns());
+                        if (newColset.equals(idxSet)) {
+                            throw new AnalysisException("index for columns (" 
+ String
+                                    .join(",", indexDef.getColumns()) + " ) 
already exist.");
+                        }
+                    }
+                }
+            } else if (op instanceof DropIndexClause) {
+                Table table = 
Catalog.getInstance().getDb(tbl.getDb()).getTable(tbl.getTbl());
+                if (table instanceof OlapTable) {
+                    op.analyze(analyzer);
+                    String indexName = ((DropIndexClause) op).getIndexName();
+                    List<Index> indexes = ((OlapTable) table).getIndexes();
+                    if (CollectionUtils.isEmpty(indexes)) {
+                        throw new AnalysisException("index " + indexName + " 
does not exist");
+                    }
+                    Index found = null;
+                    for (Index idx: indexes) {
+                        if (idx.getIndexName().equalsIgnoreCase(indexName)) {
+                            found = idx;
+                            break;
+                        }
+                    }
+                    if (found == null) {
+                        throw new AnalysisException("index " + indexName + " 
does not exist");
+                    }
+                }
+            } else {
+                op.analyze(analyzer);
+            }
         }
 
         if 
(!Catalog.getCurrentCatalog().getAuth().checkTblPriv(ConnectContext.get(), 
tbl.getDb(), tbl.getTbl(),
 
 Review comment:
   Move this privilege check at the frontend of `analyze()`

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to