Repository: hive Updated Branches: refs/heads/master 3182378a5 -> 519306439
HIVE-14382: Improve the Functionality of Reverse FOR Statement (Akash Sethi, reviewed by Dmitry Tolpeko) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/51930643 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/51930643 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/51930643 Branch: refs/heads/master Commit: 51930643971df816ecf1de61b37d2bab5f455849 Parents: 3182378 Author: Dmitry Tolpeko <[email protected]> Authored: Thu Aug 4 13:32:49 2016 -0700 Committer: Dmitry Tolpeko <[email protected]> Committed: Thu Aug 4 13:32:49 2016 -0700 ---------------------------------------------------------------------- .../main/java/org/apache/hive/hplsql/Stmt.java | 39 ++++++++++++++------ hplsql/src/test/queries/local/for_range.sql | 2 +- 2 files changed, 28 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/51930643/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java ---------------------------------------------------------------------- diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java b/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java index c044616..0fafd59 100644 --- a/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java +++ b/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java @@ -976,24 +976,39 @@ public class Stmt { int end = evalPop(ctx.expr(1)).intValue(); int step = evalPop(ctx.expr(2), 1L).intValue(); exec.enterScope(Scope.Type.LOOP); - Var index = new Var(ctx.L_ID().getText(), new Long(start)); + Var index = setIndex(start, end, ctx); exec.addVariable(index); - if (ctx.T_REVERSE() == null) { for (int i = start; i <= end; i += step) { visit(ctx.block()); - index.increment(new Long(step)); - } - } else { - for (int i = start; i >= end; i -= step) { - visit(ctx.block()); - index.decrement(new Long(step)); - } - } + updateIndex(step, index, ctx); + } exec.leaveScope(); trace(ctx, "FOR RANGE - LEFT"); return 0; - } - + } + + /** + * To set the Value index for FOR Statement + */ + private Var setIndex(int start, int end, HplsqlParser.For_range_stmtContext ctx) { + + if (ctx.T_REVERSE() == null) + return new Var(ctx.L_ID().getText(), new Long(start)); + else + return new Var(ctx.L_ID().getText(), new Long(end)); + } + + /** + * To update the value of index for FOR Statement + */ + private void updateIndex(int step, Var index, HplsqlParser.For_range_stmtContext ctx) { + + if (ctx.T_REVERSE() == null) + index.increment(new Long(step)); + else + index.decrement(new Long(step)); + } + /** * EXEC, EXECUTE and EXECUTE IMMEDIATE statement to execute dynamic SQL or stored procedure */ http://git-wip-us.apache.org/repos/asf/hive/blob/51930643/hplsql/src/test/queries/local/for_range.sql ---------------------------------------------------------------------- diff --git a/hplsql/src/test/queries/local/for_range.sql b/hplsql/src/test/queries/local/for_range.sql index b7af115..7a0057f 100644 --- a/hplsql/src/test/queries/local/for_range.sql +++ b/hplsql/src/test/queries/local/for_range.sql @@ -7,7 +7,7 @@ END LOOP; PRINT i; -FOR i IN REVERSE 10..1 LOOP +FOR i IN REVERSE 1..10 LOOP PRINT i; END LOOP;
