private Element fixupGroupsOfOne(ElementGroup eg) { ElementTransform transform = new ElementTransformCleanGroupsOfOne() ; ExprTransform exprTransform = new ExprTransformApplyElementTransform(transform) ; Element el2 = ElementTransformer.transform(eg, transform, exprTransform) ; // Top level is always a group or a subquery. if ( ! ( el2 instanceof ElementGroup ) && ! ( el2 instanceof ElementSubQuery ) ) { ElementGroup eg2 = new ElementGroup() ; eg2.addElement(el2); el2 = eg2 ; } return el2 ; }
private ElementGroup unwrap(ElementGroup eltGroup) { if ( eltGroup.size() != 1 ) return eltGroup ; Element el = eltGroup.get(0) ; if ( ! ( el instanceof ElementGroup ) ) return eltGroup ; ElementGroup eltGroup2 = (ElementGroup)el ; return unwrap(eltGroup2) ; }
innerGroup = unwrap(innerGroup) ; boolean mustProtect = containsFilter(innerGroup) ;
private static void test(String input, String expected) { if ( expected == null ) expected = input ; String qs = gen(PRE, input) ; String qsExpected = gen(PRE, expected) ; Query query = QueryFactory.create(qs, Syntax.syntaxARQ) ; Query query2 = QueryTransformOps.transform(query, new ElementTransformCleanGroupsOfOne()) ; Query queryExpected = QueryFactory.create(qsExpected, Syntax.syntaxARQ) ; Op op1 = Algebra.compile(query) ; Op op2 = Algebra.compile(query2) ; assertEquals("Algebra different", op1, op2) ; boolean modified = ! query.equals(query2) ; boolean expectModification = !queryExpected.equals(query) ; assertEquals("Expect query modifed?", expectModification, modified) ; }