public void dropIndex(final QueryContext queryContext, final DropIndexNode dropIndexNode) throws UndefinedIndexException, UndefinedDatabaseException { String databaseName, simpleIndexName; if (IdentifierUtil.isFQTableName(dropIndexNode.getIndexName())) { String[] splits = IdentifierUtil.splitFQTableName(dropIndexNode.getIndexName()); databaseName = splits[0]; simpleIndexName = splits[1]; } else { databaseName = queryContext.getCurrentDatabase(); simpleIndexName = dropIndexNode.getIndexName(); } if (!catalog.existIndexByName(databaseName, simpleIndexName)) { throw new UndefinedIndexException(simpleIndexName); } IndexDesc desc = catalog.getIndexByName(databaseName, simpleIndexName); catalog.dropIndex(databaseName, simpleIndexName); Path indexPath = new Path(desc.getIndexPath()); try { FileSystem fs = indexPath.getFileSystem(context.getConf()); fs.delete(indexPath, true); } catch (IOException e) { throw new InternalError(e.getMessage()); } LOG.info("Index " + simpleIndexName + " is dropped."); }
public void dropIndex(final QueryContext queryContext, final DropIndexNode dropIndexNode) throws UndefinedIndexException, UndefinedDatabaseException { String databaseName, simpleIndexName; if (CatalogUtil.isFQTableName(dropIndexNode.getIndexName())) { String[] splits = CatalogUtil.splitFQTableName(dropIndexNode.getIndexName()); databaseName = splits[0]; simpleIndexName = splits[1]; } else { databaseName = queryContext.getCurrentDatabase(); simpleIndexName = dropIndexNode.getIndexName(); } if (!catalog.existIndexByName(databaseName, simpleIndexName)) { throw new UndefinedIndexException(simpleIndexName); } IndexDesc desc = catalog.getIndexByName(databaseName, simpleIndexName); catalog.dropIndex(databaseName, simpleIndexName); Path indexPath = new Path(desc.getIndexPath()); try { FileSystem fs = indexPath.getFileSystem(context.getConf()); fs.delete(indexPath, true); } catch (IOException e) { throw new InternalError(e.getMessage()); } LOG.info("Index " + simpleIndexName + " is dropped."); }
private void checkIndexExistence(final QueryContext queryContext, final CreateIndexNode createIndexNode) throws DuplicateIndexException { String databaseName, simpleIndexName, qualifiedIndexName; if (IdentifierUtil.isFQTableName(createIndexNode.getIndexName())) { String[] splits = IdentifierUtil.splitFQTableName(createIndexNode.getIndexName()); databaseName = splits[0]; simpleIndexName = splits[1]; qualifiedIndexName = createIndexNode.getIndexName(); } else { databaseName = queryContext.getCurrentDatabase(); simpleIndexName = createIndexNode.getIndexName(); qualifiedIndexName = IdentifierUtil.buildFQName(databaseName, simpleIndexName); } if (catalog.existIndexByName(databaseName, simpleIndexName)) { throw new DuplicateIndexException(qualifiedIndexName); } }
@Test public final void testCreateIndexOnExpression() throws Exception { executeQuery(); assertTrue(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_100_lt10_idx")); executeString("drop index l_orderkey_100_lt10_idx"); assertFalse(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_100_lt10_idx")); assertIndexNotExist(getCurrentDatabase(), "l_orderkey_100_lt10_idx"); }
@Test public final void testCreateIndexOnMultiExprs() throws Exception { executeQuery(); assertTrue(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_100_l_linenumber_10_lt10_idx")); executeString("drop index l_orderkey_100_l_linenumber_10_lt10_idx"); assertFalse(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_100_l_linenumber_10_lt10_idx")); assertIndexNotExist(getCurrentDatabase(), "l_orderkey_100_l_linenumber_10_lt10_idx"); }
private void checkIndexExistence(final QueryContext queryContext, final CreateIndexNode createIndexNode) throws DuplicateIndexException { String databaseName, simpleIndexName, qualifiedIndexName; if (CatalogUtil.isFQTableName(createIndexNode.getIndexName())) { String[] splits = CatalogUtil.splitFQTableName(createIndexNode.getIndexName()); databaseName = splits[0]; simpleIndexName = splits[1]; qualifiedIndexName = createIndexNode.getIndexName(); } else { databaseName = queryContext.getCurrentDatabase(); simpleIndexName = createIndexNode.getIndexName(); qualifiedIndexName = CatalogUtil.buildFQName(databaseName, simpleIndexName); } if (catalog.existIndexByName(databaseName, simpleIndexName)) { throw new DuplicateIndexException(qualifiedIndexName); } }
@Test public final void testCreateIndex() throws Exception { executeQuery(); assertTrue(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_idx")); assertTrue(catalog.existIndexByColumnNames(getCurrentDatabase(), "lineitem", new String[]{"l_orderkey"})); executeString("drop index l_orderkey_idx"); assertFalse(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_idx")); assertIndexNotExist(getCurrentDatabase(), "l_orderkey_idx"); }
@Test public final void testCreateIndexWithCondition() throws Exception { executeQuery(); assertTrue(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_partkey_lt10_idx")); assertTrue(catalog.existIndexByColumnNames(getCurrentDatabase(), "lineitem", new String[]{"l_orderkey", "l_partkey"})); executeString("drop index l_orderkey_partkey_lt10_idx"); assertFalse(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_partkey_lt10_idx")); assertIndexNotExist(getCurrentDatabase(), "l_orderkey_partkey_lt10_idx"); }
@Test public final void testCreateIndexOnLocation() throws Exception { executeQuery(); assertTrue(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_idx")); assertTrue(catalog.existIndexByColumnNames(getCurrentDatabase(), "lineitem", new String[]{"l_orderkey"})); catalog.dropIndex(getCurrentDatabase(), "l_orderkey_idx"); assertFalse(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_idx")); executeString("create index l_orderkey_idx on lineitem (l_orderkey asc nulls first) location '/tajo/warehouse/default/l_orderkey_idx';"); assertTrue(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_idx")); assertTrue(catalog.existIndexByColumnNames(getCurrentDatabase(), "lineitem", new String[]{"l_orderkey"})); executeString("drop index l_orderkey_idx"); assertFalse(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_idx")); assertIndexNotExist(getCurrentDatabase(), "l_orderkey_idx"); } }
@Test public final void testCreateIndexOnMultiAttrs() throws Exception { executeQuery(); assertTrue(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_partkey_idx")); assertTrue(catalog.existIndexByColumnNames(getCurrentDatabase(), "lineitem", new String[]{"l_orderkey", "l_partkey"})); executeString("drop index l_orderkey_partkey_idx"); assertFalse(catalog.existIndexByName(getCurrentDatabase(), "l_orderkey_partkey_idx")); assertIndexNotExist(getCurrentDatabase(), "l_orderkey_partkey_idx"); }
public void createIndex(final QueryContext queryContext, final CreateIndexNode createIndexNode) throws DuplicateIndexException, UndefinedTableException, UndefinedDatabaseException { String databaseName, simpleIndexName, qualifiedIndexName; if (CatalogUtil.isFQTableName(createIndexNode.getIndexName())) { String[] splits = CatalogUtil.splitFQTableName(createIndexNode.getIndexName()); databaseName = splits[0]; simpleIndexName = splits[1]; qualifiedIndexName = createIndexNode.getIndexName(); } else { databaseName = queryContext.getCurrentDatabase(); simpleIndexName = createIndexNode.getIndexName(); qualifiedIndexName = CatalogUtil.buildFQName(databaseName, simpleIndexName); } if (catalog.existIndexByName(databaseName, simpleIndexName)) { throw new DuplicateIndexException(simpleIndexName); } ScanNode scanNode = PlannerUtil.findTopNode(createIndexNode, NodeType.SCAN); if (scanNode == null) { throw new InternalError("Cannot find the table of the relation"); } IndexDesc indexDesc = new IndexDesc(databaseName, CatalogUtil.extractSimpleName(scanNode.getTableName()), simpleIndexName, createIndexNode.getIndexPath(), createIndexNode.getKeySortSpecs(), createIndexNode.getIndexMethod(), createIndexNode.isUnique(), false, scanNode.getLogicalSchema()); catalog.createIndex(indexDesc); LOG.info("Index " + qualifiedIndexName + " is created for the table " + scanNode.getTableName() + "."); }
public void createIndex(final QueryContext queryContext, final CreateIndexNode createIndexNode) throws DuplicateIndexException, UndefinedTableException, UndefinedDatabaseException { String databaseName, simpleIndexName, qualifiedIndexName; if (IdentifierUtil.isFQTableName(createIndexNode.getIndexName())) { String[] splits = IdentifierUtil.splitFQTableName(createIndexNode.getIndexName()); databaseName = splits[0]; simpleIndexName = splits[1]; qualifiedIndexName = createIndexNode.getIndexName(); } else { databaseName = queryContext.getCurrentDatabase(); simpleIndexName = createIndexNode.getIndexName(); qualifiedIndexName = IdentifierUtil.buildFQName(databaseName, simpleIndexName); } if (catalog.existIndexByName(databaseName, simpleIndexName)) { throw new DuplicateIndexException(simpleIndexName); } ScanNode scanNode = PlannerUtil.findTopNode(createIndexNode, NodeType.SCAN); if (scanNode == null) { throw new InternalError("Cannot find the table of the relation"); } IndexDesc indexDesc = new IndexDesc(databaseName, IdentifierUtil.extractSimpleName(scanNode.getTableName()), simpleIndexName, createIndexNode.getIndexPath(), createIndexNode.getKeySortSpecs(), createIndexNode.getIndexMethod(), createIndexNode.isUnique(), false, scanNode.getLogicalSchema()); catalog.createIndex(indexDesc); LOG.info("Index " + qualifiedIndexName + " is created for the table " + scanNode.getTableName() + "."); }
@Override public ReturnState existIndexWithName(RpcController controller, SessionedStringProto request) throws ServiceException { try { context.getSessionManager().touch(request.getSessionId().getId()); Session session = context.getSessionManager().getSession(request.getSessionId().getId()); String indexName, databaseName; if (CatalogUtil.isFQTableName(request.getValue())) { String [] splitted = CatalogUtil.splitFQTableName(request.getValue()); databaseName = splitted[0]; indexName = splitted[1]; } else { databaseName = session.getCurrentDatabase(); indexName = request.getValue(); } if (catalog.existIndexByName(databaseName, indexName)) { return OK; } else { return errUndefinedIndexName(indexName); } } catch (Throwable t) { return returnError(t); } }
@Override public ReturnState existIndexWithName(RpcController controller, SessionedStringProto request) throws ServiceException { try { context.getSessionManager().touch(request.getSessionId().getId()); Session session = context.getSessionManager().getSession(request.getSessionId().getId()); String indexName, databaseName; if (IdentifierUtil.isFQTableName(request.getValue())) { String [] splitted = IdentifierUtil.splitFQTableName(request.getValue()); databaseName = splitted[0]; indexName = splitted[1]; } else { databaseName = session.getCurrentDatabase(); indexName = request.getValue(); } if (catalog.existIndexByName(databaseName, indexName)) { return OK; } else { return errUndefinedIndexName(indexName); } } catch (Throwable t) { return returnError(t); } }