diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/PartitionTree.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/PartitionTree.java index 317bfde36750..ad94dfd114f7 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/PartitionTree.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/PartitionTree.java @@ -122,8 +122,8 @@ List addPartitions(List partitions, boolean ifNotExists) * {@link MetaStoreUtils#getPvals(List, Map)} */ List getPartitionsByPartitionVals(List partialPartVals) throws MetaException { - if (MetaStoreUtils.arePartValsEmpty(partialPartVals)) { - return new ArrayList<>(parts.values()); + if (partialPartVals == null || partialPartVals.isEmpty()) { + throw new MetaException("Partition partial vals cannot be null or empty"); } String partNameMatcher = makePartNameMatcher(tTable, partialPartVals, ".*"); List matchedPartitions = new ArrayList<>(); diff --git a/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java b/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java index e1b600b03e4f..ec7d8bec37d9 100644 --- a/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java +++ b/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java @@ -2245,8 +2245,8 @@ public List listPartitions(String db_name, String tbl_name, public List listPartitions(String catName, String db_name, String tbl_name, List part_vals, int max_parts) throws TException { // TODO should we add capabilities here as well as it returns Partition objects - if (db_name == null || tbl_name == null) { - throw new MetaException("Database name/Table name should not be null"); + if (db_name == null || tbl_name == null || part_vals == null) { + throw new MetaException("Database name/Table name/partition values should not be null"); } GetPartitionsPsWithAuthRequest req = createThriftPartitionsReq(GetPartitionsPsWithAuthRequest.class, conf); req.setDbName(db_name); @@ -2361,8 +2361,8 @@ public List listPartitionsWithAuthInfo(String catName, String dbName, protected List listPartitionsWithAuthInfoInternal(String catName, String dbName, String tableName, List partialPvals, int maxParts, String userName, List groupNames) throws TException { - if (dbName == null || tableName == null) { - throw new MetaException("Database name/Table name should not be null"); + if (dbName == null || tableName == null || partialPvals == null) { + throw new MetaException("Database name/Table name/partition values should not be null"); } GetPartitionsPsWithAuthRequest req = createThriftPartitionsReq(GetPartitionsPsWithAuthRequest.class, conf); req.setTblName(tableName); diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java index 0dbac988f38c..f3e3a9387c44 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java @@ -1291,7 +1291,9 @@ public int getNumPartitionsViaSqlFilter(SqlFilterForPushdown filter) throws Meta params[i + 3] = filter.params.get(i); } - return MetastoreDirectSqlUtils.getCountOfQuery(pm, queryText, params); + try (QueryWrapper query = new QueryWrapper(pm.newQuery("javax.jdo.query.SQL", queryText))) { + return MetastoreDirectSqlUtils.getCountOfQuery(query.getInnerQuery(), params); + } } public int getNumPartitionsViaSqlPs(Table table, List partVals) throws MetaException { @@ -1311,7 +1313,9 @@ public int getNumPartitionsViaSqlPs(Table table, List partVals) throws M params[2] = table.getCatName(); params[3] = partialName; - return MetastoreDirectSqlUtils.getCountOfQuery(pm, queryText, params); + try (QueryWrapper query = new QueryWrapper(pm.newQuery("javax.jdo.query.SQL", queryText))) { + return MetastoreDirectSqlUtils.getCountOfQuery(query.getInnerQuery(), params); + } } private static String trimCommaList(StringBuilder sb) { diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetastoreDirectSqlUtils.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetastoreDirectSqlUtils.java index 4e594753bdd3..1795c21b2ef4 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetastoreDirectSqlUtils.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetastoreDirectSqlUtils.java @@ -610,15 +610,9 @@ public static void throwMetaOrRuntimeException(Exception e) throws MetaException } } - static int getCountOfQuery(PersistenceManager pm, String queryText, Object[] params) { - boolean doTrace = LOG.isDebugEnabled(); - long start = doTrace ? System.nanoTime() : 0; - try (QueryWrapper query = new QueryWrapper(pm.newQuery("javax.jdo.query.SQL", queryText))) { - query.setUnique(true); - int sqlResult = MetastoreDirectSqlUtils.extractSqlInt(query.executeWithArray(params)); - long queryTime = doTrace ? System.nanoTime() : 0; - MetastoreDirectSqlUtils.timingTrace(doTrace, queryText, start, queryTime); - return sqlResult; - } + static int getCountOfQuery(Query query, Object[] params) { + query.setUnique(true); + int sqlResult = MetastoreDirectSqlUtils.extractSqlInt(query.executeWithArray(params)); + return sqlResult; } } diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index c664c08ef99a..bb0c15a2a51a 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -3824,7 +3824,17 @@ protected Integer getSqlResult(GetHelper ctx) throws MetaException { @Override protected Integer getJdoResult(GetHelper ctx) throws MetaException, NoSuchObjectException, InvalidObjectException { - return getNumPartitionsViaOrmPs(ctx.getTable(), partVals); + // size is known since it contains dbName, catName, tblName and partialRegex pattern + Map params = new HashMap<>(4); + String filter = getJDOFilterStrForPartitionVals(ctx.getTable(), partVals, params); + try (QueryWrapper query = new QueryWrapper(pm.newQuery( + "select count(partitionName) from org.apache.hadoop.hive.metastore.model.MPartition"))) { + query.setFilter(filter); + query.declareParameters(makeParameterDeclarationString(params)); + Long result = (Long) query.executeWithMap(params); + + return result.intValue(); + } } }.run(true); } @@ -3926,20 +3936,6 @@ public List listPartitionsPsWithAuth(String catName, String db_name, return partitions; } - private Integer getNumPartitionsViaOrmPs(Table table, List partVals) throws MetaException { - // size is known since it contains dbName, catName, tblName and partialRegex pattern - Map params = new HashMap<>(4); - String filter = getJDOFilterStrForPartitionVals(table, partVals, params); - try (QueryWrapper query = new QueryWrapper(pm.newQuery( - "select count(partitionName) from org.apache.hadoop.hive.metastore.model.MPartition"))) { - query.setFilter(filter); - query.declareParameters(makeParameterDeclarationString(params)); - Long result = (Long) query.executeWithMap(params); - - return result.intValue(); - } - } - private List getPartitionsByPs(String catName, String dbName, String tblName, GetPartitionsArgs args) throws MetaException, NoSuchObjectException { @@ -3973,10 +3969,6 @@ protected List getJdoResult(GetHelper> ctx) @Override public List listPartitionNamesPs(String catName, String dbName, String tableName, List part_vals, short max_parts) throws MetaException, NoSuchObjectException { - if (MetaStoreUtils.arePartValsEmpty(part_vals)) { - return listPartitionNames(catName, dbName, tableName, max_parts); - } - List partitionNames = new ArrayList<>(); boolean success = false; diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestListPartitions.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestListPartitions.java index a883ae641be2..be435030cbc2 100644 --- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestListPartitions.java +++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestListPartitions.java @@ -459,13 +459,10 @@ public void testListPartitionsByValuesNullTblName() throws Exception { client.listPartitions(DB_NAME, null, Lists.newArrayList("1999"), (short)-1); } - @Test + @Test(expected = MetaException.class) public void testListPartitionsByValuesNullValues() throws Exception { createTable3PartCols1Part(client); - List partitions = client.listPartitions(DB_NAME, TABLE_NAME, - (List)null, (short)-1); - assertEquals(1, partitions.size()); - assertPartitionsHaveCorrectParams(partitions); + client.listPartitions(DB_NAME, TABLE_NAME, (List)null, (short)-1); } @@ -746,7 +743,7 @@ public void testListPartitionsWithAuthByValues() throws Exception { public void testListPartitionsWithAuthByValuesNoVals() throws Exception { List> partValues = createTable4PartColsPartsAuthOn(client).testValues; List partitions = client.listPartitionsWithAuthInfo(DB_NAME, TABLE_NAME, Lists - .newArrayList(), (short)-1, "", Lists.newArrayList()); + .newArrayList(), (short)-1, "", Lists.newArrayList()); assertEquals(4, partitions.size()); assertPartitionsHaveCorrectValues(partitions, partValues); assertPartitionsHaveCorrectParams(partitions); @@ -840,14 +837,11 @@ public void testListPartitionsWithAuthByValuesNullTblName() throws Exception { } } - @Test + @Test(expected = MetaException.class) public void testListPartitionsWithAuthByValuesNullValues() throws Exception { - List> partValues = createTable4PartColsParts(client).testValues; - List partitions = client.listPartitionsWithAuthInfo(DB_NAME, TABLE_NAME, - (List)null, (short)-1, "", Lists.newArrayList()); - assertEquals(4, partitions.size()); - assertPartitionsHaveCorrectValues(partitions, partValues); - assertPartitionsHaveCorrectParams(partitions); + createTable4PartColsParts(client); + client.listPartitionsWithAuthInfo(DB_NAME, TABLE_NAME, (List)null, + (short)-1, "", Lists.newArrayList()); } @Test @@ -1426,12 +1420,10 @@ public void testListPartitionNamesByValuesLowPartCount() throws Exception { Lists.newArrayList("yyyy", "mm", "dd")); } - @Test + @Test(expected = MetaException.class) public void testListPartitionNamesByValuesNoPartVals() throws Exception { createTable4PartColsParts(client); - List partNames = client.listPartitionNames(DB_NAME, TABLE_NAME, - Lists.newArrayList(), (short)-1); - assertEquals(4, partNames.size()); + client.listPartitionNames(DB_NAME, TABLE_NAME, Lists.newArrayList(), (short)-1); } @Test(expected = MetaException.class) @@ -1486,12 +1478,10 @@ public void testListPartitionNamesByValuesNullTblName() throws Exception { } } - @Test + @Test(expected = MetaException.class) public void testListPartitionNamesByValuesNullValues() throws Exception { createTable4PartColsParts(client); - List partNames = client.listPartitionNames(DB_NAME, TABLE_NAME, - (List)null, (short)-1); - assertEquals(4, partNames.size()); + client.listPartitionNames(DB_NAME, TABLE_NAME, (List)null, (short)-1); }