[ https://issues.apache.org/jira/browse/HIVE-24458?focusedWorklogId=543635&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-543635 ]
ASF GitHub Bot logged work on HIVE-24458: ----------------------------------------- Author: ASF GitHub Bot Created on: 28/Jan/21 13:28 Start Date: 28/Jan/21 13:28 Worklog Time Spent: 10m Work Description: pgaref commented on a change in pull request #1726: URL: https://github.com/apache/hive/pull/1726#discussion_r566060211 ########## File path: ql/src/test/org/apache/hadoop/hive/ql/io/sarg/TestSearchArgumentImpl.java ########## @@ -85,100 +89,101 @@ public static PredicateLeaf createPredicateLeaf(PredicateLeaf.Operator operator, @Test public void testNotPushdown() throws Exception { assertEquals("leaf-1", SearchArgumentImpl.BuilderImpl.pushDownNot(leaf(1)) - .toString()); + .toOldString()); assertEquals("(not leaf-1)", - SearchArgumentImpl.BuilderImpl.pushDownNot(not(leaf(1))).toString()); + SearchArgumentImpl.BuilderImpl.pushDownNot(not(leaf(1))).toOldString()); assertEquals("leaf-1", SearchArgumentImpl.BuilderImpl.pushDownNot(not(not(leaf(1)))) - .toString()); + .toOldString()); assertEquals("(not leaf-1)", SearchArgumentImpl.BuilderImpl.pushDownNot(not(not(not(leaf(1))))). - toString()); + toOldString()); assertEquals("(or leaf-1 (not leaf-2))", SearchArgumentImpl.BuilderImpl.pushDownNot(not(and(not(leaf(1)), - leaf(2)))).toString()); + leaf(2)))).toOldString()); assertEquals("(and (not leaf-1) leaf-2)", SearchArgumentImpl.BuilderImpl.pushDownNot(not(or(leaf(1), - not(leaf(2))))).toString()); + not(leaf(2))))).toOldString()); assertEquals("(or (or (not leaf-1) leaf-2) leaf-3)", SearchArgumentImpl.BuilderImpl.pushDownNot(or(not(and(leaf(1), not(leaf(2)))), - not(not(leaf(3))))).toString()); + not(not(leaf(3))))).toOldString()); assertEquals("NO", SearchArgumentImpl.BuilderImpl.pushDownNot( - not(constant(TruthValue.YES))).toString()); + not(constant(TruthValue.YES))).toOldString()); assertEquals("YES", SearchArgumentImpl.BuilderImpl.pushDownNot( - not(constant(TruthValue.NO))).toString()); + not(constant(TruthValue.NO))).toOldString()); assertEquals("NULL", SearchArgumentImpl.BuilderImpl.pushDownNot( - not(constant(TruthValue.NULL))).toString()); + not(constant(TruthValue.NULL))).toOldString()); assertEquals("YES_NO", SearchArgumentImpl.BuilderImpl.pushDownNot( - not(constant(TruthValue.YES_NO))).toString()); + not(constant(TruthValue.YES_NO))).toOldString()); assertEquals("YES_NULL", SearchArgumentImpl.BuilderImpl.pushDownNot( - not(constant(TruthValue.NO_NULL))).toString()); + not(constant(TruthValue.NO_NULL))).toOldString()); assertEquals("NO_NULL", SearchArgumentImpl.BuilderImpl.pushDownNot( - not(constant(TruthValue.YES_NULL))).toString()); + not(constant(TruthValue.YES_NULL))).toOldString()); assertEquals("YES_NO_NULL", SearchArgumentImpl.BuilderImpl.pushDownNot( - not(constant(TruthValue.YES_NO_NULL))).toString()); + not(constant(TruthValue.YES_NO_NULL))).toOldString()); } @Test public void testFlatten() throws Exception { - assertEquals("leaf-1", SearchArgumentImpl.BuilderImpl.flatten(leaf(1)).toString()); + PredicateLeafImpl leaf1 = new PredicateLeafImpl(); Review comment: Unused variable ########## File path: storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/ExpressionTree.java ########## @@ -31,25 +31,25 @@ public enum Operator {OR, AND, NOT, LEAF, CONSTANT} private final Operator operator; private final List<ExpressionTree> children; - private int leaf; + private final SearchArgumentImpl.PredicateLeafImpl leaf; Review comment: This could be changed to PredicateLeaf -- see below ########## File path: storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentImpl.java ########## @@ -504,28 +493,18 @@ public SearchArgument build() { throw new IllegalArgumentException("Failed to end " + currentTree.size() + " operations."); } + ExpressionTree optimized = optimize(root); Review comment: maybe rename vars to compact and normalized ExpressionTree to avoid confusion? ########## File path: storage-api/src/test/org/apache/hadoop/hive/ql/io/sarg/SearchArgumentFactoryTest.java ########## @@ -0,0 +1,160 @@ +package org.apache.hadoop.hive.ql.io.sarg; Review comment: Apache License? ########## File path: storage-api/src/java/org/apache/hadoop/hive/ql/io/sarg/SearchArgument.java ########## @@ -162,6 +162,13 @@ public boolean isNeeded() { */ public ExpressionTree getExpression(); + /** + * Get the expression tree without the normalization to conjunctive normal Review comment: Nit: could also explicitly say in **getExpression** above that it normalizes the expression ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org Issue Time Tracking ------------------- Worklog Id: (was: 543635) Time Spent: 0.5h (was: 20m) > Allow access to SArgs without converting to disjunctive normal form > ------------------------------------------------------------------- > > Key: HIVE-24458 > URL: https://issues.apache.org/jira/browse/HIVE-24458 > Project: Hive > Issue Type: Improvement > Reporter: Owen O'Malley > Assignee: Owen O'Malley > Priority: Major > Labels: pull-request-available > Time Spent: 0.5h > Remaining Estimate: 0h > > For some use cases, it is useful to have access to the SArg expression in a > non-normalized form. Currently, the SArg only provides the fully normalized > expression. -- This message was sent by Atlassian Jira (v8.3.4#803005)