You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2014/07/23 02:48:22 UTC
[6/7] TAJO-837: Register index meta information at Catalog. (jihoon)
http://git-wip-us.apache.org/repos/asf/tajo/blob/c9b8f511/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
index 73f3cf5..aed2fe6 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
@@ -35,12 +35,14 @@ import org.apache.tajo.algebra.Expr;
import org.apache.tajo.algebra.JsonHelper;
import org.apache.tajo.annotation.Nullable;
import org.apache.tajo.catalog.*;
+import org.apache.tajo.catalog.IndexDesc.IndexKey;
import org.apache.tajo.catalog.exception.*;
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.catalog.statistics.TableStats;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.engine.eval.EvalNode;
import org.apache.tajo.engine.exception.IllegalQueryStatusException;
@@ -59,6 +61,7 @@ import org.apache.tajo.master.querymaster.QueryJobManager;
import org.apache.tajo.master.querymaster.QueryMasterTask;
import org.apache.tajo.master.session.Session;
import org.apache.tajo.storage.*;
+import org.apache.tajo.util.TUtil;
import org.apache.tajo.worker.TaskAttemptContext;
import java.io.IOException;
@@ -187,10 +190,17 @@ public class GlobalEngine extends AbstractService {
if (PlannerUtil.checkIfDDLPlan(rootNode)) {
context.getSystemMetrics().counter("Query", "numDDLQuery").inc();
- updateQuery(session, rootNode.getChild());
- responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
- responseBuilder.setResultCode(ClientProtos.ResultCode.OK);
+ if (PlannerUtil.checkIfCreateIndexPlan(rootNode)) {
+ return createIndex(session, (CreateIndexNode)rootNode.getChild(), queryContext,
+ plan, sql, jsonExpr, responseBuilder);
+ } else {
+ updateQuery(session, rootNode.getChild());
+ responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
+ responseBuilder.setResultCode(ClientProtos.ResultCode.OK);
+
+ return responseBuilder.build();
+ }
} else if (plan.isExplain()) { // explain query
String explainStr = PlannerUtil.buildExplainString(plan.getRootBlock().getRoot());
Schema schema = new Schema();
@@ -216,8 +226,10 @@ public class GlobalEngine extends AbstractService {
responseBuilder.setResultCode(ClientProtos.ResultCode.OK);
responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
- // Simple query indicates a form of 'select * from tb_name [LIMIT X];'.
+ return responseBuilder.build();
+
} else if (PlannerUtil.checkIfSimpleQuery(plan)) {
+ // Simple query indicates a form of 'select * from tb_name [LIMIT X];'.
ScanNode scanNode = plan.getRootBlock().getNode(NodeType.SCAN);
TableDesc desc = scanNode.getTableDesc();
if (plan.getRootBlock().hasNode(NodeType.LIMIT)) {
@@ -232,8 +244,10 @@ public class GlobalEngine extends AbstractService {
responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
responseBuilder.setResultCode(ClientProtos.ResultCode.OK);
- // NonFromQuery indicates a form of 'select a, x+y;'
+ return responseBuilder.build();
+
} else if (PlannerUtil.checkIfNonFromQuery(plan)) {
+ // NonFromQuery indicates a form of 'select a, x+y;'
Target [] targets = plan.getRootBlock().getRawTargets();
if (targets == null) {
throw new PlanningException("No targets");
@@ -261,32 +275,40 @@ public class GlobalEngine extends AbstractService {
responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
responseBuilder.setResultCode(ClientProtos.ResultCode.OK);
}
+ return responseBuilder.build();
+
} else { // it requires distributed execution. So, the query is forwarded to a query master.
context.getSystemMetrics().counter("Query", "numDMLQuery").inc();
- hookManager.doHooks(queryContext, plan);
+ return executeInCluster(queryContext, plan, session, sql, jsonExpr, responseBuilder);
+ }
+ }
- QueryJobManager queryJobManager = this.context.getQueryJobManager();
- QueryInfo queryInfo;
+ private SubmitQueryResponse executeInCluster(QueryContext queryContext, LogicalPlan plan, Session session, String sql, String jsonExpr,
+ SubmitQueryResponse.Builder responseBuilder)
+ throws Exception {
+ LogicalRootNode rootNode = plan.getRootBlock().getRoot();
+ hookManager.doHooks(queryContext, plan);
- queryInfo = queryJobManager.createNewQueryJob(session, queryContext, sql, jsonExpr, rootNode);
+ QueryJobManager queryJobManager = this.context.getQueryJobManager();
+ QueryInfo queryInfo;
- if(queryInfo == null) {
- responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
- responseBuilder.setResultCode(ClientProtos.ResultCode.ERROR);
- responseBuilder.setErrorMessage("Fail starting QueryMaster.");
- } else {
- responseBuilder.setIsForwarded(true);
- responseBuilder.setQueryId(queryInfo.getQueryId().getProto());
- responseBuilder.setResultCode(ClientProtos.ResultCode.OK);
- if(queryInfo.getQueryMasterHost() != null) {
- responseBuilder.setQueryMasterHost(queryInfo.getQueryMasterHost());
- }
- responseBuilder.setQueryMasterPort(queryInfo.getQueryMasterClientPort());
- LOG.info("Query is forwarded to " + queryInfo.getQueryMasterHost() + ":" + queryInfo.getQueryMasterPort());
+ queryInfo = queryJobManager.createNewQueryJob(session, queryContext, sql, jsonExpr, rootNode);
+
+ if(queryInfo == null) {
+ responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
+ responseBuilder.setResultCode(ClientProtos.ResultCode.ERROR);
+ responseBuilder.setErrorMessage("Fail starting QueryMaster.");
+ } else {
+ responseBuilder.setIsForwarded(true);
+ responseBuilder.setQueryId(queryInfo.getQueryId().getProto());
+ responseBuilder.setResultCode(ClientProtos.ResultCode.OK);
+ if(queryInfo.getQueryMasterHost() != null) {
+ responseBuilder.setQueryMasterHost(queryInfo.getQueryMasterHost());
}
+ responseBuilder.setQueryMasterPort(queryInfo.getQueryMasterClientPort());
+ LOG.info("Query is forwarded to " + queryInfo.getQueryMasterHost() + ":" + queryInfo.getQueryMasterPort());
}
- SubmitQueryResponse response = responseBuilder.build();
- return response;
+ return responseBuilder.build();
}
private void insertNonFromQuery(QueryContext queryContext, InsertNode insertNode, SubmitQueryResponse.Builder responseBuilder)
@@ -448,6 +470,11 @@ public class GlobalEngine extends AbstractService {
TruncateTableNode truncateTable = (TruncateTableNode) root;
truncateTable(session, truncateTable);
return true;
+ case DROP_INDEX:
+ DropIndexNode dropIndexNode = (DropIndexNode) root;
+ dropIndex(session, dropIndexNode);
+ return true;
+
default:
throw new InternalError("updateQuery cannot handle such query: \n" + root.toJson());
}
@@ -636,6 +663,98 @@ public class GlobalEngine extends AbstractService {
}
}
+ /**
+ * Create an index for a given table.
+ * @param session user session
+ * @param createIndexNode the root of logical plan
+ */
+ private SubmitQueryResponse createIndex(final Session session, final CreateIndexNode createIndexNode,
+ QueryContext queryContext, LogicalPlan plan,
+ String sql, String jsonExpr,
+ SubmitQueryResponse.Builder responseBuilder) throws Exception {
+ SubmitQueryResponse response = null;
+ final CatalogService catalog = context.getCatalog();
+ final String dbName = session.getCurrentDatabase();
+ String indexName = createIndexNode.getIndexName();
+ if (CatalogUtil.isFQTableName(indexName)) {
+ indexName = CatalogUtil.splitFQTableName(indexName)[1];
+ }
+
+ boolean exists = catalog.existIndexByName(dbName, indexName);
+ if (exists) {
+ if (createIndexNode.isIfNotExists()) {
+ LOG.info("index \"" + indexName + "\" already exists." );
+ } else {
+ throw new AlreadyExistsIndexException(createIndexNode.getIndexName());
+ }
+ } else {
+ response = executeInCluster(queryContext, plan, session, sql, jsonExpr, responseBuilder);
+
+ // get the table name and predicate from scan
+ try {
+ ScanNode scanNode = PlannerUtil.findTopNode(createIndexNode, NodeType.SCAN);
+ String tableName;
+ if (CatalogUtil.isFQTableName(scanNode.getTableName())) {
+ tableName = CatalogUtil.splitFQTableName(scanNode.getTableName())[1];
+ } else {
+ tableName = scanNode.getTableName();
+ }
+ String predicate = scanNode.hasQual() ? scanNode.getQual().toJson() : null;
+ // extract index keys
+ List<IndexKey> indexKeys = TUtil.newList();
+ for (SortSpec eachKey : createIndexNode.getSortSpecs()) {
+ indexKeys.add(new IndexKey(eachKey.getSortKey().toJson(), eachKey.isAscending(), eachKey.isNullFirst()));
+ }
+
+ IndexDesc indexDesc = new IndexDesc(indexName, dbName, tableName, createIndexNode.getIndexType(),
+ indexKeys, createIndexNode.isUnique(), createIndexNode.isClustered(), predicate);
+ catalog.createIndex(indexDesc);
+ } catch (Exception e) {
+ // delete index
+ deleteIndexFiles(dbName, indexName);
+ }
+ }
+ return response;
+ }
+
+ /**
+ * Drop the specified index.
+ * @param session user session
+ * @param indexName index name
+ * @param ifExists if exists
+ */
+ public void dropIndex(final Session session, String indexName, boolean ifExists) {
+ final CatalogService catalog = context.getCatalog();
+ final String dbName = session.getCurrentDatabase();
+
+ boolean exists = catalog.existIndexByName(dbName, indexName);
+ LOG.info("index name exist: " + exists);
+ if (!exists) {
+ if (ifExists) {
+ LOG.info("index \"" + indexName + "\" does not exist." );
+ } else {
+ throw new NoSuchIndexException(indexName);
+ }
+ } else {
+ catalog.dropIndex(dbName, indexName);
+ deleteIndexFiles(dbName, indexName);
+ }
+ }
+
+ private void deleteIndexFiles(String dbName, String indexName) {
+ Path indexPath = new Path(context.getConf().getVar(ConfVars.WAREHOUSE_DIR), dbName + "/" + indexName);
+ try {
+ FileSystem fs = indexPath.getFileSystem(context.getConf());
+ fs.delete(indexPath, true);
+ } catch (IOException e) {
+ throw new InternalError(e.getMessage());
+ }
+ }
+
+ private void dropIndex(final Session session, final DropIndexNode dropIndexNode) {
+ dropIndex(session, dropIndexNode.getIndexName(), dropIndexNode.isIfExists());
+ }
+
private boolean existColumnName(String tableName, String columnName) {
final TableDesc tableDesc = catalog.getTableDesc(tableName);
return tableDesc.getSchema().containsByName(columnName) ? true : false;
@@ -692,7 +811,7 @@ public class GlobalEngine extends AbstractService {
if (exists) {
if (ifNotExists) {
- LOG.info("relation \"" + qualifiedName + "\" is already exists." );
+ LOG.info("relation \"" + qualifiedName + "\" already exists." );
return catalog.getTableDesc(databaseName, simpleTableName);
} else {
throw new AlreadyExistsTableException(CatalogUtil.buildFQName(databaseName, tableName));
http://git-wip-us.apache.org/repos/asf/tajo/blob/c9b8f511/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
index 97f59ef..1ac85e3 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
@@ -27,7 +27,10 @@ import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.service.AbstractService;
-import org.apache.tajo.*;
+import org.apache.tajo.QueryId;
+import org.apache.tajo.QueryIdFactory;
+import org.apache.tajo.TajoIdProtos;
+import org.apache.tajo.TajoProtos;
import org.apache.tajo.catalog.*;
import org.apache.tajo.catalog.exception.NoSuchDatabaseException;
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
@@ -751,5 +754,42 @@ public class TajoMasterClientService extends AbstractService {
throw new ServiceException(t);
}
}
+
+ @Override
+ public BoolProto existIndex(RpcController controller, SessionedStringProto request) throws ServiceException {
+ try {
+ Session session = context.getSessionManager().getSession(request.getSessionId().getId());
+
+ String databaseName;
+ String indexName;
+ 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 BOOL_TRUE;
+ } else {
+ return BOOL_FALSE;
+ }
+ } catch (Throwable e) {
+ throw new ServiceException(e);
+ }
+ }
+
+ @Override
+ public BoolProto dropIndex(RpcController controller, SessionedStringProto request) throws ServiceException {
+ try {
+ Session session = context.getSessionManager().getSession(request.getSessionId().getId());
+ context.getGlobalEngine().dropIndex(session, request.getValue(), true);
+ return BOOL_TRUE;
+ } catch (Throwable t) {
+ throw new ServiceException(t);
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/c9b8f511/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java b/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
index 7ecf27a..2b67538 100644
--- a/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
+++ b/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
@@ -294,14 +294,6 @@ public class TaskAttemptContext {
return fragmentMap.get(id).toArray(new FragmentProto[fragmentMap.get(id).size()]);
}
- public long getUniqueKeyFromFragments() {
- List<FragmentProto> totalFragments = new ArrayList<FragmentProto>();
- for (List<FragmentProto> eachFragments : fragmentMap.values()) {
- totalFragments.addAll(eachFragments);
- }
- return Objects.hashCode(totalFragments.toArray(new FragmentProto[totalFragments.size()]));
- }
-
public int hashCode() {
return Objects.hashCode(queryId);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/c9b8f511/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java b/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java
index b97eb30..7e87c29 100644
--- a/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java
+++ b/tajo-core/src/test/java/org/apache/tajo/QueryTestCaseBase.java
@@ -36,7 +36,9 @@ import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.engine.parser.SQLAnalyzer;
import org.apache.tajo.storage.StorageUtil;
import org.apache.tajo.util.FileUtil;
-import org.junit.*;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Rule;
import org.junit.rules.TestName;
import java.io.File;
@@ -46,7 +48,10 @@ import java.net.URL;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import static org.junit.Assert.*;
@@ -382,6 +387,16 @@ public class QueryTestCaseBase {
}
/**
+ * Assert that the index exists.
+ *
+ * @param indexName The index name to be checked. This name is case sensitive.
+ * @throws ServiceException
+ */
+ public void assertIndexExists(String indexName) throws ServiceException {
+ assertTrue(client.existIndex(indexName));
+ }
+
+ /**
* Assert that the table does not exist.
*
* @param tableName The table name to be checked. This name is case sensitive.
@@ -390,6 +405,10 @@ public class QueryTestCaseBase {
assertTrue(!client.existTable(tableName));
}
+ public void assertIndexNotExists(String indexName) throws ServiceException {
+ assertFalse(client.existIndex(indexName));
+ }
+
public void assertColumnExists(String tableName,String columnName) throws ServiceException {
TableDesc tableDesc = fetchTableMetaData(tableName);
assertTrue(tableDesc.getSchema().containsByName(columnName));
http://git-wip-us.apache.org/repos/asf/tajo/blob/c9b8f511/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
index 2ca85cc..6a6d07c 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
@@ -54,7 +54,6 @@ import java.util.*;
import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
import static org.apache.tajo.TajoConstants.DEFAULT_TABLESPACE_NAME;
import static org.junit.Assert.*;
-import static org.junit.Assert.assertEquals;
public class TestLogicalPlanner {
private static TajoTestingCluster util;
http://git-wip-us.apache.org/repos/asf/tajo/blob/c9b8f511/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
index 920c932..6c36040 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
@@ -34,7 +34,6 @@ import org.apache.tajo.catalog.*;
import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.conf.TajoConf.ConfVars;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
@@ -798,7 +797,7 @@ public class TestPhysicalPlanner {
FileFragment[] frags = StorageManager.splitNG(conf, "default.employee", employee.getMeta(), employee.getPath(),
Integer.MAX_VALUE);
Path workDir = CommonTestingUtil.getTestDir("target/test-data/testCreateIndex");
- Path indexPath = StorageUtil.concatPath(conf.getVar(ConfVars.ROOT_DIR), "default/idx_employee");
+ Path indexPath = StorageUtil.concatPath(TajoConf.getWarehouseDir(conf), "default/idx_employee");
if (sm.getFileSystem().exists(indexPath)) {
sm.getFileSystem().delete(indexPath, true);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/c9b8f511/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCreateIndex.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCreateIndex.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCreateIndex.java
index 2a66909..4714bd6 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCreateIndex.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCreateIndex.java
@@ -18,6 +18,7 @@
package org.apache.tajo.engine.query;
+import com.google.protobuf.ServiceException;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.tajo.IntegrationTest;
@@ -29,7 +30,9 @@ import org.junit.experimental.categories.Category;
import java.io.IOException;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
@Category(IntegrationTest.class)
public class TestCreateIndex extends QueryTestCaseBase {
@@ -38,35 +41,50 @@ public class TestCreateIndex extends QueryTestCaseBase {
super(TajoConstants.DEFAULT_DATABASE_NAME);
}
- private static void assertIndexExist(String indexName) throws IOException {
+ private void checkIndexExist(String indexName) throws IOException, ServiceException {
Path indexPath = new Path(conf.getVar(ConfVars.WAREHOUSE_DIR), "default/" + indexName);
FileSystem fs = indexPath.getFileSystem(conf);
assertTrue(fs.exists(indexPath));
assertEquals(2, fs.listStatus(indexPath).length);
- fs.deleteOnExit(indexPath);
+ assertIndexExists(indexName);
+ }
+
+ private void checkIndexNotExist(String indexName) throws IOException, ServiceException {
+ Path indexPath = new Path(conf.getVar(ConfVars.WAREHOUSE_DIR), "default/" + indexName);
+ FileSystem fs = indexPath.getFileSystem(conf);
+ assertFalse(fs.exists(indexPath));
+ assertIndexNotExists(indexName);
}
@Test
public final void testCreateIndex() throws Exception {
executeQuery();
- assertIndexExist("l_orderkey_idx");
+ checkIndexExist("l_orderkey_idx");
+ executeString("drop index l_orderkey_idx");
+ checkIndexNotExist("l_orderkey_idx");
}
@Test
public final void testCreateIndexOnMultiAttrs() throws Exception {
executeQuery();
- assertIndexExist("l_orderkey_partkey_idx");
+ checkIndexExist("l_orderkey_partkey_idx");
+ executeString("drop index l_orderkey_partkey_idx");
+ checkIndexNotExist("l_orderkey_partkey_idx");
}
@Test
public final void testCreateIndexWithCondition() throws Exception {
executeQuery();
- assertIndexExist("l_orderkey_partkey_lt10_idx");
+ checkIndexExist("l_orderkey_partkey_lt10_idx");
+ executeString("drop index l_orderkey_partkey_lt10_idx");
+ checkIndexNotExist("l_orderkey_partkey_lt10_idx");
}
@Test
public final void testCreateIndexOnExpression() throws Exception {
executeQuery();
- assertIndexExist("l_orderkey_100_lt10_idx");
+ checkIndexExist("l_orderkey_100_lt10_idx");
+ executeString("drop index l_orderkey_100_lt10_idx");
+ checkIndexNotExist("l_orderkey_100_lt10_idx");
}
}