HIVE-11618: Correct the SARG api to reunify the PredicateLeaf.Type INTEGER and LONG (Owen O'Malley, reviewed by Sergio Pena)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/97bf32a1 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/97bf32a1 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/97bf32a1 Branch: refs/heads/llap Commit: 97bf32a12f754d83a362aaa4048a6612d299a386 Parents: ed4517c Author: Sergio Pena <sergio.p...@cloudera.com> Authored: Fri Aug 28 17:59:15 2015 -0500 Committer: Sergio Pena <sergio.p...@cloudera.com> Committed: Fri Aug 28 17:59:15 2015 -0500 ---------------------------------------------------------------------- .../hadoop/hive/ql/io/orc/RecordReaderImpl.java | 2 - .../hive/ql/io/parquet/LeafFilterFactory.java | 14 +- .../read/ParquetFilterPredicateConverter.java | 35 +++-- .../hive/ql/io/sarg/ConvertAstToSearchArg.java | 3 - .../hive/ql/io/orc/TestInputOutputFormat.java | 4 +- .../hadoop/hive/ql/io/orc/TestOrcFile.java | 10 +- .../hive/ql/io/orc/TestRecordReaderImpl.java | 42 +++--- .../parquet/TestParquetRecordReaderWrapper.java | 50 +++++--- .../read/TestParquetFilterPredicate.java | 6 +- .../ql/io/sarg/TestConvertAstToSearchArg.java | 128 +++++++++++-------- .../hive/ql/io/sarg/TestSearchArgumentImpl.java | 22 ++-- .../hadoop/hive/ql/io/sarg/PredicateLeaf.java | 3 +- 12 files changed, 181 insertions(+), 138 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java index 0d765b1..fcb3746 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/RecordReaderImpl.java @@ -637,8 +637,6 @@ class RecordReaderImpl implements RecordReader { return ((BigDecimal) obj).doubleValue(); } break; - case INTEGER: - // fall through case LONG: if (obj instanceof Number) { // widening conversion http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/LeafFilterFactory.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/LeafFilterFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/LeafFilterFactory.java index a1dbc1a..1ceea6e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/LeafFilterFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/LeafFilterFactory.java @@ -22,6 +22,8 @@ import org.apache.hadoop.hive.ql.io.sarg.PredicateLeaf.Operator; import org.apache.parquet.filter2.predicate.FilterApi; import org.apache.parquet.filter2.predicate.FilterPredicate; import org.apache.parquet.io.api.Binary; +import org.apache.parquet.schema.PrimitiveType; +import org.apache.parquet.schema.Type; import static org.apache.parquet.filter2.predicate.FilterApi.eq; import static org.apache.parquet.filter2.predicate.FilterApi.lt; @@ -146,12 +148,16 @@ public class LeafFilterFactory { * @param type FilterPredicateType * @return */ - public FilterPredicateLeafBuilder getLeafFilterBuilderByType(PredicateLeaf.Type type){ + public FilterPredicateLeafBuilder getLeafFilterBuilderByType(PredicateLeaf.Type type, + Type parquetType){ switch (type){ - case INTEGER: - return new IntFilterPredicateLeafBuilder(); case LONG: - return new LongFilterPredicateLeafBuilder(); + if (parquetType.asPrimitiveType().getPrimitiveTypeName() == + PrimitiveType.PrimitiveTypeName.INT32) { + return new IntFilterPredicateLeafBuilder(); + } else { + return new LongFilterPredicateLeafBuilder(); + } case FLOAT: // float and double return new DoubleFilterPredicateLeafBuilder(); case STRING: // string, char, varchar http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/ParquetFilterPredicateConverter.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/ParquetFilterPredicateConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/ParquetFilterPredicateConverter.java index f170026..d1864ae 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/ParquetFilterPredicateConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/ParquetFilterPredicateConverter.java @@ -37,14 +37,6 @@ public class ParquetFilterPredicateConverter { private static final Log LOG = LogFactory.getLog(ParquetFilterPredicateConverter.class); /** - * Translate the search argument to the filter predicate parquet uses - * @return translate the sarg into a filter predicate - */ - public static FilterPredicate toFilterPredicate(SearchArgument sarg) { - return toFilterPredicate(sarg, null); - } - - /** * Translate the search argument to the filter predicate parquet uses. It includes * only the columns from the passed schema. * @return translate the sarg into a filter predicate @@ -58,18 +50,21 @@ public class ParquetFilterPredicateConverter { } } - return translate(sarg.getExpression(), sarg.getLeaves(), columns); + return translate(sarg.getExpression(), sarg.getLeaves(), columns, schema); } - private static FilterPredicate translate(ExpressionTree root, List<PredicateLeaf> leaves, Set<String> columns) { + private static FilterPredicate translate(ExpressionTree root, + List<PredicateLeaf> leaves, + Set<String> columns, + MessageType schema) { FilterPredicate p = null; switch (root.getOperator()) { case OR: for(ExpressionTree child: root.getChildren()) { if (p == null) { - p = translate(child, leaves, columns); + p = translate(child, leaves, columns, schema); } else { - FilterPredicate right = translate(child, leaves, columns); + FilterPredicate right = translate(child, leaves, columns, schema); // constant means no filter, ignore it when it is null if(right != null){ p = FilterApi.or(p, right); @@ -80,9 +75,9 @@ public class ParquetFilterPredicateConverter { case AND: for(ExpressionTree child: root.getChildren()) { if (p == null) { - p = translate(child, leaves, columns); + p = translate(child, leaves, columns, schema); } else { - FilterPredicate right = translate(child, leaves, columns); + FilterPredicate right = translate(child, leaves, columns, schema); // constant means no filter, ignore it when it is null if(right != null){ p = FilterApi.and(p, right); @@ -91,7 +86,8 @@ public class ParquetFilterPredicateConverter { } return p; case NOT: - FilterPredicate op = translate(root.getChildren().get(0), leaves, columns); + FilterPredicate op = translate(root.getChildren().get(0), leaves, + columns, schema); if (op != null) { return FilterApi.not(op); } else { @@ -101,8 +97,9 @@ public class ParquetFilterPredicateConverter { PredicateLeaf leaf = leaves.get(root.getLeaf()); // If columns is null, then we need to create the leaf - if (columns == null || columns.contains(leaf.getColumnName())) { - return buildFilterPredicateFromPredicateLeaf(leaf); + if (columns.contains(leaf.getColumnName())) { + Type parquetType = schema.getType(leaf.getColumnName()); + return buildFilterPredicateFromPredicateLeaf(leaf, parquetType); } else { // Do not create predicate if the leaf is not on the passed schema. return null; @@ -116,12 +113,12 @@ public class ParquetFilterPredicateConverter { } private static FilterPredicate buildFilterPredicateFromPredicateLeaf - (PredicateLeaf leaf) { + (PredicateLeaf leaf, Type parquetType) { LeafFilterFactory leafFilterFactory = new LeafFilterFactory(); FilterPredicateLeafBuilder builder; try { builder = leafFilterFactory - .getLeafFilterBuilderByType(leaf.getType()); + .getLeafFilterBuilderByType(leaf.getType(), parquetType); if (builder == null) { return null; } http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java b/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java index 5c4b7ea..e034650 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/sarg/ConvertAstToSearchArg.java @@ -88,7 +88,6 @@ public class ConvertAstToSearchArg { case BYTE: case SHORT: case INT: - return PredicateLeaf.Type.INTEGER; case LONG: return PredicateLeaf.Type.LONG; case CHAR: @@ -139,8 +138,6 @@ public class ConvertAstToSearchArg { return null; } switch (type) { - case INTEGER: - return ((Number) lit).intValue(); case LONG: return ((Number) lit).longValue(); case STRING: http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java index 547e799..ce86cd8 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java @@ -1844,7 +1844,7 @@ public class TestInputOutputFormat { types.add(builder.build()); types.add(builder.build()); SearchArgument isNull = SearchArgumentFactory.newBuilder() - .startAnd().isNull("cost", PredicateLeaf.Type.INTEGER).end().build(); + .startAnd().isNull("cost", PredicateLeaf.Type.LONG).end().build(); conf.set(ConvertAstToSearchArg.SARG_PUSHDOWN, toKryo(isNull)); conf.set(ColumnProjectionUtils.READ_COLUMN_NAMES_CONF_STR, "url,cost"); @@ -1889,7 +1889,7 @@ public class TestInputOutputFormat { SearchArgument sarg = SearchArgumentFactory.newBuilder() .startAnd() - .lessThan("z", PredicateLeaf.Type.INTEGER, new Integer(0)) + .lessThan("z", PredicateLeaf.Type.LONG, new Long(0)) .end() .build(); conf.set("sarg.pushdown", toKryo(sarg)); http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcFile.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcFile.java b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcFile.java index 4480d22..0bb8401 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcFile.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcFile.java @@ -1923,9 +1923,9 @@ public class TestOrcFile { SearchArgument sarg = SearchArgumentFactory.newBuilder() .startAnd() .startNot() - .lessThan("int1", PredicateLeaf.Type.INTEGER, 300000) + .lessThan("int1", PredicateLeaf.Type.LONG, 300000L) .end() - .lessThan("int1", PredicateLeaf.Type.INTEGER, 600000) + .lessThan("int1", PredicateLeaf.Type.LONG, 600000L) .end() .build(); RecordReader rows = reader.rowsOptions(new Reader.Options() @@ -1946,7 +1946,7 @@ public class TestOrcFile { // look through the file with no rows selected sarg = SearchArgumentFactory.newBuilder() .startAnd() - .lessThan("int1", PredicateLeaf.Type.INTEGER, 0) + .lessThan("int1", PredicateLeaf.Type.LONG, 0L) .end() .build(); rows = reader.rowsOptions(new Reader.Options() @@ -1959,9 +1959,9 @@ public class TestOrcFile { // select first 100 and last 100 rows sarg = SearchArgumentFactory.newBuilder() .startOr() - .lessThan("int1", PredicateLeaf.Type.INTEGER, 300 * 100) + .lessThan("int1", PredicateLeaf.Type.LONG, 300L * 100) .startNot() - .lessThan("int1", PredicateLeaf.Type.INTEGER, 300 * 3400) + .lessThan("int1", PredicateLeaf.Type.LONG, 300L * 3400) .end() .end() .build(); http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java index 7957cb4..839bbc6 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestRecordReaderImpl.java @@ -445,7 +445,7 @@ public class TestRecordReaderImpl { @Test public void testPredEvalWithStringStats() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf( - PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.INTEGER, "x", 100, null); + PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.LONG, "x", 100L, null); assertEquals(TruthValue.YES_NO, RecordReaderImpl.evaluatePredicateProto(createStringStats("10", "1000"), pred, null)); @@ -550,7 +550,7 @@ public class TestRecordReaderImpl { @Test public void testPredEvalWithDecimalStats() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf( - PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.INTEGER, "x", 15, null); + PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.LONG, "x", 15L, null); assertEquals(TruthValue.YES_NO, RecordReaderImpl.evaluatePredicateProto(createDecimalStats("10.0", "100.0"), pred, null)); @@ -590,7 +590,7 @@ public class TestRecordReaderImpl { @Test public void testPredEvalWithTimestampStats() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf( - PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.INTEGER, "x", 15, null); + PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.LONG, "x", 15L, null); assertEquals(TruthValue.YES_NO, RecordReaderImpl.evaluatePredicateProto(createTimestampStats(10, 100), pred, null)); @@ -637,8 +637,8 @@ public class TestRecordReaderImpl { @Test public void testEquals() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf - (PredicateLeaf.Operator.EQUALS, PredicateLeaf.Type.INTEGER, - "x", 15, null); + (PredicateLeaf.Operator.EQUALS, PredicateLeaf.Type.LONG, + "x", 15L, null); assertEquals(TruthValue.NO_NULL, RecordReaderImpl.evaluatePredicateProto(createIntStats(20L, 30L), pred, null)); assertEquals(TruthValue.YES_NO_NULL, @@ -656,8 +656,8 @@ public class TestRecordReaderImpl { @Test public void testNullSafeEquals() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf - (PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.INTEGER, - "x", 15, null); + (PredicateLeaf.Operator.NULL_SAFE_EQUALS, PredicateLeaf.Type.LONG, + "x", 15L, null); assertEquals(TruthValue.NO, RecordReaderImpl.evaluatePredicateProto(createIntStats(20L, 30L), pred, null)); assertEquals(TruthValue.YES_NO, @@ -675,8 +675,8 @@ public class TestRecordReaderImpl { @Test public void testLessThan() throws Exception { PredicateLeaf lessThan = TestSearchArgumentImpl.createPredicateLeaf - (PredicateLeaf.Operator.LESS_THAN, PredicateLeaf.Type.INTEGER, - "x", 15, null); + (PredicateLeaf.Operator.LESS_THAN, PredicateLeaf.Type.LONG, + "x", 15L, null); assertEquals(TruthValue.NO_NULL, RecordReaderImpl.evaluatePredicateProto(createIntStats(20L, 30L), lessThan, null)); assertEquals(TruthValue.NO_NULL, @@ -692,8 +692,8 @@ public class TestRecordReaderImpl { @Test public void testLessThanEquals() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf - (PredicateLeaf.Operator.LESS_THAN_EQUALS, PredicateLeaf.Type.INTEGER, - "x", 15, null); + (PredicateLeaf.Operator.LESS_THAN_EQUALS, PredicateLeaf.Type.LONG, + "x", 15L, null); assertEquals(TruthValue.NO_NULL, RecordReaderImpl.evaluatePredicateProto(createIntStats(20L, 30L), pred, null)); assertEquals(TruthValue.YES_NO_NULL, @@ -709,10 +709,10 @@ public class TestRecordReaderImpl { @Test public void testIn() throws Exception { List<Object> args = new ArrayList<Object>(); - args.add(10); - args.add(20); + args.add(10L); + args.add(20L); PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf - (PredicateLeaf.Operator.IN, PredicateLeaf.Type.INTEGER, + (PredicateLeaf.Operator.IN, PredicateLeaf.Type.LONG, "x", null, args); assertEquals(TruthValue.YES_NULL, RecordReaderImpl.evaluatePredicateProto(createIntStats(20L, 20L), pred, null)); @@ -727,10 +727,10 @@ public class TestRecordReaderImpl { @Test public void testBetween() throws Exception { List<Object> args = new ArrayList<Object>(); - args.add(10); - args.add(20); + args.add(10L); + args.add(20L); PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf - (PredicateLeaf.Operator.BETWEEN, PredicateLeaf.Type.INTEGER, + (PredicateLeaf.Operator.BETWEEN, PredicateLeaf.Type.LONG, "x", null, args); assertEquals(TruthValue.NO_NULL, RecordReaderImpl.evaluatePredicateProto(createIntStats(0L, 5L), pred, null)); @@ -751,7 +751,7 @@ public class TestRecordReaderImpl { @Test public void testIsNull() throws Exception { PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf - (PredicateLeaf.Operator.IS_NULL, PredicateLeaf.Type.INTEGER, + (PredicateLeaf.Operator.IS_NULL, PredicateLeaf.Type.LONG, "x", null, null); assertEquals(TruthValue.YES_NO, RecordReaderImpl.evaluatePredicateProto(createIntStats(20L, 30L), pred, null)); @@ -1306,10 +1306,10 @@ public class TestRecordReaderImpl { @Test public void testIntInBloomFilter() throws Exception { List<Object> args = new ArrayList<Object>(); - args.add(15); - args.add(19); + args.add(15L); + args.add(19L); PredicateLeaf pred = TestSearchArgumentImpl.createPredicateLeaf - (PredicateLeaf.Operator.IN, PredicateLeaf.Type.INTEGER, + (PredicateLeaf.Operator.IN, PredicateLeaf.Type.LONG, "x", null, args); BloomFilterIO bf = new BloomFilterIO(10000); for (int i = 20; i < 1000; i++) { http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetRecordReaderWrapper.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetRecordReaderWrapper.java b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetRecordReaderWrapper.java index f9ca528..e92b696 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetRecordReaderWrapper.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestParquetRecordReaderWrapper.java @@ -28,6 +28,8 @@ import org.apache.hadoop.hive.ql.io.sarg.SearchArgument; import org.apache.hadoop.hive.ql.io.sarg.SearchArgument.TruthValue; import org.apache.hadoop.hive.ql.io.sarg.SearchArgumentFactory; import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable; +import org.apache.parquet.schema.MessageType; +import org.apache.parquet.schema.MessageTypeParser; import org.junit.Test; import java.sql.Date; @@ -48,15 +50,19 @@ public class TestParquetRecordReaderWrapper { SearchArgument sarg = SearchArgumentFactory.newBuilder() .startNot() .startOr() - .isNull("x", PredicateLeaf.Type.INTEGER) - .between("y", PredicateLeaf.Type.INTEGER, 10, 20) - .in("z", PredicateLeaf.Type.INTEGER, 1, 2, 3) + .isNull("x", PredicateLeaf.Type.LONG) + .between("y", PredicateLeaf.Type.LONG, 10L, 20L) + .in("z", PredicateLeaf.Type.LONG, 1L, 2L, 3L) .nullSafeEquals("a", PredicateLeaf.Type.STRING, "stinger") .end() .end() .build(); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + MessageType schema = MessageTypeParser.parseMessageType("message test {" + + " optional int32 x; required int32 y; required int32 z;" + + " optional binary a;}"); + FilterPredicate p = + ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = "and(and(and(not(eq(x, null)), not(and(lt(y, 20), not(lteq(y, 10))))), not(or(or(eq(z, 1), " + "eq(z, 2)), eq(z, 3)))), not(eq(a, Binary{\"stinger\"})))"; @@ -75,23 +81,27 @@ public class TestParquetRecordReaderWrapper { .equals("z", PredicateLeaf.Type.DECIMAL, new HiveDecimalWritable("1.0")) .end() .build(); + MessageType schema = MessageTypeParser.parseMessageType("message test {" + + " required int32 x; required binary y; required binary z;}"); assertEquals("lteq(y, Binary{\"hi \"})", - ParquetFilterPredicateConverter.toFilterPredicate(sarg).toString()); + ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema).toString()); sarg = SearchArgumentFactory.newBuilder() .startNot() .startOr() - .isNull("x", PredicateLeaf.Type.INTEGER) + .isNull("x", PredicateLeaf.Type.LONG) .between("y", PredicateLeaf.Type.DECIMAL, new HiveDecimalWritable("10"), new HiveDecimalWritable("20.0")) - .in("z", PredicateLeaf.Type.INTEGER, 1, 2, 3) + .in("z", PredicateLeaf.Type.LONG, 1L, 2L, 3L) .nullSafeEquals("a", PredicateLeaf.Type.STRING, new HiveVarchar("stinger", 100).toString()) .end() .end() .build(); - - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + schema = MessageTypeParser.parseMessageType("message test {" + + " optional int32 x; required binary y; required int32 z;" + + " optional binary a;}"); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = "and(and(not(eq(x, null)), not(or(or(eq(z, 1), eq(z, 2)), eq(z, 3)))), " + "not(eq(a, Binary{\"stinger\"})))"; @@ -110,23 +120,28 @@ public class TestParquetRecordReaderWrapper { new HiveDecimalWritable("1.0")) .end() .build(); + MessageType schema = MessageTypeParser.parseMessageType("message test {" + + " required int32 x; required binary y; required binary z;}"); assertEquals("lteq(y, Binary{\"hi \"})", - ParquetFilterPredicateConverter.toFilterPredicate(sarg).toString()); + ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema).toString()); sarg = SearchArgumentFactory.newBuilder() .startNot() .startOr() - .isNull("x", PredicateLeaf.Type.INTEGER) + .isNull("x", PredicateLeaf.Type.LONG) .between("y", PredicateLeaf.Type.DECIMAL, new HiveDecimalWritable("10"), new HiveDecimalWritable("20.0")) - .in("z", PredicateLeaf.Type.INTEGER, 1, 2, 3) + .in("z", PredicateLeaf.Type.LONG, 1L, 2L, 3L) .nullSafeEquals("a", PredicateLeaf.Type.STRING, new HiveVarchar("stinger", 100).toString()) .end() .end() .build(); + schema = MessageTypeParser.parseMessageType("message test {" + + " optional int32 x; required binary y; required int32 z;" + + " optional binary a;}"); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = "and(and(not(eq(x, null)), not(or(or(eq(z, 1), eq(z, 2)), eq(z, 3)))), " + "not(eq(a, Binary{\"stinger\"})))"; assertEquals(expected, p.toString()); @@ -137,16 +152,19 @@ public class TestParquetRecordReaderWrapper { SearchArgument sarg = SearchArgumentFactory.newBuilder() .startAnd() - .lessThan("x", PredicateLeaf.Type.INTEGER, new Integer((short) 22)) - .lessThan("x1", PredicateLeaf.Type.INTEGER, new Integer(22)) + .lessThan("x", PredicateLeaf.Type.LONG, 22L) + .lessThan("x1", PredicateLeaf.Type.LONG, 22L) .lessThanEquals("y", PredicateLeaf.Type.STRING, new HiveChar("hi", 10).toString()) .equals("z", PredicateLeaf.Type.FLOAT, new Double(0.22)) .equals("z1", PredicateLeaf.Type.FLOAT, new Double(0.22)) .end() .build(); + MessageType schema = MessageTypeParser.parseMessageType("message test {" + + " required int32 x; required int32 x1;" + + " required binary y; required float z; required float z1;}"); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = "and(and(and(and(lt(x, 22), lt(x1, 22))," + " lteq(y, Binary{\"hi \"})), eq(z, " + "0.22)), eq(z1, 0.22))"; http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/read/TestParquetFilterPredicate.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/read/TestParquetFilterPredicate.java b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/read/TestParquetFilterPredicate.java index 847a02b..ac5c1a0 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/read/TestParquetFilterPredicate.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/read/TestParquetFilterPredicate.java @@ -35,9 +35,9 @@ public class TestParquetFilterPredicate { SearchArgument sarg = SearchArgumentFactory.newBuilder() .startNot() .startOr() - .isNull("a", PredicateLeaf.Type.INTEGER) - .between("y", PredicateLeaf.Type.INTEGER, 10, 20) // Column will be removed from filter - .in("z", PredicateLeaf.Type.INTEGER, 1, 2, 3) // Column will be removed from filter + .isNull("a", PredicateLeaf.Type.LONG) + .between("y", PredicateLeaf.Type.LONG, 10L, 20L) // Column will be removed from filter + .in("z", PredicateLeaf.Type.LONG, 1L, 2L, 3L) // Column will be removed from filter .nullSafeEquals("a", PredicateLeaf.Type.STRING, "stinger") .end() .end() http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java b/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java index 9e8425a..e72789d 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestConvertAstToSearchArg.java @@ -28,6 +28,8 @@ import org.apache.hadoop.hive.ql.exec.Utilities; import org.apache.hadoop.hive.ql.io.parquet.read.ParquetFilterPredicateConverter; import org.apache.hadoop.hive.ql.io.sarg.SearchArgument.TruthValue; import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc; +import org.apache.parquet.schema.MessageType; +import org.apache.parquet.schema.MessageTypeParser; import org.junit.Test; import java.beans.XMLDecoder; @@ -550,7 +552,11 @@ public class TestConvertAstToSearchArg { List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(9, leaves.size()); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + MessageType schema = + MessageTypeParser.parseMessageType("message test { required int32 id;" + + " required binary first_name; }"); + + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String[] conditions = new String[]{ "eq(first_name, Binary{\"john\"})", /* first_name = 'john' */ "not(lteq(first_name, Binary{\"greg\"}))", /* 'greg' < first_name */ @@ -586,34 +592,34 @@ public class TestConvertAstToSearchArg { assertEquals("alan", leaf.getLiteral()); leaf = leaves.get(3); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(12, leaf.getLiteral()); + assertEquals(12L, leaf.getLiteral()); leaf = leaves.get(4); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(13, leaf.getLiteral()); + assertEquals(13L, leaf.getLiteral()); leaf = leaves.get(5); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(15, leaf.getLiteral()); + assertEquals(15L, leaf.getLiteral()); leaf = leaves.get(6); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(16, leaf.getLiteral()); + assertEquals(16L, leaf.getLiteral()); leaf = leaves.get(7); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.NULL_SAFE_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(30, leaf.getLiteral()); + assertEquals(30L, leaf.getLiteral()); leaf = leaves.get(8); assertEquals(PredicateLeaf.Type.STRING, leaf.getType()); @@ -842,7 +848,10 @@ public class TestConvertAstToSearchArg { "lteq(id, 4)" /* id <= 4 */ }; - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + MessageType schema = + MessageTypeParser.parseMessageType("message test { required int32 id;" + + " required binary first_name; }"); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = String.format("or(or(or(%1$s, %2$s), %3$s), %4$s)", conditions); assertEquals(expected, p.toString()); @@ -860,16 +869,16 @@ public class TestConvertAstToSearchArg { assertEquals("sue", leaf.getLiteral()); leaf = leaves.get(2); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(12, leaf.getLiteral()); + assertEquals(12L, leaf.getLiteral()); leaf = leaves.get(3); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN_EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(4, leaf.getLiteral()); + assertEquals(4L, leaf.getLiteral()); assertEquals("(or leaf-0 (not leaf-1) (not leaf-2) leaf-3)", sarg.getExpression().toString()); @@ -1271,18 +1280,21 @@ public class TestConvertAstToSearchArg { "eq(first_name, Binary{\"alan\"})", /* first_name = 'alan' */ "eq(last_name, Binary{\"smith\"})" /* 'smith' = last_name */ }; + MessageType schema = + MessageTypeParser.parseMessageType("message test { required int32 id;" + + " required binary first_name; required binary last_name;}"); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = String.format("and(and(and(%1$s, %2$s), %3$s), %4$s)", conditions); assertEquals(expected, p.toString()); PredicateLeaf leaf = leaves.get(0); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.BETWEEN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); assertEquals(null, leaf.getLiteral()); - assertEquals(23, leaf.getLiteralList().get(0)); - assertEquals(45, leaf.getLiteralList().get(1)); + assertEquals(23L, leaf.getLiteralList().get(0)); + assertEquals(45L, leaf.getLiteralList().get(1)); leaf = leaves.get(1); assertEquals(PredicateLeaf.Type.STRING, leaf.getType()); @@ -1493,15 +1505,19 @@ public class TestConvertAstToSearchArg { "or(eq(id, 34), eq(id, 50))" /* id in (34,50) */ }; - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + MessageType schema = + MessageTypeParser.parseMessageType("message test { required int32 id;" + + " required binary first_name; }"); + FilterPredicate p = + ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = String.format("and(and(%1$s, %2$s), %3$s)", conditions); assertEquals(expected, p.toString()); PredicateLeaf leaf = leaves.get(0); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.EQUALS, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(12, leaf.getLiteral()); + assertEquals(12L, leaf.getLiteral()); leaf = leaves.get(1); assertEquals(PredicateLeaf.Type.STRING, leaf.getType()); @@ -1511,11 +1527,11 @@ public class TestConvertAstToSearchArg { assertEquals("sue", leaf.getLiteralList().get(1)); leaf = leaves.get(2); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.IN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(34, leaf.getLiteralList().get(0)); - assertEquals(50, leaf.getLiteralList().get(1)); + assertEquals(34L, leaf.getLiteralList().get(0)); + assertEquals(50L, leaf.getLiteralList().get(1)); assertEquals("(and (not leaf-0) leaf-1 leaf-2)", sarg.getExpression().toString()); @@ -1752,7 +1768,10 @@ public class TestConvertAstToSearchArg { List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(1, leaves.size()); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + MessageType schema = + MessageTypeParser.parseMessageType("message test { required int32 id;" + + " required binary first_name; }"); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = "and(lt(first_name, Binary{\"greg\"}), not(lteq(first_name, Binary{\"david\"})))"; assertEquals(p.toString(), expected); @@ -2232,7 +2251,10 @@ public class TestConvertAstToSearchArg { List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(9, leaves.size()); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + MessageType schema = + MessageTypeParser.parseMessageType("message test { required int32 id;" + + " required binary first_name; }"); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = "and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(" + "or(or(or(lt(id, 18), lt(id, 10)), lt(id, 13)), lt(id, 16)), " + "or(or(or(lt(id, 18), lt(id, 11)), lt(id, 13)), lt(id, 16))), " + @@ -2255,58 +2277,58 @@ public class TestConvertAstToSearchArg { assertEquals(p.toString(), expected); PredicateLeaf leaf = leaves.get(0); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(18, leaf.getLiteral()); + assertEquals(18L, leaf.getLiteral()); leaf = leaves.get(1); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(10, leaf.getLiteral()); + assertEquals(10L, leaf.getLiteral()); leaf = leaves.get(2); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(13, leaf.getLiteral()); + assertEquals(13L, leaf.getLiteral()); leaf = leaves.get(3); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(16, leaf.getLiteral()); + assertEquals(16L, leaf.getLiteral()); leaf = leaves.get(4); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(11, leaf.getLiteral()); + assertEquals(11L, leaf.getLiteral()); leaf = leaves.get(5); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(12, leaf.getLiteral()); + assertEquals(12L, leaf.getLiteral()); leaf = leaves.get(6); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(14, leaf.getLiteral()); + assertEquals(14L, leaf.getLiteral()); leaf = leaves.get(7); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(15, leaf.getLiteral()); + assertEquals(15L, leaf.getLiteral()); leaf = leaves.get(8); - assertEquals(PredicateLeaf.Type.INTEGER, leaf.getType()); + assertEquals(PredicateLeaf.Type.LONG, leaf.getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaf.getOperator()); assertEquals("id", leaf.getColumnName()); - assertEquals(17, leaf.getLiteral()); + assertEquals(17L, leaf.getLiteral()); assertEquals("(and" + " (or leaf-0 leaf-1 leaf-2 leaf-3)" + @@ -2388,7 +2410,10 @@ public class TestConvertAstToSearchArg { List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(0, leaves.size()); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + MessageType schema = + MessageTypeParser.parseMessageType("message test { required int32 id;" + + " required binary first_name; }"); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); assertNull(p); assertEquals("YES_NO_NULL", @@ -2643,15 +2668,18 @@ public class TestConvertAstToSearchArg { List<PredicateLeaf> leaves = sarg.getLeaves(); assertEquals(1, leaves.size()); - FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg); + MessageType schema = + MessageTypeParser.parseMessageType("message test { required int32 id;" + + " required binary first_name; }"); + FilterPredicate p = ParquetFilterPredicateConverter.toFilterPredicate(sarg, schema); String expected = "and(not(lt(id, 10)), not(lt(id, 10)))"; assertEquals(expected, p.toString()); - assertEquals(PredicateLeaf.Type.INTEGER, leaves.get(0).getType()); + assertEquals(PredicateLeaf.Type.LONG, leaves.get(0).getType()); assertEquals(PredicateLeaf.Operator.LESS_THAN, leaves.get(0).getOperator()); assertEquals("id", leaves.get(0).getColumnName()); - assertEquals(10, leaves.get(0).getLiteral()); + assertEquals(10L, leaves.get(0).getLiteral()); assertEquals("(and (not leaf-0) (not leaf-0))", sarg.getExpression().toString()); http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java ---------------------------------------------------------------------- diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java b/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java index 20de846..573d5c6 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java @@ -330,7 +330,7 @@ public class TestSearchArgumentImpl { SearchArgument sarg = SearchArgumentFactory.newBuilder() .startAnd() - .lessThan("x", PredicateLeaf.Type.INTEGER, 10) + .lessThan("x", PredicateLeaf.Type.LONG, 10L) .lessThanEquals("y", PredicateLeaf.Type.STRING, "hi") .equals("z", PredicateLeaf.Type.FLOAT, 1.0) .end() @@ -342,9 +342,9 @@ public class TestSearchArgumentImpl { sarg = SearchArgumentFactory.newBuilder() .startNot() .startOr() - .isNull("x", PredicateLeaf.Type.INTEGER) - .between("y", PredicateLeaf.Type.INTEGER, 10, 20) - .in("z", PredicateLeaf.Type.INTEGER, 1, 2, 3) + .isNull("x", PredicateLeaf.Type.LONG) + .between("y", PredicateLeaf.Type.LONG, 10L, 20L) + .in("z", PredicateLeaf.Type.LONG, 1L, 2L, 3L) .nullSafeEquals("a", PredicateLeaf.Type.STRING, "stinger") .end() .end() @@ -376,10 +376,10 @@ public class TestSearchArgumentImpl { sarg = SearchArgumentFactory.newBuilder() .startNot() .startOr() - .isNull("x", PredicateLeaf.Type.INTEGER) + .isNull("x", PredicateLeaf.Type.LONG) .between("y", PredicateLeaf.Type.DECIMAL, new HiveDecimalWritable("10"), new HiveDecimalWritable("20.0")) - .in("z", PredicateLeaf.Type.INTEGER, 1, 2, 3) + .in("z", PredicateLeaf.Type.LONG, 1L, 2L, 3L) .nullSafeEquals("a", PredicateLeaf.Type.STRING, new HiveVarchar("stinger", 100).toString()) .end() @@ -413,10 +413,10 @@ public class TestSearchArgumentImpl { sarg = SearchArgumentFactory.newBuilder() .startNot() .startOr() - .isNull("x", PredicateLeaf.Type.INTEGER) + .isNull("x", PredicateLeaf.Type.LONG) .between("y", PredicateLeaf.Type.DECIMAL, new HiveDecimalWritable("10"), new HiveDecimalWritable("20.0")) - .in("z", PredicateLeaf.Type.INTEGER, 1, 2, 3) + .in("z", PredicateLeaf.Type.LONG, 1L, 2L, 3L) .nullSafeEquals("a", PredicateLeaf.Type.STRING, new HiveVarchar("stinger", 100).toString()) .end() @@ -435,8 +435,8 @@ public class TestSearchArgumentImpl { SearchArgument sarg = SearchArgumentFactory.newBuilder() .startAnd() - .lessThan("x", PredicateLeaf.Type.INTEGER, new Integer((short) 22)) - .lessThan("x1", PredicateLeaf.Type.INTEGER, new Integer(22)) + .lessThan("x", PredicateLeaf.Type.LONG, 22L) + .lessThan("x1", PredicateLeaf.Type.LONG, 22L) .lessThanEquals("y", PredicateLeaf.Type.STRING, new HiveChar("hi", 10).toString()) .equals("z", PredicateLeaf.Type.FLOAT, new Double(0.22)) @@ -480,7 +480,7 @@ public class TestSearchArgumentImpl { SearchArgument sarg = SearchArgumentFactory.newBuilder() .startAnd() - .lessThan("x", PredicateLeaf.Type.INTEGER, "hi") + .lessThan("x", PredicateLeaf.Type.LONG, "hi") .end() .build(); } http://git-wip-us.apache.org/repos/asf/hive/blob/97bf32a1/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/PredicateLeaf.java ---------------------------------------------------------------------- diff --git a/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/PredicateLeaf.java b/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/PredicateLeaf.java index 3a92565..dc71db4 100644 --- a/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/PredicateLeaf.java +++ b/storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/PredicateLeaf.java @@ -47,8 +47,7 @@ public interface PredicateLeaf { * The possible types for sargs. */ public static enum Type { - INTEGER(Integer.class), // all of the integer types except long - LONG(Long.class), + LONG(Long.class), // all of the integer types FLOAT(Double.class), // float and double STRING(String.class), // string, char, varchar DATE(Date.class),