Revert "TAJO-1493: Make partition pruning based on catalog informations."
This reverts commit b68329101b412649149f261002c53a45f2711d75.
Conflicts:
CHANGES
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/e1c2d352
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/e1c2d352
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/e1c2d352
Branch: refs/heads/master
Commit: e1c2d352e15f67d148700fe61d78a37640341dab
Parents: b0c0a39
Author: JaeHwa Jung <[email protected]>
Authored: Thu Sep 17 18:56:31 2015 +0900
Committer: JaeHwa Jung <[email protected]>
Committed: Thu Sep 17 18:56:31 2015 +0900
----------------------------------------------------------------------
CHANGES | 2 -
.../tajo/catalog/AbstractCatalogClient.java | 46 +-
.../src/main/proto/CatalogProtocol.proto | 4 +-
.../org/apache/tajo/catalog/CatalogService.java | 9 +-
.../src/main/proto/CatalogProtos.proto | 15 +-
.../tajo/catalog/store/HiveCatalogStore.java | 139 +----
.../catalog/store/TestHiveCatalogStore.java | 76 +--
tajo-catalog/tajo-catalog-server/pom.xml | 8 -
.../org/apache/tajo/catalog/CatalogServer.java | 88 +--
.../tajo/catalog/store/AbstractDBStore.java | 287 +---------
.../apache/tajo/catalog/store/CatalogStore.java | 27 +-
.../org/apache/tajo/catalog/TestCatalog.java | 4 +-
.../TestCatalogAgainstCaseSensitivity.java | 2 +-
.../apache/tajo/exception/ErrorMessages.java | 1 -
.../exception/PartitionNotFoundException.java | 35 --
.../UndefinedPartitionMethodException.java | 4 +-
tajo-common/src/main/proto/errors.proto | 1 -
.../planner/TestEvalNodeToExprConverter.java | 406 -------------
.../tajo/engine/query/TestAlterTable.java | 4 +-
.../tajo/engine/query/TestTablePartitions.java | 432 +-------------
.../planner/physical/ColPartitionStoreExec.java | 12 +-
.../tajo/master/TajoMasterClientService.java | 2 +-
.../apache/tajo/plan/expr/AlgebraicUtil.java | 192 +------
.../rewrite/rules/PartitionedTableRewriter.java | 157 +----
.../tajo/plan/util/EvalNodeToExprConverter.java | 297 ----------
.../util/PartitionFilterAlgebraVisitor.java | 573 -------------------
26 files changed, 67 insertions(+), 2756 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index c485a27..122f895 100644
--- a/CHANGES
+++ b/CHANGES
@@ -556,8 +556,6 @@ Release 0.11.0 - unreleased
TAJO-1853: Add tablespace syntax to the CREATE TABLE section of DDL page.
(jihoon)
- TAJO-1493: Make partition pruning based on catalog informations. (jaehwa)
-
TAJO-1824: Remove partition_keys table from information_schema. (jaehwa)
TAJO-1813: Allow external catalog store for unit testing. (jihoon)
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
b/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
index 6522bf6..1dc7a71 100644
---
a/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
+++
b/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java
@@ -434,16 +434,15 @@ public abstract class AbstractCatalogClient implements
CatalogService, Closeable
}
@Override
- public final List<PartitionDescProto> getAllPartitions(final String
databaseName, final String tableName) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException {
+ public final List<PartitionDescProto> getPartitions(final String
databaseName, final String tableName) {
try {
final BlockingInterface stub = getStub();
- final TableIdentifierProto request = buildTableIdentifier(databaseName,
tableName);
+ final PartitionIdentifierProto request =
PartitionIdentifierProto.newBuilder()
+ .setDatabaseName(databaseName)
+ .setTableName(tableName)
+ .build();
final GetPartitionsResponse response =
stub.getPartitionsByTableName(null, request);
- throwsIfThisError(response.getState(), UndefinedDatabaseException.class);
- throwsIfThisError(response.getState(), UndefinedTableException.class);
- throwsIfThisError(response.getState(),
UndefinedPartitionMethodException.class);
ensureOk(response.getState());
return response.getPartitionList();
@@ -453,41 +452,6 @@ public abstract class AbstractCatalogClient implements
CatalogService, Closeable
}
@Override
- public List<PartitionDescProto>
getPartitionsByAlgebra(PartitionsByAlgebraProto request) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException {
- try {
- final BlockingInterface stub = getStub();
- GetPartitionsResponse response = stub.getPartitionsByAlgebra(null,
request);
-
- throwsIfThisError(response.getState(), UndefinedDatabaseException.class);
- throwsIfThisError(response.getState(), UndefinedTableException.class);
- throwsIfThisError(response.getState(),
UndefinedPartitionMethodException.class);
- ensureOk(response.getState());
- return response.getPartitionList();
- } catch (ServiceException e) {
- LOG.error(e.getMessage(), e);
- return null;
- }
- }
-
- @Override
- public List<PartitionDescProto>
getPartitionsByFilter(PartitionsByFilterProto request) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException {
- try {
- final BlockingInterface stub = getStub();
- GetPartitionsResponse response = stub.getPartitionsByFilter(null,
request);
-
- throwsIfThisError(response.getState(), UndefinedDatabaseException.class);
- throwsIfThisError(response.getState(), UndefinedTableException.class);
- throwsIfThisError(response.getState(),
UndefinedPartitionMethodException.class);
- ensureOk(response.getState());
- return response.getPartitionList();
- } catch (ServiceException e) {
- LOG.error(e.getMessage(), e);
- return null;
- }
- }
- @Override
public List<TablePartitionProto> getAllPartitions() {
try {
final BlockingInterface stub = getStub();
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-client/src/main/proto/CatalogProtocol.proto
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-client/src/main/proto/CatalogProtocol.proto
b/tajo-catalog/tajo-catalog-client/src/main/proto/CatalogProtocol.proto
index 170e2ae..8cc8e2f 100644
--- a/tajo-catalog/tajo-catalog-client/src/main/proto/CatalogProtocol.proto
+++ b/tajo-catalog/tajo-catalog-client/src/main/proto/CatalogProtocol.proto
@@ -121,11 +121,9 @@ service CatalogProtocolService {
rpc existPartitionMethod(TableIdentifierProto) returns (ReturnState);
rpc getPartitionByPartitionName(PartitionIdentifierProto) returns
(GetPartitionDescResponse);
- rpc getPartitionsByTableName(TableIdentifierProto) returns
(GetPartitionsResponse);
+ rpc getPartitionsByTableName(PartitionIdentifierProto) returns
(GetPartitionsResponse);
rpc getAllPartitions(NullProto) returns (GetTablePartitionsResponse);
rpc addPartitions(AddPartitionsProto) returns (ReturnState);
- rpc getPartitionsByAlgebra(PartitionsByAlgebraProto) returns
(GetPartitionsResponse);
- rpc getPartitionsByFilter(PartitionsByFilterProto) returns
(GetPartitionsResponse);
rpc createIndex(IndexDescProto) returns (ReturnState);
rpc dropIndex(IndexNameProto) returns (ReturnState);
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogService.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogService.java
b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogService.java
index 3ac9714..b031313 100644
---
a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogService.java
+++
b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogService.java
@@ -172,14 +172,7 @@ public interface CatalogService {
throws UndefinedPartitionException, UndefinedPartitionMethodException,
UndefinedDatabaseException,
UndefinedTableException;
- List<PartitionDescProto> getAllPartitions(String databaseName, String
tableName) throws UndefinedDatabaseException,
- UndefinedTableException, UndefinedPartitionMethodException;
-
- List<PartitionDescProto> getPartitionsByAlgebra(PartitionsByAlgebraProto
request) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException;
-
- List<PartitionDescProto> getPartitionsByFilter(PartitionsByFilterProto
request) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException;
+ List<PartitionDescProto> getPartitions(String databaseName, String
tableName);
List<TablePartitionProto> getAllPartitions();
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
b/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
index eb2c938..cfac82f 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
+++ b/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
@@ -252,7 +252,8 @@ message PartitionDescProto {
message PartitionKeyProto {
required string columnName = 1;
- required string partitionValue = 2;
+ optional string parentColumnName = 2;
+ required string partitionValue = 3;
}
message PartitionIdentifierProto {
@@ -261,18 +262,6 @@ message PartitionIdentifierProto {
optional string partitionName = 3;
}
-message PartitionsByAlgebraProto {
- required string databaseName = 1;
- required string tableName = 2;
- required string algebra = 3;
-}
-
-message PartitionsByFilterProto {
- required string databaseName = 1;
- required string tableName = 2;
- required string filter = 3;
-}
-
message TablespaceProto {
required string spaceName = 1;
required string uri = 2;
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
index 6196b5d..e2229ba 100644
---
a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
+++
b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
@@ -34,9 +34,6 @@ import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe;
import org.apache.hadoop.hive.serde2.lazybinary.LazyBinarySerDe;
import org.apache.tajo.BuiltinStorages;
import org.apache.tajo.TajoConstants;
-import org.apache.tajo.algebra.Expr;
-import org.apache.tajo.algebra.IsNullPredicate;
-import org.apache.tajo.algebra.JsonHelper;
import org.apache.tajo.catalog.*;
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
@@ -45,8 +42,6 @@ import org.apache.tajo.catalog.statistics.TableStats;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.exception.*;
-import org.apache.tajo.plan.expr.AlgebraicUtil;
-import org.apache.tajo.plan.util.PartitionFilterAlgebraVisitor;
import org.apache.tajo.storage.StorageConstants;
import org.apache.tajo.util.KeyValueSet;
import org.apache.tajo.util.TUtil;
@@ -698,7 +693,7 @@ public class HiveCatalogStore extends CatalogConstants
implements CatalogStore {
Table table = client.getHiveClient().getTable(databaseName, tableName);
List<FieldSchema> columns = table.getSd().getCols();
columns.add(new FieldSchema(columnProto.getName(),
- HiveCatalogUtil.getHiveFieldType(columnProto.getDataType()), ""));
+ HiveCatalogUtil.getHiveFieldType(columnProto.getDataType()), ""));
client.getHiveClient().alter_table(databaseName, tableName, table);
@@ -850,135 +845,11 @@ public class HiveCatalogStore extends CatalogConstants
implements CatalogStore {
}
@Override
- public List<CatalogProtos.PartitionDescProto> getAllPartitions(String
databaseName, String tableName)
- throws UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException {
- PartitionsByFilterProto.Builder request =
PartitionsByFilterProto.newBuilder();
- request.setDatabaseName(databaseName);
- request.setTableName(tableName);
- request.setFilter("");
-
- return getPartitionsByFilter(request.build());
- }
-
- @Override
- public List<PartitionDescProto>
getPartitionsByAlgebra(PartitionsByAlgebraProto request) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException {
-
- List<PartitionDescProto> list = null;
-
- try {
- String databaseName = request.getDatabaseName();
- String tableName = request.getTableName();
-
- TableDescProto tableDesc = getTable(databaseName, tableName);
- String filter = getFilter(databaseName, tableName,
tableDesc.getPartition().getExpressionSchema().getFieldsList()
- , request.getAlgebra());
- list = getPartitionsByFilterFromHiveMetaStore(databaseName, tableName,
filter);
- } catch (Exception se) {
- throw new TajoInternalError(se);
- }
-
- return list;
- }
-
- private String getFilter(String databaseName, String tableName,
List<ColumnProto> partitionColumns
- , String json) throws TajoException {
-
- Expr[] exprs = null;
-
- if (json != null && !json.isEmpty()) {
- Expr algebra = JsonHelper.fromJson(json, Expr.class);
- exprs = AlgebraicUtil.toConjunctiveNormalFormArray(algebra);
- }
-
- PartitionFilterAlgebraVisitor visitor = new
PartitionFilterAlgebraVisitor();
- visitor.setIsHiveCatalog(true);
-
- Expr[] filters = AlgebraicUtil.getAccumulatedFiltersByExpr(databaseName +
"." + tableName, partitionColumns, exprs);
-
- StringBuffer sb = new StringBuffer();
-
- // Write join clause from second column to last column.
- Column target;
-
- int addedFilter = 0;
- String result;
- for (int i = 0; i < partitionColumns.size(); i++) {
- target = new Column(partitionColumns.get(i));
-
- if (!(filters[i] instanceof IsNullPredicate)) {
- visitor.setColumn(target);
- visitor.visit(null, new Stack<Expr>(), filters[i]);
- result = visitor.getResult();
-
- // If visitor build filter successfully, add filter to be used for
executing hive api.
- if (result.length() > 0) {
- if (addedFilter > 0) {
- sb.append(" AND ");
- }
- sb.append(" ( ").append(result).append(" ) ");
- addedFilter++;
- }
- }
- }
-
- return sb.toString();
- }
-
-
- @Override
- public List<PartitionDescProto>
getPartitionsByFilter(PartitionsByFilterProto request)
- throws UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException {
- String databaseName = request.getDatabaseName();
- String tableName = request.getTableName();
-
- if (!existDatabase(databaseName)) {
- throw new UndefinedDatabaseException(tableName);
- }
-
- if (!existTable(databaseName, tableName)) {
- throw new UndefinedTableException(tableName);
- }
-
- if (!existPartitionMethod(databaseName, tableName)) {
- throw new UndefinedPartitionMethodException(tableName);
- }
-
- return getPartitionsByFilterFromHiveMetaStore(databaseName, tableName,
request.getFilter());
+ public List<CatalogProtos.PartitionDescProto> getPartitions(String
databaseName,
+ String tableName) {
+ throw new UnsupportedOperationException();
}
- private List<PartitionDescProto>
getPartitionsByFilterFromHiveMetaStore(String databaseName, String tableName,
-
String filter) {
- HiveCatalogStoreClientPool.HiveCatalogStoreClient client = null;
- List<PartitionDescProto> partitions = null;
-
- try {
- partitions = TUtil.newList();
- client = clientPool.getClient();
-
- List<Partition> hivePartitions =
client.getHiveClient().listPartitionsByFilter(databaseName, tableName
- , filter, (short) -1);
-
- for (Partition hivePartition : hivePartitions) {
- CatalogProtos.PartitionDescProto.Builder builder =
CatalogProtos.PartitionDescProto.newBuilder();
- builder.setPath(hivePartition.getSd().getLocation());
-
- int startIndex =
hivePartition.getSd().getLocation().indexOf(tableName) + tableName.length();
- String partitionName =
hivePartition.getSd().getLocation().substring(startIndex+1);
- builder.setPartitionName(partitionName);
-
- partitions.add(builder.build());
- }
- } catch (Exception e) {
- throw new TajoInternalError(e);
- } finally {
- if (client != null) {
- client.release();
- }
- }
-
- return partitions;
- }
@Override
public CatalogProtos.PartitionDescProto getPartition(String databaseName,
String tableName,
@@ -1160,7 +1031,7 @@ public class HiveCatalogStore extends CatalogConstants
implements CatalogStore {
// Unfortunately, hive client add_partitions doesn't run as expected.
The method never read the ifNotExists
// parameter. So, if Tajo adds existing partition to Hive, it will
threw AlreadyExistsException. To avoid
// above error, we need to filter existing partitions before call
add_partitions.
- if (existingPartition == null) {
+ if (existingPartition != null) {
Partition partition = new Partition();
partition.setDbName(databaseName);
partition.setTableName(tableName);
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/test/java/org/apache/tajo/catalog/store/TestHiveCatalogStore.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/test/java/org/apache/tajo/catalog/store/TestHiveCatalogStore.java
b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/test/java/org/apache/tajo/catalog/store/TestHiveCatalogStore.java
index e575505..b3af179 100644
---
a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/test/java/org/apache/tajo/catalog/store/TestHiveCatalogStore.java
+++
b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/test/java/org/apache/tajo/catalog/store/TestHiveCatalogStore.java
@@ -34,7 +34,6 @@ import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.storage.StorageConstants;
import org.apache.tajo.util.CommonTestingUtil;
import org.apache.tajo.util.KeyValueSet;
-import org.apache.tajo.util.TUtil;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -262,44 +261,10 @@ public class TestHiveCatalogStore {
}
testAddPartition(table1.getUri(), NATION,
"n_nationkey=10/n_date=20150101");
- testAddPartition(table1.getUri(), NATION,
"n_nationkey=10/n_date=20150102");
- testAddPartition(table1.getUri(), NATION,
"n_nationkey=20/n_date=20150101");
testAddPartition(table1.getUri(), NATION,
"n_nationkey=20/n_date=20150102");
- testAddPartition(table1.getUri(), NATION,
"n_nationkey=30/n_date=20150101");
- testAddPartition(table1.getUri(), NATION,
"n_nationkey=30/n_date=20150102");
-
- List<String> partitionNames = TUtil.newList();
- partitionNames.add("n_nationkey=40/n_date=20150801");
- partitionNames.add("n_nationkey=40/n_date=20150802");
- partitionNames.add("n_nationkey=50/n_date=20150801");
- partitionNames.add("n_nationkey=50/n_date=20150802");
- testAddPartitions(table1.getUri(), NATION, partitionNames);
-
- CatalogProtos.PartitionsByFilterProto.Builder FilterRequest = CatalogProtos
- .PartitionsByFilterProto.newBuilder();
-
- FilterRequest.setDatabaseName(DB_NAME);
- FilterRequest.setTableName(NATION);
- FilterRequest.setFilter("n_nationkey = 10 or n_nationkey = 20");
-
- List<CatalogProtos.PartitionDescProto> tablePartitions =
store.getPartitionsByFilter(FilterRequest.build());
- assertEquals(tablePartitions.size(), 4);
-
- FilterRequest = CatalogProtos.PartitionsByFilterProto.newBuilder();
- FilterRequest.setDatabaseName(DB_NAME);
- FilterRequest.setTableName(NATION);
-
- FilterRequest.setFilter("n_nationkey = 10 and n_date = \"20150101\"");
-
- tablePartitions = store.getPartitionsByFilter(FilterRequest.build());
- assertEquals(tablePartitions.size(), 1);
testDropPartition(NATION, "n_nationkey=10/n_date=20150101");
- testDropPartition(NATION, "n_nationkey=10/n_date=20150102");
- testDropPartition(NATION, "n_nationkey=20/n_date=20150101");
testDropPartition(NATION, "n_nationkey=20/n_date=20150102");
- testDropPartition(NATION, "n_nationkey=30/n_date=20150101");
- testDropPartition(NATION, "n_nationkey=30/n_date=20150102");
CatalogProtos.PartitionDescProto partition = store.getPartition(DB_NAME,
NATION, "n_nationkey=10/n_date=20150101");
assertNull(partition);
@@ -351,45 +316,6 @@ public class TestHiveCatalogStore {
}
}
- private void testAddPartitions(URI uri, String tableName, List<String>
partitionNames) throws Exception {
- List<CatalogProtos.PartitionDescProto> partitions = TUtil.newList();
- for (String partitionName : partitionNames) {
- CatalogProtos.PartitionDescProto.Builder builder =
CatalogProtos.PartitionDescProto.newBuilder();
- builder.setPartitionName(partitionName);
- Path path = new Path(uri.getPath(), partitionName);
- builder.setPath(path.toString());
-
- List<PartitionKeyProto> partitionKeyList = new
ArrayList<PartitionKeyProto>();
- String[] split = partitionName.split("/");
- for(int i = 0; i < split.length; i++) {
- String[] eachPartitionName = split[i].split("=");
-
- PartitionKeyProto.Builder keyBuilder = PartitionKeyProto.newBuilder();
- keyBuilder.setColumnName(eachPartitionName[0]);
- keyBuilder.setPartitionValue(eachPartitionName[1]);
- partitionKeyList.add(keyBuilder.build());
- }
- builder.addAllPartitionKeys(partitionKeyList);
- partitions.add(builder.build());
- }
-
- store.addPartitions(DB_NAME, tableName, partitions, true);
-
- for (String partitionName : partitionNames) {
- CatalogProtos.PartitionDescProto resultDesc =
store.getPartition(DB_NAME, NATION, partitionName);
- assertNotNull(resultDesc);
- assertEquals(resultDesc.getPartitionName(), partitionName);
- assertEquals(resultDesc.getPath(), uri.toString() + "/" + partitionName);
- assertEquals(resultDesc.getPartitionKeysCount(), 2);
-
- String[] split = partitionName.split("/");
- for (int i = 0; i < resultDesc.getPartitionKeysCount(); i++) {
- CatalogProtos.PartitionKeyProto keyProto =
resultDesc.getPartitionKeys(i);
- String[] eachName = split[i].split("=");
- assertEquals(keyProto.getPartitionValue(), eachName[1]);
- }
- }
- }
private void testDropPartition(String tableName, String partitionName)
throws Exception {
AlterTableDesc alterTableDesc = new AlterTableDesc();
@@ -479,7 +405,7 @@ public class TestHiveCatalogStore {
}
assertEquals(StorageConstants.DEFAULT_BINARY_SERDE,
- table1.getMeta().getOption(StorageConstants.SEQUENCEFILE_SERDE));
+ table1.getMeta().getOption(StorageConstants.SEQUENCEFILE_SERDE));
store.dropTable(DB_NAME, REGION);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-server/pom.xml
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/pom.xml
b/tajo-catalog/tajo-catalog-server/pom.xml
index f00f8d3..b47b599 100644
--- a/tajo-catalog/tajo-catalog-server/pom.xml
+++ b/tajo-catalog/tajo-catalog-server/pom.xml
@@ -148,14 +148,6 @@
<artifactId>tajo-rpc-protobuf</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.tajo</groupId>
- <artifactId>tajo-algebra</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.tajo</groupId>
- <artifactId>tajo-plan</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<scope>provided</scope>
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
index c8d4045..dff292f 100644
---
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
+++
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/CatalogServer.java
@@ -962,7 +962,7 @@ public class CatalogServer extends AbstractService {
}
@Override
- public GetPartitionsResponse getPartitionsByTableName(RpcController
controller, TableIdentifierProto request)
+ public GetPartitionsResponse getPartitionsByTableName(RpcController
controller, PartitionIdentifierProto request)
throws ServiceException {
String dbName = request.getDatabaseName();
String tbName = request.getTableName();
@@ -985,7 +985,7 @@ public class CatalogServer extends AbstractService {
rlock.lock();
try {
- List<PartitionDescProto> partitions = store.getAllPartitions(dbName,
tbName);
+ List<PartitionDescProto> partitions = store.getPartitions(dbName,
tbName);
GetPartitionsResponse.Builder builder =
GetPartitionsResponse.newBuilder();
for (PartitionDescProto partition : partitions) {
@@ -1032,90 +1032,6 @@ public class CatalogServer extends AbstractService {
}
@Override
- public GetPartitionsResponse getPartitionsByAlgebra(RpcController
controller,
- PartitionsByAlgebraProto request) throws ServiceException {
- String dbName = request.getDatabaseName();
- String tbName = request.getTableName();
-
- try {
- // linked meta data do not support partition.
- // So, the request that wants to get partitions in this db will be
failed.
- if (linkedMetadataManager.existsDatabase(dbName)) {
- return
GetPartitionsResponse.newBuilder().setState(errUndefinedPartitionMethod(tbName)).build();
- }
- } catch (Throwable t) {
- printStackTraceIfError(LOG, t);
- return GetPartitionsResponse.newBuilder()
- .setState(returnError(t))
- .build();
- }
-
- if (metaDictionary.isSystemDatabase(dbName)) {
- return
GetPartitionsResponse.newBuilder().setState(errUndefinedPartitionMethod(tbName)).build();
- }
-
- rlock.lock();
- try {
- GetPartitionsResponse.Builder builder =
GetPartitionsResponse.newBuilder();
- List<PartitionDescProto> partitions =
store.getPartitionsByAlgebra(request);
- builder.addAllPartition(partitions);
- builder.setState(OK);
- return builder.build();
- } catch (Throwable t) {
- printStackTraceIfError(LOG, t);
-
- return GetPartitionsResponse.newBuilder()
- .setState(returnError(t))
- .build();
-
- } finally {
- rlock.unlock();
- }
- }
-
- @Override
- public GetPartitionsResponse getPartitionsByFilter(RpcController
controller,
- PartitionsByFilterProto
request) throws ServiceException {
- String dbName = request.getDatabaseName();
- String tbName = request.getTableName();
-
- try {
- // linked meta data do not support partition.
- // So, the request that wants to get partitions in this db will be
failed.
- if (linkedMetadataManager.existsDatabase(dbName)) {
- return
GetPartitionsResponse.newBuilder().setState(errUndefinedPartitionMethod(tbName)).build();
- }
- } catch (Throwable t) {
- printStackTraceIfError(LOG, t);
- return GetPartitionsResponse.newBuilder()
- .setState(returnError(t))
- .build();
- }
-
- if (metaDictionary.isSystemDatabase(dbName)) {
- return
GetPartitionsResponse.newBuilder().setState(errUndefinedPartitionMethod(tbName)).build();
- }
-
- rlock.lock();
- try {
- GetPartitionsResponse.Builder builder =
GetPartitionsResponse.newBuilder();
- List<PartitionDescProto> partitions =
store.getPartitionsByFilter(request);
- builder.addAllPartition(partitions);
- builder.setState(OK);
- return builder.build();
- } catch (Throwable t) {
- printStackTraceIfError(LOG, t);
-
- return GetPartitionsResponse.newBuilder()
- .setState(returnError(t))
- .build();
-
- } finally {
- rlock.unlock();
- }
- }
-
- @Override
public ReturnState addPartitions(RpcController controller,
AddPartitionsProto request) {
TableIdentifierProto identifier = request.getTableIdentifier();
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
index b4f02e6..0b1b120 100644
---
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
+++
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
@@ -25,18 +25,14 @@ import com.google.protobuf.InvalidProtocolBufferException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
-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.proto.CatalogProtos;
import org.apache.tajo.catalog.proto.CatalogProtos.*;
import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.common.TajoDataTypes.*;
+import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.exception.*;
-import org.apache.tajo.plan.expr.*;
-import org.apache.tajo.plan.util.PartitionFilterAlgebraVisitor;
import org.apache.tajo.util.FileUtil;
import org.apache.tajo.util.Pair;
import org.apache.tajo.util.TUtil;
@@ -44,7 +40,6 @@ import org.apache.tajo.util.TUtil;
import java.io.IOException;
import java.net.URI;
import java.sql.*;
-import java.sql.Date;
import java.util.*;
import static
org.apache.tajo.catalog.proto.CatalogProtos.AlterTablespaceProto.AlterTablespaceCommand;
@@ -2189,9 +2184,8 @@ public abstract class AbstractDBStore extends
CatalogConstants implements Catalo
}
@Override
- public List<PartitionDescProto> getAllPartitions(String databaseName, String
tableName)
- throws UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException,
- UndefinedPartitionException{
+ public List<PartitionDescProto> getPartitions(String databaseName, String
tableName)
+ throws UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException {
Connection conn = null;
ResultSet res = null;
@@ -2231,252 +2225,6 @@ public abstract class AbstractDBStore extends
CatalogConstants implements Catalo
return partitions;
}
- /**
- * Check if list of partitions exist on catalog.
- *
- *
- * @param databaseId
- * @param tableId
- * @return
- */
- public boolean existPartitionsOnCatalog(int tableId) {
- Connection conn = null;
- ResultSet res = null;
- PreparedStatement pstmt = null;
- boolean result = false;
-
- try {
- String sql = "SELECT COUNT(*) CNT FROM "
- + TB_PARTTIONS +" WHERE " + COL_TABLES_PK + " = ? ";
-
- if (LOG.isDebugEnabled()) {
- LOG.debug(sql);
- }
-
- conn = getConnection();
- pstmt = conn.prepareStatement(sql);
- pstmt.setInt(1, tableId);
- res = pstmt.executeQuery();
-
- if (res.next()) {
- if (res.getInt("CNT") > 0) {
- result = true;
- }
- }
- } catch (SQLException se) {
- throw new TajoInternalError(se);
- } finally {
- CatalogUtil.closeQuietly(pstmt, res);
- }
- return result;
- }
-
- @Override
- public List<PartitionDescProto>
getPartitionsByFilter(PartitionsByFilterProto request) {
- throw new TajoRuntimeException(new UnsupportedException());
- }
-
- @Override
- public List<PartitionDescProto>
getPartitionsByAlgebra(PartitionsByAlgebraProto request) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException {
- Connection conn = null;
- PreparedStatement pstmt = null;
- ResultSet res = null;
- int currentIndex = 1;
- String selectStatement = null;
-
- List<PartitionDescProto> partitions = TUtil.newList();
- List<PartitionFilterSet> filterSets = TUtil.newList();
-
- try {
- int databaseId = getDatabaseId(request.getDatabaseName());
- int tableId = getTableId(databaseId, request.getDatabaseName(),
request.getTableName());
- if (!existPartitionMethod(request.getDatabaseName(),
request.getTableName())) {
- throw new UndefinedPartitionMethodException(request.getTableName());
- }
-
- if (!existPartitionsOnCatalog(tableId)) {
- throw new PartitionNotFoundException(request.getTableName());
- }
-
- TableDescProto tableDesc = getTable(request.getDatabaseName(),
request.getTableName());
-
- selectStatement =
getSelectStatementForPartitions(tableDesc.getTableName(),
tableDesc.getPartition()
- .getExpressionSchema().getFieldsList(), request.getAlgebra(),
filterSets);
-
- conn = getConnection();
- pstmt = conn.prepareStatement(selectStatement);
-
- // Set table id by force because first parameter of all direct sql is
table id
- pstmt.setInt(currentIndex, tableId);
- currentIndex++;
-
- for (PartitionFilterSet filter : filterSets) {
- // Set table id by force because all filters have table id as first
parameter.
- pstmt.setInt(currentIndex, tableId);
- currentIndex++;
-
- for (Pair<Type, Object> parameter : filter.getParameters()) {
- switch (parameter.getFirst()) {
- case BOOLEAN:
- pstmt.setBoolean(currentIndex, (Boolean)parameter.getSecond());
- break;
- case INT8:
- pstmt.setLong(currentIndex, (Long) parameter.getSecond());
- break;
- case FLOAT8:
- pstmt.setDouble(currentIndex, (Double) parameter.getSecond());
- break;
- case DATE:
- pstmt.setDate(currentIndex, (Date) parameter.getSecond());
- break;
- case TIMESTAMP:
- pstmt.setTimestamp(currentIndex, (Timestamp)
parameter.getSecond());
- break;
- case TIME:
- pstmt.setTime(currentIndex, (Time) parameter.getSecond());
- break;
- default:
- pstmt.setString(currentIndex, (String) parameter.getSecond());
- break;
- }
- currentIndex++;
- }
- }
-
- res = pstmt.executeQuery();
-
- while (res.next()) {
- PartitionDescProto.Builder builder = PartitionDescProto.newBuilder();
-
- builder.setId(res.getInt(COL_PARTITIONS_PK));
- builder.setPartitionName(res.getString("PARTITION_NAME"));
- builder.setPath(res.getString("PATH"));
-
- partitions.add(builder.build());
- }
- } catch (TajoException se) {
- throw new TajoInternalError(se);
- } catch (SQLException se) {
- throw new TajoInternalError(se);
- } finally {
- CatalogUtil.closeQuietly(pstmt, res);
- }
-
- return partitions;
- }
-
- /**
- * Create a select statement and parameters for querying partitions and
partition keys in CatalogStore.
- *
- * For example, consider you have a partitioned table for three columns
(i.e., col1, col2, col3).
- * Assume that an user gives a condition WHERE (col1 ='1' or col1 = '100')
and col3 > 20.
- * There is no filter condition corresponding to col2.
- *
- * Then, the sql would be generated as following:
- *
- * SELECT A.PARTITION_ID, A.PARTITION_NAME, A.PATH FROM PARTITIONS A
- * WHERE A.TID = ?
- * AND A.PARTITION_ID IN (
- * SELECT T1.PARTITION_ID FROM PARTITION_KEYS T1
- * JOIN PARTITION_KEYS T2 ON T1.TID=T2.TID AND T1.PARTITION_ID =
T2.PARTITION_ID AND T2.TID = ?
- * AND ( T2.COLUMN_NAME = 'col2' AND T2.PARTITION_VALUE IS NOT NULL )
- * JOIN PARTITION_KEYS T3 ON T1.TID=T3.TID AND T1.PARTITION_ID =
T3.PARTITION_ID AND T3.TID = ?
- * AND ( T3.COLUMN_NAME = 'col3' AND T3.PARTITION_VALUE > ? )
- * WHERE T1.TID = ? AND ( T1.COLUMN_NAME = 'col1' AND T1.PARTITION_VALUE
= ? )
- * OR ( T1.COLUMN_NAME = 'col1' AND T1.PARTITION_VALUE = ? )
- )
- *
- * @param partitionColumns
- * @param json
- * @param filterSets
- * @return
- * @throws TajoException
- * @throws SQLException
- */
- private String getSelectStatementForPartitions(String tableName,
List<ColumnProto> partitionColumns, String json,
- List<PartitionFilterSet> filterSets) throws TajoException, SQLException {
-
- Expr[] exprs = null;
-
- if (json != null && !json.isEmpty()) {
- Expr algebra = JsonHelper.fromJson(json, Expr.class);
- exprs = AlgebraicUtil.toConjunctiveNormalFormArray(algebra);
- }
-
- // Write table alias for all levels
- String tableAlias;
-
- PartitionFilterAlgebraVisitor visitor = new
PartitionFilterAlgebraVisitor();
- visitor.setIsHiveCatalog(false);
-
- Expr[] filters = AlgebraicUtil.getAccumulatedFiltersByExpr(tableName,
partitionColumns, exprs);
-
- StringBuffer sb = new StringBuffer();
- sb.append("\n SELECT A.").append(CatalogConstants.COL_PARTITIONS_PK)
- .append(", A.PARTITION_NAME, A.PATH FROM
").append(CatalogConstants.TB_PARTTIONS).append(" A ")
- .append("\n WHERE A.").append(CatalogConstants.COL_TABLES_PK).append(" =
? ")
- .append("\n AND A.").append(CatalogConstants.COL_PARTITIONS_PK).append("
IN (")
- .append("\n SELECT T1.").append(CatalogConstants.COL_PARTITIONS_PK)
- .append(" FROM ").append(CatalogConstants.TB_PARTTION_KEYS).append(" T1
");
-
- // Write join clause from second column to last column.
- Column target;
-
- for (int i = 1; i < partitionColumns.size(); i++) {
- target = new Column(partitionColumns.get(i));
- tableAlias = "T" + (i+1);
-
- visitor.setColumn(target);
- visitor.setTableAlias(tableAlias);
- visitor.visit(null, new Stack<Expr>(), filters[i]);
-
- sb.append("\n JOIN
").append(CatalogConstants.TB_PARTTION_KEYS).append(" ").append(tableAlias)
- .append(" ON T1.").append(CatalogConstants.COL_TABLES_PK).append("=")
- .append(tableAlias).append(".").append(CatalogConstants.COL_TABLES_PK)
- .append(" AND T1.").append(CatalogConstants.COL_PARTITIONS_PK)
- .append(" =
").append(tableAlias).append(".").append(CatalogConstants.COL_PARTITIONS_PK)
- .append(" AND
").append(tableAlias).append(".").append(CatalogConstants.COL_TABLES_PK).append("
= ? AND ");
- sb.append(visitor.getResult());
-
- // Set parameters for executing PrepareStament
- PartitionFilterSet filterSet = new PartitionFilterSet();
- filterSet.setColumnName(target.getSimpleName());
-
- List<Pair<Type, Object>> list = TUtil.newList();
- list.addAll(visitor.getParameters());
- filterSet.addParameters(list);
-
- filterSets.add(filterSet);
- visitor.clearParameters();
- }
-
- // Write where clause for first column
- target = new Column(partitionColumns.get(0));
- tableAlias = "T1";
- visitor.setColumn(target);
- visitor.setTableAlias(tableAlias);
- visitor.visit(null, new Stack<Expr>(), filters[0]);
-
- sb.append("\n WHERE
T1.").append(CatalogConstants.COL_TABLES_PK).append(" = ? AND ");
- sb.append(visitor.getResult())
- .append("\n )");
- sb.append("\n ORDER BY A.PARTITION_NAME");
-
- // Set parameters for executing PrepareStament
- PartitionFilterSet filterSet = new PartitionFilterSet();
- filterSet.setColumnName(target.getSimpleName());
-
- List<Pair<Type, Object>> list = TUtil.newList();
- list.addAll(visitor.getParameters());
- filterSet.addParameters(list);
-
- filterSets.add(filterSet);
-
- return sb.toString();
- }
-
-
@Override
public List<TablePartitionProto> getAllPartitions() {
Connection conn = null;
@@ -3196,33 +2944,4 @@ public abstract class AbstractDBStore extends
CatalogConstants implements Catalo
return exist;
}
-
- class PartitionFilterSet {
- private String columnName;
- private List<Pair<Type, Object>> parameters;
-
- public PartitionFilterSet() {
- parameters = TUtil.newList();
- }
-
- public String getColumnName() {
- return columnName;
- }
-
- public void setColumnName(String columnName) {
- this.columnName = columnName;
- }
-
- public List<Pair<Type, Object>> getParameters() {
- return parameters;
- }
-
- public void setParameters(List<Pair<Type, Object>> parameters) {
- this.parameters = parameters;
- }
-
- public void addParameters(List<Pair<Type, Object>> parameters) {
- this.parameters.addAll(parameters);
- }
- }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
index 7582a44..a067a53 100644
---
a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
+++
b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/CatalogStore.java
@@ -97,30 +97,13 @@ public interface CatalogStore extends Closeable {
* @return
* @throws TajoException
*/
- List<CatalogProtos.PartitionDescProto> getAllPartitions(String databaseName,
String tableName) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException, UndefinedPartitionException;
+ List<CatalogProtos.PartitionDescProto> getPartitions(String databaseName,
String tableName) throws
+ UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException;
CatalogProtos.PartitionDescProto getPartition(String databaseName, String
tableName,
- String partitionName) throws
UndefinedDatabaseException,
- UndefinedTableException, UndefinedPartitionMethodException,
UndefinedPartitionException;
-
- /**
- * PartitionedTableRewriter take a look into partition directories for
rewriting filter conditions. But if there
- * are lots of sub directories on HDFS, such as, more than 10,000
directories,
- * it might be cause overload to NameNode. Thus, CatalogStore need to
provide partition directories for specified
- * filter conditions. This scan right partition directories on CatalogStore
with where clause.
- *
- * @param request contains database name, table name, algebra expressions,
parameter for executing PrepareStatement
- * @return list of TablePartitionProto
- * @throws UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException
- */
- List<PartitionDescProto> getPartitionsByAlgebra(PartitionsByAlgebraProto
request) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException,
- UndefinedOperatorException;
-
- List<PartitionDescProto> getPartitionsByFilter(PartitionsByFilterProto
request) throws
- UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionMethodException,
- UndefinedOperatorException;
+ String partitionName)
+ throws UndefinedDatabaseException, UndefinedTableException,
UndefinedPartitionException,
+ UndefinedPartitionMethodException;
List<TablePartitionProto> getAllPartitions();
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
index 6206a1f..8720105 100644
---
a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
+++
b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
@@ -816,14 +816,14 @@ public class TestCatalog {
testAddPartition(tableName, "id=10/name=aaa");
testAddPartition(tableName, "id=20/name=bbb");
- List<CatalogProtos.PartitionDescProto> partitions =
catalog.getAllPartitions(DEFAULT_DATABASE_NAME, "addedtable");
+ List<CatalogProtos.PartitionDescProto> partitions =
catalog.getPartitions(DEFAULT_DATABASE_NAME, "addedtable");
assertNotNull(partitions);
assertEquals(partitions.size(), 2);
testDropPartition(tableName, "id=10/name=aaa");
testDropPartition(tableName, "id=20/name=bbb");
- partitions = catalog.getAllPartitions(DEFAULT_DATABASE_NAME, "addedtable");
+ partitions = catalog.getPartitions(DEFAULT_DATABASE_NAME, "addedtable");
assertNotNull(partitions);
assertEquals(partitions.size(), 0);
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java
----------------------------------------------------------------------
diff --git
a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java
b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java
index 6749bc8..bfff6b4 100644
---
a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java
+++
b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalogAgainstCaseSensitivity.java
@@ -197,7 +197,7 @@ public class TestCatalogAgainstCaseSensitivity {
// Test get partitions of a table
//////////////////////////////////////////////////////////////////////////////
- List<PartitionDescProto> partitionDescs =
catalog.getAllPartitions("TestDatabase1", "TestPartition1");
+ List<PartitionDescProto> partitionDescs =
catalog.getPartitions("TestDatabase1", "TestPartition1");
assertEquals(2, partitionDescs.size());
Map<String, PartitionDescProto> tablePartitionMap = new HashMap<>();
for (PartitionDescProto eachPartition : partitionDescs) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
----------------------------------------------------------------------
diff --git
a/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
b/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
index 456e275..9649644 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
@@ -67,7 +67,6 @@ public class ErrorMessages {
ADD_MESSAGE(UNDEFINED_FUNCTION, "function does not exist: %s", 1);
ADD_MESSAGE(UNDEFINED_PARTITION_METHOD, "table '%s' is not a partitioned
table", 1);
ADD_MESSAGE(UNDEFINED_PARTITION, "partition '%s' does not exist", 1);
- ADD_MESSAGE(PARTITION_NOT_FOUND, "there is no partitions in '%s' table",
1);
ADD_MESSAGE(UNDEFINED_PARTITION_KEY, "'%s' column is not a partition key",
1);
ADD_MESSAGE(UNDEFINED_OPERATOR, "operator does not exist: '%s'", 1);
ADD_MESSAGE(UNDEFINED_INDEX_FOR_TABLE, "index ''%s' does not exist", 1);
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-common/src/main/java/org/apache/tajo/exception/PartitionNotFoundException.java
----------------------------------------------------------------------
diff --git
a/tajo-common/src/main/java/org/apache/tajo/exception/PartitionNotFoundException.java
b/tajo-common/src/main/java/org/apache/tajo/exception/PartitionNotFoundException.java
deleted file mode 100644
index 06de9f5..0000000
---
a/tajo-common/src/main/java/org/apache/tajo/exception/PartitionNotFoundException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.exception;
-
-import org.apache.tajo.error.Errors.ResultCode;
-import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
-
-public class PartitionNotFoundException extends TajoException {
-
- private static final long serialVersionUID = 277182608283894939L;
-
- public PartitionNotFoundException(ReturnState state) {
- super(state);
- }
-
- public PartitionNotFoundException(String tableName) {
- super(ResultCode.PARTITION_NOT_FOUND, tableName);
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedPartitionMethodException.java
----------------------------------------------------------------------
diff --git
a/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedPartitionMethodException.java
b/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedPartitionMethodException.java
index ca61c70..459269c 100644
---
a/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedPartitionMethodException.java
+++
b/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedPartitionMethodException.java
@@ -29,7 +29,7 @@ public class UndefinedPartitionMethodException extends
TajoException {
super(state);
}
- public UndefinedPartitionMethodException(String tableName) {
- super(ResultCode.UNDEFINED_PARTITION_METHOD, tableName);
+ public UndefinedPartitionMethodException(String partitionName) {
+ super(ResultCode.UNDEFINED_PARTITION_METHOD, partitionName);
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-common/src/main/proto/errors.proto
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/proto/errors.proto
b/tajo-common/src/main/proto/errors.proto
index 264ddef..6a1780b 100644
--- a/tajo-common/src/main/proto/errors.proto
+++ b/tajo-common/src/main/proto/errors.proto
@@ -113,7 +113,6 @@ enum ResultCode {
UNDEFINED_PARTITION_METHOD = 521; // ?
UNDEFINED_OPERATOR = 522; // SQLState: 42883
(=UNDEFINED_FUNCTION)
UNDEFINED_PARTITION_KEY = 523; // ?
- PARTITION_NOT_FOUND = 524; // ?
DUPLICATE_TABLESPACE = 531;
DUPLICATE_DATABASE = 532; // SQLState: 42P04
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestEvalNodeToExprConverter.java
----------------------------------------------------------------------
diff --git
a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestEvalNodeToExprConverter.java
b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestEvalNodeToExprConverter.java
deleted file mode 100644
index de2fa15..0000000
---
a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestEvalNodeToExprConverter.java
+++ /dev/null
@@ -1,406 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.engine.planner;
-
-import org.apache.tajo.LocalTajoTestingUtility;
-import org.apache.tajo.QueryVars;
-import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.algebra.*;
-import org.apache.tajo.benchmark.TPCH;
-import org.apache.tajo.catalog.*;
-import org.apache.tajo.engine.function.FunctionLoader;
-import org.apache.tajo.engine.query.QueryContext;
-import org.apache.tajo.exception.TajoException;
-import org.apache.tajo.parser.sql.SQLAnalyzer;
-import org.apache.tajo.plan.LogicalOptimizer;
-import org.apache.tajo.plan.LogicalPlan;
-import org.apache.tajo.plan.LogicalPlanner;
-import org.apache.tajo.plan.expr.AlgebraicUtil;
-import org.apache.tajo.plan.expr.EvalNode;
-import org.apache.tajo.plan.logical.LogicalNode;
-import org.apache.tajo.plan.logical.NodeType;
-import org.apache.tajo.plan.logical.ScanNode;
-import org.apache.tajo.plan.util.EvalNodeToExprConverter;
-import org.apache.tajo.plan.util.PlannerUtil;
-import org.apache.tajo.session.Session;
-import org.apache.tajo.storage.TablespaceManager;
-import org.apache.tajo.util.CommonTestingUtil;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.util.Stack;
-
-import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
-import static org.apache.tajo.TajoConstants.DEFAULT_TABLESPACE_NAME;
-import static org.junit.Assert.*;
-
-public class TestEvalNodeToExprConverter {
- private static TajoTestingCluster util;
- private static CatalogService catalog;
- private static SQLAnalyzer sqlAnalyzer;
- private static LogicalPlanner planner;
- private static TPCH tpch;
- private static Session session =
LocalTajoTestingUtility.createDummySession();
-
- @BeforeClass
- public static void setUp() throws Exception {
- util = new TajoTestingCluster();
- util.startCatalogCluster();
- catalog = util.getCatalogService();
- catalog.createTablespace(DEFAULT_TABLESPACE_NAME, "hdfs://localhost:1234");
- catalog.createDatabase(DEFAULT_DATABASE_NAME, DEFAULT_TABLESPACE_NAME);
-
- for (FunctionDesc funcDesc : FunctionLoader.findLegacyFunctions()) {
- catalog.createFunction(funcDesc);
- }
-
- // TPC-H Schema for Complex Queries
- String [] tpchTables = {
- "part", "supplier", "partsupp", "nation", "region", "lineitem"
- };
- tpch = new TPCH();
- tpch.loadSchemas();
- tpch.loadOutSchema();
- for (String table : tpchTables) {
- TableMeta m = CatalogUtil.newTableMeta("TEXT");
- TableDesc d = CatalogUtil.newTableDesc(
- CatalogUtil.buildFQName(DEFAULT_DATABASE_NAME, table),
tpch.getSchema(table), m,
- CommonTestingUtil.getTestDir());
- catalog.createTable(d);
- }
-
- sqlAnalyzer = new SQLAnalyzer();
- planner = new LogicalPlanner(catalog, TablespaceManager.getInstance());
- }
-
- @AfterClass
- public static void tearDown() throws Exception {
- util.shutdownCatalogCluster();
- }
-
- static String[] QUERIES = {
- "select * from lineitem where L_ORDERKEY > 500", //0
- "select * from region where r_name = 'EUROPE'", //1
- "select * from lineitem where L_DISCOUNT >= 0.05 and L_DISCOUNT <= 0.07 OR
L_QUANTITY < 24.0 ", //2
- "select * from lineitem where L_DISCOUNT between 0.06 - 0.01 and 0.08 +
0.02 and L_ORDERKEY < 24 ", //3
- "select * from lineitem where (case when L_DISCOUNT > 0.0 then L_DISCOUNT
/ L_TAX else null end) > 1.2 ", //4
- "select * from part where p_brand = 'Brand#23' and p_container in ('MED
BAG', 'MED BOX', 'MED PKG', 'MED PACK') " +
- "and p_size between 1 and 10", //5
- };
-
- private static QueryContext createQueryContext() {
- QueryContext qc = new QueryContext(util.getConfiguration(), session);
- qc.put(QueryVars.DEFAULT_SPACE_URI, "file:/");
- qc.put(QueryVars.DEFAULT_SPACE_ROOT_URI, "file:/");
- return qc;
- }
-
- @Test
- public final void testBinaryOperator1() throws CloneNotSupportedException,
TajoException {
- QueryContext qc = createQueryContext();
-
- Expr expr = sqlAnalyzer.parse(QUERIES[0]);
-
- LogicalPlan plan = planner.createPlan(qc, expr);
- LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(),
catalog);
- optimizer.optimize(plan);
-
- LogicalNode node = plan.getRootBlock().getRoot();
- ScanNode scanNode = PlannerUtil.findTopNode(node, NodeType.SCAN);
-
- EvalNodeToExprConverter convertor = new
EvalNodeToExprConverter(scanNode.getTableName());
- convertor.visit(null, scanNode.getQual(), new Stack<EvalNode>());
-
- Expr resultExpr = convertor.getResult();
-
- BinaryOperator binaryOperator = AlgebraicUtil.findTopExpr(resultExpr,
OpType.GreaterThan);
- assertNotNull(binaryOperator);
-
- ColumnReferenceExpr column = binaryOperator.getLeft();
- assertEquals("default.lineitem", column.getQualifier());
- assertEquals("l_orderkey", column.getName());
-
- LiteralValue literalValue = binaryOperator.getRight();
- assertEquals("500", literalValue.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Integer,
literalValue.getValueType());
- }
-
- @Test
- public final void testBinaryOperator2() throws CloneNotSupportedException,
TajoException {
- QueryContext qc = createQueryContext();
-
- Expr expr = sqlAnalyzer.parse(QUERIES[1]);
-
- LogicalPlan plan = planner.createPlan(qc, expr);
- LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(),
catalog);
- optimizer.optimize(plan);
-
- LogicalNode node = plan.getRootBlock().getRoot();
- ScanNode scanNode = PlannerUtil.findTopNode(node, NodeType.SCAN);
-
- EvalNodeToExprConverter convertor = new
EvalNodeToExprConverter(scanNode.getTableName());
- convertor.visit(null, scanNode.getQual(), new Stack<EvalNode>());
-
- Expr resultExpr = convertor.getResult();
- BinaryOperator equals = AlgebraicUtil.findTopExpr(resultExpr,
OpType.Equals);
- assertNotNull(equals);
-
- ColumnReferenceExpr column = equals.getLeft();
- assertEquals("default.region", column.getQualifier());
- assertEquals("r_name", column.getName());
-
- LiteralValue literalValue = equals.getRight();
- assertEquals("EUROPE", literalValue.getValue());
- assertEquals(LiteralValue.LiteralType.String, literalValue.getValueType());
- }
-
- @Test
- public final void testBinaryOperator3() throws CloneNotSupportedException,
TajoException {
- QueryContext qc = createQueryContext();
-
- Expr expr = sqlAnalyzer.parse(QUERIES[2]);
-
- LogicalPlan plan = planner.createPlan(qc, expr);
- LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(),
catalog);
- optimizer.optimize(plan);
-
- LogicalNode node = plan.getRootBlock().getRoot();
- ScanNode scanNode = PlannerUtil.findTopNode(node, NodeType.SCAN);
-
- EvalNodeToExprConverter convertor = new
EvalNodeToExprConverter(scanNode.getTableName());
- convertor.visit(null, scanNode.getQual(), new Stack<EvalNode>());
-
- Expr resultExpr = convertor.getResult();
-
- BinaryOperator greaterThanOrEquals = AlgebraicUtil.findTopExpr(resultExpr,
OpType.GreaterThanOrEquals);
- assertNotNull(greaterThanOrEquals);
-
- ColumnReferenceExpr greaterThanOrEqualsLeft =
greaterThanOrEquals.getLeft();
- assertEquals("default.lineitem", greaterThanOrEqualsLeft.getQualifier());
- assertEquals("l_discount", greaterThanOrEqualsLeft.getName());
-
- LiteralValue greaterThanOrEqualsRight = greaterThanOrEquals.getRight();
- assertEquals("0.05", greaterThanOrEqualsRight.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float,
greaterThanOrEqualsRight.getValueType());
-
- BinaryOperator lessThanOrEquals = AlgebraicUtil.findTopExpr(resultExpr,
OpType.LessThanOrEquals);
- assertNotNull(lessThanOrEquals);
-
- ColumnReferenceExpr lessThanOrEqualsLeft = lessThanOrEquals.getLeft();
- assertEquals("default.lineitem", lessThanOrEqualsLeft.getQualifier());
- assertEquals("l_discount", lessThanOrEqualsLeft.getName());
-
- LiteralValue lessThanOrEqualsRight = lessThanOrEquals.getRight();
- assertEquals("0.07", lessThanOrEqualsRight.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float,
lessThanOrEqualsRight.getValueType());
-
- BinaryOperator lessThan = AlgebraicUtil.findTopExpr(resultExpr,
OpType.LessThan);
- assertNotNull(lessThan);
-
- ColumnReferenceExpr lessThanLeft = lessThan.getLeft();
- assertEquals("default.lineitem", lessThanLeft.getQualifier());
- assertEquals("l_quantity", lessThanLeft.getName());
-
- LiteralValue lessThanRight = lessThan.getRight();
- assertEquals("24.0", lessThanRight.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float,
lessThanRight.getValueType());
-
- BinaryOperator leftExpr = new BinaryOperator(OpType.And,
greaterThanOrEquals, lessThanOrEquals);
-
- BinaryOperator topExpr = AlgebraicUtil.findTopExpr(resultExpr, OpType.Or);
- assertEquals(leftExpr, topExpr.getLeft());
- assertEquals(lessThan, topExpr.getRight());
- }
-
- @Test
- public final void testBetweenPredicate() throws CloneNotSupportedException,
TajoException {
- QueryContext qc = createQueryContext();
-
- Expr expr = sqlAnalyzer.parse(QUERIES[3]);
-
- LogicalPlan plan = planner.createPlan(qc, expr);
- LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(),
catalog);
- optimizer.optimize(plan);
-
- LogicalNode node = plan.getRootBlock().getRoot();
- ScanNode scanNode = PlannerUtil.findTopNode(node, NodeType.SCAN);
-
- EvalNodeToExprConverter convertor = new
EvalNodeToExprConverter(scanNode.getTableName());
- convertor.visit(null, scanNode.getQual(), new Stack<EvalNode>());
-
- Expr resultExpr = convertor.getResult();
-
- BinaryOperator binaryOperator = AlgebraicUtil.findTopExpr(resultExpr,
OpType.LessThan);
- assertNotNull(binaryOperator);
- ColumnReferenceExpr column = binaryOperator.getLeft();
- assertEquals("default.lineitem", column.getQualifier());
- assertEquals("l_orderkey", column.getName());
-
- LiteralValue literalValue = binaryOperator.getRight();
- assertEquals("24", literalValue.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Integer,
literalValue.getValueType());
-
- BetweenPredicate between = AlgebraicUtil.findTopExpr(resultExpr,
OpType.Between);
- assertFalse(between.isNot());
- assertFalse(between.isSymmetric());
-
- ColumnReferenceExpr predicand = (ColumnReferenceExpr)between.predicand();
- assertEquals("default.lineitem", predicand.getQualifier());
- assertEquals("l_discount", predicand.getName());
-
- BinaryOperator begin = (BinaryOperator)between.begin();
- assertEquals(OpType.Minus, begin.getType());
- LiteralValue left = begin.getLeft();
- assertEquals("0.06", left.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float, left.getValueType());
- LiteralValue right = begin.getRight();
- assertEquals("0.01", right.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float,
right.getValueType());
-
- BinaryOperator end = (BinaryOperator)between.end();
- assertEquals(OpType.Plus, end.getType());
- left = end.getLeft();
- assertEquals("0.08", left.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float, left.getValueType());
- right = end.getRight();
- assertEquals("0.02", right.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float,
right.getValueType());
- }
-
- @Test
- public final void testCaseWhenPredicate() throws CloneNotSupportedException,
TajoException {
- QueryContext qc = createQueryContext();
-
- Expr expr = sqlAnalyzer.parse(QUERIES[4]);
-
- LogicalPlan plan = planner.createPlan(qc, expr);
- LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(),
catalog);
- optimizer.optimize(plan);
-
- LogicalNode node = plan.getRootBlock().getRoot();
- ScanNode scanNode = PlannerUtil.findTopNode(node, NodeType.SCAN);
-
- EvalNodeToExprConverter convertor = new
EvalNodeToExprConverter(scanNode.getTableName());
- convertor.visit(null, scanNode.getQual(), new Stack<EvalNode>());
-
- Expr resultExpr = convertor.getResult();
-
- CaseWhenPredicate caseWhen = AlgebraicUtil.findTopExpr(resultExpr,
OpType.CaseWhen);
- assertNotNull(caseWhen);
-
- CaseWhenPredicate.WhenExpr[] whenExprs = new CaseWhenPredicate.WhenExpr[1];
- caseWhen.getWhens().toArray(whenExprs);
-
- BinaryOperator condition = (BinaryOperator) whenExprs[0].getCondition();
- assertEquals(OpType.GreaterThan, condition.getType());
-
- ColumnReferenceExpr conditionLeft = condition.getLeft();
- assertEquals("default.lineitem", conditionLeft.getQualifier());
- assertEquals("l_discount", conditionLeft.getName());
-
- LiteralValue conditionRight = condition.getRight();
- assertEquals("0.0", conditionRight.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float,
conditionRight.getValueType());
-
- BinaryOperator result = (BinaryOperator) whenExprs[0].getResult();
- assertEquals(OpType.Divide, result.getType());
- ColumnReferenceExpr resultLeft = result.getLeft();
- assertEquals("default.lineitem", resultLeft.getQualifier());
- assertEquals("l_discount", resultLeft.getName());
-
- ColumnReferenceExpr resultRight = result.getRight();
- assertEquals("default.lineitem", resultRight.getQualifier());
- assertEquals("l_tax", resultRight.getName());
-
- BinaryOperator greaterThan = AlgebraicUtil.findTopExpr(resultExpr,
OpType.GreaterThan);
- assertNotNull(greaterThan);
-
- assertEquals(greaterThan.getLeft(), caseWhen);
-
- LiteralValue binaryOperatorRight = greaterThan.getRight();
- assertEquals("1.2", binaryOperatorRight.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Float,
conditionRight.getValueType());
- }
-
- @Test
- public final void testThreeFilters() throws CloneNotSupportedException,
TajoException {
- QueryContext qc = createQueryContext();
-
- Expr expr = sqlAnalyzer.parse(QUERIES[5]);
-
- LogicalPlan plan = planner.createPlan(qc, expr);
- LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(),
catalog);
- optimizer.optimize(plan);
-
- LogicalNode node = plan.getRootBlock().getRoot();
- ScanNode scanNode = PlannerUtil.findTopNode(node, NodeType.SCAN);
-
- EvalNodeToExprConverter convertor = new
EvalNodeToExprConverter(scanNode.getTableName());
- convertor.visit(null, scanNode.getQual(), new Stack<EvalNode>());
-
- Expr resultExpr = convertor.getResult();
-
- BetweenPredicate between = AlgebraicUtil.findTopExpr(resultExpr,
OpType.Between);
- assertFalse(between.isNot());
- assertFalse(between.isSymmetric());
-
- ColumnReferenceExpr predicand = (ColumnReferenceExpr)between.predicand();
- assertEquals("default.part", predicand.getQualifier());
- assertEquals("p_size", predicand.getName());
-
- LiteralValue begin = (LiteralValue)between.begin();
- assertEquals("1", begin.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Integer,
begin.getValueType());
-
- LiteralValue end = (LiteralValue)between.end();
- assertEquals("10", end.getValue());
- assertEquals(LiteralValue.LiteralType.Unsigned_Integer,
end.getValueType());
-
- BinaryOperator equals = AlgebraicUtil.findTopExpr(resultExpr,
OpType.Equals);
- assertNotNull(equals);
-
- ColumnReferenceExpr equalsLeft = equals.getLeft();
- assertEquals("default.part", equalsLeft.getQualifier());
- assertEquals("p_brand", equalsLeft.getName());
-
- LiteralValue equalsRight = equals.getRight();
- assertEquals("Brand#23", equalsRight.getValue());
- assertEquals(LiteralValue.LiteralType.String, equalsRight.getValueType());
-
- InPredicate inPredicate = AlgebraicUtil.findTopExpr(resultExpr,
OpType.InPredicate);
- assertNotNull(inPredicate);
-
- ValueListExpr valueList = (ValueListExpr)inPredicate.getInValue();
- assertEquals(4, valueList.getValues().length);
- for(int i = 0; i < valueList.getValues().length; i++) {
- LiteralValue literalValue = (LiteralValue) valueList.getValues()[i];
-
- if (i == 0) {
- assertEquals("MED BAG", literalValue.getValue());
- } else if (i == 1) {
- assertEquals("MED BOX", literalValue.getValue());
- } else if (i == 2) {
- assertEquals("MED PKG", literalValue.getValue());
- } else {
- assertEquals("MED PACK", literalValue.getValue());
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/e1c2d352/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestAlterTable.java
----------------------------------------------------------------------
diff --git
a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestAlterTable.java
b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestAlterTable.java
index 1c6a2f2..8339ea7 100644
---
a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestAlterTable.java
+++
b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestAlterTable.java
@@ -88,7 +88,7 @@ public class TestAlterTable extends QueryTestCaseBase {
executeDDL("alter_table_add_partition1.sql", null);
executeDDL("alter_table_add_partition2.sql", null);
- List<CatalogProtos.PartitionDescProto> partitions =
catalog.getAllPartitions("TestAlterTable", "partitioned_table");
+ List<CatalogProtos.PartitionDescProto> partitions =
catalog.getPartitions("TestAlterTable", "partitioned_table");
assertNotNull(partitions);
assertEquals(partitions.size(), 1);
assertEquals(partitions.get(0).getPartitionName(), "col3=1/col4=2");
@@ -106,7 +106,7 @@ public class TestAlterTable extends QueryTestCaseBase {
executeDDL("alter_table_drop_partition1.sql", null);
executeDDL("alter_table_drop_partition2.sql", null);
- partitions = catalog.getAllPartitions("TestAlterTable",
"partitioned_table");
+ partitions = catalog.getPartitions("TestAlterTable", "partitioned_table");
assertNotNull(partitions);
assertEquals(partitions.size(), 0);
assertFalse(fs.exists(partitionPath));