Author: pradeepkth Date: Mon Apr 20 20:37:12 2009 New Revision: 766859 URL: http://svn.apache.org/viewvc?rev=766859&view=rev Log: PIG-627: multiquery support incremental patch (hagleitn via pradeepkth)
Modified: hadoop/pig/branches/multiquery/src/org/apache/pig/PigServer.java hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/JobControlCompiler.java hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MRCompiler.java hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MultiQueryOptimizer.java hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POStore.java hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/util/PlanHelper.java hadoop/pig/branches/multiquery/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC15.gld hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC16.gld hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC17.gld Modified: hadoop/pig/branches/multiquery/src/org/apache/pig/PigServer.java URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/src/org/apache/pig/PigServer.java?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/src/org/apache/pig/PigServer.java (original) +++ hadoop/pig/branches/multiquery/src/org/apache/pig/PigServer.java Mon Apr 20 20:37:12 2009 @@ -212,7 +212,9 @@ */ public boolean isBatchEmpty() throws FrontendException { if (currDAG == null) { - throw new IllegalStateException("setBatchOn() must be called first."); + int errCode = 1083; + String msg = "setBatchOn() must be called first."; + throw new FrontendException(msg, errCode, PigException.INPUT); } return currDAG.isBatchEmpty(); @@ -231,7 +233,9 @@ } if (currDAG == null || !isBatchOn()) { - throw new IllegalStateException("setBatchOn() must be called first."); + int errCode = 1083; + String msg = "setBatchOn() must be called first."; + throw new FrontendException(msg, errCode, PigException.INPUT); } currDAG.execute(); @@ -245,7 +249,9 @@ */ public void discardBatch() throws FrontendException { if (currDAG == null || !isBatchOn()) { - throw new IllegalStateException("setBatchOn() must be called first."); + int errCode = 1083; + String msg = "setBatchOn() must be called first."; + throw new FrontendException(msg, errCode, PigException.INPUT); } currDAG = graphs.pop(); @@ -373,7 +379,9 @@ Graph graph = currDAG.clone(); if (graph == null) { - throw new AssertionError("Re-parsing has failed"); + int errCode = 2127; + String msg = "Cloning of plan failed."; + throw new FrontendException(msg, errCode, PigException.BUG); } return graph.getPlan(alias); @@ -972,14 +980,14 @@ } } - LogicalPlan parseQuery(String query, int startLine) throws IOException { - if (query != null) { - query = query.trim(); - } - + LogicalPlan parseQuery(String query, int startLine) throws IOException { if (query == null || query.length() == 0) { - throw new IllegalArgumentException(); + int errCode = 1084; + String msg = "Invalid Query: Query is null or of size 0"; + throw new FrontendException(msg, errCode, PigException.INPUT); } + + query = query.trim(); try { return new LogicalPlanBuilder(PigServer.this.pigContext).parse(scope, query, @@ -1099,7 +1107,9 @@ try { store.getPlan().connect(store, load); } catch (PlanException ex) { - log.warn(ex.getMessage()); + int errCode = 2128; + String msg = "Failed to connect store with dependent load."; + throw new FrontendException(msg, errCode, ex); } } } Modified: hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/JobControlCompiler.java URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/JobControlCompiler.java?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/JobControlCompiler.java (original) +++ hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/JobControlCompiler.java Mon Apr 20 20:37:12 2009 @@ -260,32 +260,33 @@ //used as the working directory String user = System.getProperty("user.name"); jobConf.setUser(user != null ? user : "Pigster"); - - //Process the POLoads - List<POLoad> lds = PlanHelper.getLoads(mro.mapPlan); - if(lds!=null && lds.size()>0){ - for (POLoad ld : lds) { - - Pair<FileSpec, Boolean> p = new Pair<FileSpec, Boolean>(ld.getLFile(), ld.isSplittable()); - //Store the inp filespecs - inp.add(p); - - //Store the target operators for tuples read - //from this input - List<PhysicalOperator> ldSucs = mro.mapPlan.getSuccessors(ld); - List<OperatorKey> ldSucKeys = new ArrayList<OperatorKey>(); - if(ldSucs!=null){ - for (PhysicalOperator operator2 : ldSucs) { - ldSucKeys.add(operator2.getOperatorKey()); + try{ + //Process the POLoads + List<POLoad> lds = PlanHelper.getLoads(mro.mapPlan); + + if(lds!=null && lds.size()>0){ + for (POLoad ld : lds) { + + Pair<FileSpec, Boolean> p = new Pair<FileSpec, Boolean>(ld.getLFile(), ld.isSplittable()); + //Store the inp filespecs + inp.add(p); + + //Store the target operators for tuples read + //from this input + List<PhysicalOperator> ldSucs = mro.mapPlan.getSuccessors(ld); + List<OperatorKey> ldSucKeys = new ArrayList<OperatorKey>(); + if(ldSucs!=null){ + for (PhysicalOperator operator2 : ldSucs) { + ldSucKeys.add(operator2.getOperatorKey()); + } } + inpTargets.add(ldSucKeys); + //Remove the POLoad from the plan + mro.mapPlan.remove(ld); } - inpTargets.add(ldSucKeys); - //Remove the POLoad from the plan - mro.mapPlan.remove(ld); } - } - try{ + //Create the jar of all functions reuired File submitJarFile = File.createTempFile("Job", ".jar"); // ensure the job jar is deleted on exit Modified: hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MRCompiler.java URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MRCompiler.java?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MRCompiler.java (original) +++ hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MRCompiler.java Mon Apr 20 20:37:12 2009 @@ -292,14 +292,14 @@ if (op instanceof POLoad) { if (predecessors.size() != 1) { - int errCode = 2035; + int errCode = 2125; String msg = "Expected at most one predecessor of load. Got "+predecessors.size(); throw new PlanException(msg, errCode, PigException.BUG); } PhysicalOperator p = predecessors.get(0); if (!(p instanceof POStore)) { - int errCode = 2036; + int errCode = 2126; String msg = "Predecessor of load should be a store. Got "+p.getClass(); throw new PlanException(msg, errCode, PigException.BUG); } Modified: hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MultiQueryOptimizer.java URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MultiQueryOptimizer.java?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MultiQueryOptimizer.java (original) +++ hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/MultiQueryOptimizer.java Mon Apr 20 20:37:12 2009 @@ -34,6 +34,8 @@ import org.apache.pig.impl.plan.PlanException; import org.apache.pig.impl.plan.ReverseDependencyOrderWalker; import org.apache.pig.impl.plan.VisitorException; +import org.apache.pig.impl.plan.optimizer.OptimizerException; +import org.apache.pig.PigException; /** * An optimizer that merges all or part splittee MapReduceOpers into @@ -156,7 +158,9 @@ storePlan.addAsLeaf(storeOp); splitOp.addPlan(storePlan); } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2129; + String msg = "Internal Error. Unable to add store to the split plan for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); } } } @@ -178,7 +182,9 @@ try { splitterPl.merge(pl); } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2130; + String msg = "Internal Error. Unable to merge split plans for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); } // connect two plans @@ -188,7 +194,10 @@ try { splitterPl.connect(pred, root); } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2131; + String msg = "Internal Error. Unable to connect split plan for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); + } } } @@ -228,7 +237,9 @@ try { splitOp.addPlan(pl); } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2130; + String msg = "Internal Error. Unable to merge split plans for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); } } @@ -237,7 +248,9 @@ try { splitterPl.replace(storeOp, splitOp);; } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2132; + String msg = "Internal Error. Unable to replace store with split operator for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); } // remove all the map-only splittees from the MROperPlan @@ -260,7 +273,9 @@ try { splitOp.addPlan(pl); } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2130; + String msg = "Internal Error. Unable to merge split plans for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); } splitter.setMapDone(true); @@ -274,7 +289,9 @@ try { splitterPl.replace(storeOp, splitOp);; } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2132; + String msg = "Internal Error. Unable to replace store with split operator for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); } } @@ -310,7 +327,9 @@ try { getPlan().connect(newMR, succ); } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2133; + String msg = "Internal Error. Unable to connect map plan with successors for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); } } } @@ -324,7 +343,9 @@ try { getPlan().connect(pred, newMR); } catch (PlanException e) { - throw new VisitorException(e); + int errCode = 2134; + String msg = "Internal Error. Unable to connect map plan with predecessors for optimization."; + throw new OptimizerException(msg, errCode, PigException.BUG, e); } } } Modified: hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POStore.java URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POStore.java?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POStore.java (original) +++ hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/relationalOperators/POStore.java Mon Apr 20 20:37:12 2009 @@ -127,8 +127,9 @@ break; } } catch (IOException ioe) { - log.error("Received error from storer function: " + ioe); - throw new ExecException(ioe); + int errCode = 2135; + String msg = "Received error from store function." + ioe.getMessage(); + throw new ExecException(msg, errCode, ioe); } return res; } Modified: hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/util/PlanHelper.java URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/util/PlanHelper.java?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/util/PlanHelper.java (original) +++ hadoop/pig/branches/multiquery/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/util/PlanHelper.java Mon Apr 20 20:37:12 2009 @@ -48,14 +48,10 @@ * @param plan * @return List of stores (could be empty) */ - public static List<POStore> getStores(PhysicalPlan plan) { + public static List<POStore> getStores(PhysicalPlan plan) throws VisitorException { LoadStoreFinder finder = new LoadStoreFinder(plan); - try { - finder.visit(); - } catch (VisitorException ve) { - log.warn("Exception in getStores(): "+ve.getMessage()); - } + finder.visit(); return finder.getStores(); } @@ -64,14 +60,10 @@ * @param plan * @return List of loads (could be empty) */ - public static List<POLoad> getLoads(PhysicalPlan plan) { + public static List<POLoad> getLoads(PhysicalPlan plan) throws VisitorException { LoadStoreFinder finder = new LoadStoreFinder(plan); - try { - finder.visit(); - } catch (VisitorException ve) { - log.warn("Exception in getLoads(): "+ve.getMessage()); - } + finder.visit(); return finder.getLoads(); } Modified: hadoop/pig/branches/multiquery/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj (original) +++ hadoop/pig/branches/multiquery/src/org/apache/pig/tools/pigscript/parser/PigScriptParser.jj Mon Apr 20 20:37:12 2009 @@ -404,9 +404,16 @@ {processIllustrate(t1.image);} | <DESCRIBE> + ( t1 = <IDENTIFIER> {processDescribe(t1.image);} | + {processDescribe(null);} + ) + | + <ALIASES> + {printAliases();} + | Explain() | <HELP> Modified: hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC15.gld URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC15.gld?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC15.gld (original) +++ hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC15.gld Mon Apr 20 20:37:12 2009 @@ -1,4 +1,4 @@ -MapReduce(1,GFCross) - -153: +MapReduce(1,GFCross) - -156: | Store(DummyFil:DummyLdr) - --6405280822876279137 | | | |---New For Each(false)[tuple] - -6741648588878535427 @@ -10,10 +10,10 @@ | |---Package[tuple]{Unknown} - -6079615556647418436 | Local Rearrange[tuple]{Unknown}(false) - -8219725798912083822 | | -| |---Load(file:/tmp/temp-1456742965/tmp-586682361:org.apache.pig.builtin.BinStorage) - -152 +| |---Load(file:/tmp/temp-1456742965/tmp-586682361:org.apache.pig.builtin.BinStorage) - -155 | -|---MapReduce(1,AVG) - -150: - | Store(file:/tmp/temp-1456742965/tmp-586682361:org.apache.pig.builtin.BinStorage) - -151 +|---MapReduce(1,AVG) - -153: + | Store(file:/tmp/temp-1456742965/tmp-586682361:org.apache.pig.builtin.BinStorage) - -154 | | | |---New For Each(false)[tuple] - --2783416442434419494 | | | @@ -24,10 +24,10 @@ | |---Package[tuple]{Unknown} - --1613182091613226659 | Local Rearrange[tuple]{Unknown}(false) - -5165956429696944631 | | - | |---Load(file:/tmp/temp-1456742965/tmp-26634357:org.apache.pig.builtin.BinStorage) - -149 + | |---Load(file:/tmp/temp-1456742965/tmp-26634357:org.apache.pig.builtin.BinStorage) - -152 | - |---MapReduce(20,TestMRCompiler$WeirdComparator,COUNT,SUM) - -142: - | Store(file:/tmp/temp-1456742965/tmp-26634357:org.apache.pig.builtin.BinStorage) - -148 + |---MapReduce(20,TestMRCompiler$WeirdComparator,COUNT,SUM) - -145: + | Store(file:/tmp/temp-1456742965/tmp-26634357:org.apache.pig.builtin.BinStorage) - -151 | | | |---New For Each(false,false)[tuple] - -2197807331204639125 | | | @@ -39,31 +39,37 @@ | | | | | |---Project[tuple][*] - -6139496040975471496 | | - | |---New For Each(true)[tuple] - -147 + | |---New For Each(true)[tuple] - -150 | | | - | | Project[bag][1] - -146 + | | Project[bag][1] - -149 | | - | |---Package[tuple]{tuple} - -145 - | Local Rearrange[tuple]{tuple}(false) - -144 + | |---Package[tuple]{tuple} - -148 + | Local Rearrange[tuple]{tuple}(false) - -147 | | | - | | Project[tuple][*] - -143 + | | Project[tuple][*] - -146 | | - | |---Load(file:/tmp/temp-1456742965/tmp-1456742965:org.apache.pig.builtin.BinStorage) - -141 + | |---Load(file:/tmp/temp-1456742965/tmp-1456742965:org.apache.pig.builtin.BinStorage) - -144 | |---MapReduce(1,TestMRCompiler$WeirdComparator) - -130: - | Store(file:/tmp/temp-1456742965/tmp2077335416:org.apache.pig.builtin.BinStorage) - -140 + | Store(file:/tmp/temp-1456742965/tmp2077335416:org.apache.pig.builtin.BinStorage) - -143 | | - | |---New For Each(false,false)[tuple] - -139 + | |---New For Each(false)[tuple] - -142 | | | - | | Constant(20) - -138 + | | POUserFunc(org.apache.pig.impl.builtin.FindQuantiles)[tuple] - -141 | | | - | | POSort[bag](org.apache.pig.test.TestMRCompiler$WeirdComparator) - -4188863770717253580 - | | | | - | | | Project[tuple][*] - -137 - | | | - | | |---Project[tuple][1] - -136 + | | |---Project[tuple][*] - -140 | | - | |---Package[tuple]{chararray} - -135 + | |---New For Each(false,false)[tuple] - -139 + | | | + | | Constant(20) - -138 + | | | + | | POSort[bag](org.apache.pig.test.TestMRCompiler$WeirdComparator) - -4188863770717253580 + | | | | + | | | Project[tuple][*] - -137 + | | | + | | |---Project[tuple][1] - -136 + | | + | |---Package[tuple]{chararray} - -135 | Local Rearrange[tuple]{chararray}(false) - -134 | | | | | Constant(all) - -133 Modified: hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC16.gld URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC16.gld?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC16.gld (original) +++ hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC16.gld Mon Apr 20 20:37:12 2009 @@ -1,36 +1,36 @@ -MapReduce(-1) - -167: +MapReduce(-1) - -170: | Store(DummyFil:DummyLdr) - --696216369324861973 | | -| |---New For Each(true)[bag] - -170 +| |---New For Each(true)[bag] - -173 | | | -| | Project[tuple][0] - -169 +| | Project[tuple][0] - -172 | | -| |---Package[tuple]{tuple} - -168 -| Local Rearrange[tuple]{tuple}(true) - -164 +| |---Package[tuple]{tuple} - -171 +| Local Rearrange[tuple]{tuple}(true) - -167 | | | -| | Project[tuple][*] - -163 +| | Project[tuple][*] - -166 | | -| |---Load(file:/tmp/temp-1456742965/tmp2077335416:org.apache.pig.builtin.BinStorage) - -166 +| |---Load(file:/tmp/temp-1456742965/tmp2077335416:org.apache.pig.builtin.BinStorage) - -169 | -|---MapReduce(-1) - -162: - | Store(file:/tmp/temp-1456742965/tmp2077335416:org.apache.pig.builtin.BinStorage) - -165 +|---MapReduce(-1) - -165: + | Store(file:/tmp/temp-1456742965/tmp2077335416:org.apache.pig.builtin.BinStorage) - -168 | | | |---Package[tuple]{Unknown} - -2975419344702132532 | Local Rearrange[tuple]{Unknown}(false) - -6555138338004402415 | | - | |---Load(file:/tmp/temp-1456742965/tmp-1456742965:org.apache.pig.builtin.BinStorage) - -161 + | |---Load(file:/tmp/temp-1456742965/tmp-1456742965:org.apache.pig.builtin.BinStorage) - -164 | - |---MapReduce(-1) - -154: - | Store(file:/tmp/temp-1456742965/tmp-1456742965:org.apache.pig.builtin.BinStorage) - -160 + |---MapReduce(-1) - -157: + | Store(file:/tmp/temp-1456742965/tmp-1456742965:org.apache.pig.builtin.BinStorage) - -163 | | - | |---New For Each(true)[bag] - -159 + | |---New For Each(true)[bag] - -162 | | | - | | Project[tuple][0] - -158 + | | Project[tuple][0] - -161 | | - | |---Package[tuple]{tuple} - -157 - | Local Rearrange[tuple]{tuple}(true) - -156 + | |---Package[tuple]{tuple} - -160 + | Local Rearrange[tuple]{tuple}(true) - -159 | | | - | | Project[tuple][*] - -155 + | | Project[tuple][*] - -158 | | | |---Filter[tuple] - --8322891634142946616 | | | Modified: hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC17.gld URL: http://svn.apache.org/viewvc/hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC17.gld?rev=766859&r1=766858&r2=766859&view=diff ============================================================================== --- hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC17.gld (original) +++ hadoop/pig/branches/multiquery/test/org/apache/pig/test/data/GoldenFiles/MRC17.gld Mon Apr 20 20:37:12 2009 @@ -1,16 +1,16 @@ -MapReduce(1) - -171: +MapReduce(1) - -174: | Store(DummyFil:DummyLdr) - -3851605818031718348 | | -| |---Limit - -177 +| |---Limit - -180 | | -| |---New For Each(true)[bag] - -176 +| |---New For Each(true)[bag] - -179 | | | -| | Project[tuple][1] - -175 +| | Project[tuple][1] - -178 | | -| |---Package[tuple]{tuple} - -174 -| Local Rearrange[tuple]{tuple}(false) - -173 +| |---Package[tuple]{tuple} - -177 +| Local Rearrange[tuple]{tuple}(false) - -176 | | | -| | Project[tuple][*] - -172 +| | Project[tuple][*] - -175 | | | |---Limit - --8049873144002881309 | |