Index: metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java =================================================================== --- metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java (revision 1296096) +++ metastore/src/test/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java (working copy) @@ -1437,27 +1437,27 @@ List vals = new ArrayList(3); vals.add("p11"); vals.add("p21"); - vals.add("p31"); + vals.add("30"); List vals2 = new ArrayList(3); vals2.add("p11"); vals2.add("p22"); - vals2.add("p31"); + vals2.add("30"); List vals3 = new ArrayList(3); vals3.add("p12"); vals3.add("p21"); - vals3.add("p31"); + vals3.add("31"); List vals4 = new ArrayList(3); vals4.add("p12"); vals4.add("p23"); - vals4.add("p31"); + vals4.add("31"); List vals5 = new ArrayList(3); vals5.add("p13"); vals5.add("p24"); - vals5.add("p31"); + vals5.add("31"); List vals6 = new ArrayList(3); vals6.add("p13"); vals6.add("p25"); - vals6.add("p31"); + vals6.add("31"); silentDropDatabase(dbName); @@ -1529,7 +1529,12 @@ checkFilter(client, dbName, tblName, "p1 <> \"p12\"", 4); checkFilter(client, dbName, tblName, "p1 like \"p1.*\"", 6); checkFilter(client, dbName, tblName, "p2 like \"p.*3\"", 1); + checkFilter(client, dbName, tblName, "p3 = 31", 4); + // Testcases depend on HIVE-2609 + //checkFilter(client, dbName, tblName, "p3 < 31", 2); + //checkFilter(client, dbName, tblName, "p3 > 29", 6); + //Test for setting the maximum partition count List partitions = client.listPartitionsByFilter(dbName, tblName, "p1 >= \"p12\"", (short) 2); @@ -1538,16 +1543,6 @@ //Negative tests Exception me = null; - try { - client.listPartitionsByFilter(dbName, - tblName, "p3 >= \"p12\"", (short) -1); - } catch(MetaException e) { - me = e; - } - assertNotNull(me); - assertTrue("Filter on int partition key", me.getMessage().contains( - "Filtering is supported only on partition keys of type string")); - me = null; try { client.listPartitionsByFilter(dbName, Index: metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java =================================================================== --- metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java (revision 1296096) +++ metastore/src/java/org/apache/hadoop/hive/metastore/parser/ExpressionTree.java (working copy) @@ -242,22 +242,8 @@ "> is not a partitioning key for the table"); } - //Can only support partitions whose types are string - if( ! table.getPartitionKeys().get(partitionColumnIndex). - getType().equals(org.apache.hadoop.hive.serde.Constants.STRING_TYPE_NAME) ) { - throw new MetaException - ("Filtering is supported only on partition keys of type string"); - } - - String valueParam = null; - try { - valueParam = (String) value; - } catch (ClassCastException e) { - throw new MetaException("Filtering is supported only on partition keys of type string"); - } - String paramName = PARAM_PREFIX + params.size(); - params.put(paramName, valueParam); + params.put(paramName, value); String filter; String keyEqual = FileUtils.escapePathName(keyName) + "="; @@ -279,7 +265,7 @@ "Value should be on the RHS for LIKE operator : " + "Key <" + keyName + ">"); } else if (operator == Operator.EQUALS) { - filter = makeFilterForEquals(keyName, valueParam, paramName, params, + filter = makeFilterForEquals(keyName, value.toString(), paramName, params, partitionColumnIndex, partitionColumnCount); } else { filter = paramName + @@ -291,7 +277,7 @@ filter = " " + valString + "." + operator.getJdoOp() + "(" + paramName + ") "; } else if (operator == Operator.EQUALS) { - filter = makeFilterForEquals(keyName, valueParam, paramName, params, + filter = makeFilterForEquals(keyName, value.toString(), paramName, params, partitionColumnIndex, partitionColumnCount); } else { filter = " " + valString + " "