diff --git hplsql/src/main/java/org/apache/hive/hplsql/Expression.java hplsql/src/main/java/org/apache/hive/hplsql/Expression.java index c10f702..05d5b3b 100644 --- hplsql/src/main/java/org/apache/hive/hplsql/Expression.java +++ hplsql/src/main/java/org/apache/hive/hplsql/Expression.java @@ -451,6 +451,10 @@ public void operatorEqual(HplsqlParser.Bool_expr_binaryContext ctx, boolean equa public void operatorCompare(HplsqlParser.Bool_expr_binaryContext ctx, HplsqlParser.Bool_expr_binary_operatorContext op) { Var v1 = evalPop(ctx.expr(0)); Var v2 = evalPop(ctx.expr(1)); + if (v1.isNull() || v2.isNull()) { + exec.stackPush(Var.Null); + return; + } int cmp = v1.compareTo(v2); boolean bool = false; if (op.T_GREATER() != null) { diff --git hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java index 8692661..3cfe698 100644 --- hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java +++ hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java @@ -89,6 +89,11 @@ public void testConcat() throws Exception { } @Test + public void testComparison() throws Exception { + run("comparison"); + } + + @Test public void testCreateFunction() throws Exception { run("create_function"); } diff --git hplsql/src/test/queries/local/comparison.sql hplsql/src/test/queries/local/comparison.sql new file mode 100644 index 0000000..2d3f73c --- /dev/null +++ hplsql/src/test/queries/local/comparison.sql @@ -0,0 +1,8 @@ +declare val1i string; +declare val2i string; + +if val1i > val2i then + print('val1 greater'); +else + print('maybe'); +end if; diff --git hplsql/src/test/results/local/comparison.out.txt hplsql/src/test/results/local/comparison.out.txt new file mode 100644 index 0000000..8b88dd9 --- /dev/null +++ hplsql/src/test/results/local/comparison.out.txt @@ -0,0 +1,6 @@ +Ln:1 DECLARE val1i string +Ln:2 DECLARE val2i string +Ln:4 IF +Ln:4 ELSE executed +Ln:7 PRINT +maybe \ No newline at end of file