diff --git hplsql/src/main/java/org/apache/hive/hplsql/Var.java hplsql/src/main/java/org/apache/hive/hplsql/Var.java index 480d97c..96be9ab 100644 --- hplsql/src/main/java/org/apache/hive/hplsql/Var.java +++ hplsql/src/main/java/org/apache/hive/hplsql/Var.java @@ -178,7 +178,8 @@ else if (type == Type.STRING) { } else if (type == Type.BIGINT) { if (val.type == Type.STRING) { - value = Long.parseLong((String)val.value); + // String can contain the fractional part that must be discarded i.e. 10.3 -> 10 + value = new Long(new BigDecimal((String)val.value).longValue()); } } else if (type == Type.DECIMAL) { diff --git hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java index 8692661..de4d905 100644 --- hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java +++ hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java @@ -72,7 +72,12 @@ public void testCast() throws Exception { public void testCast2() throws Exception { run("cast2"); } - + + @Test + public void testCast3() throws Exception { + run("cast3"); + } + @Test public void testChar() throws Exception { run("char"); diff --git hplsql/src/test/queries/local/cast3.sql hplsql/src/test/queries/local/cast3.sql new file mode 100644 index 0000000..ee56d3d --- /dev/null +++ hplsql/src/test/queries/local/cast3.sql @@ -0,0 +1,8 @@ +print cast('10.0' as integer); +print cast('10.3' as integer); +print cast('10.0' as int); +print cast('10.3' as int); +print cast('10.0' as smallint); +print cast('10.3' as smallint); +print cast('10.0' as bigint); +print cast('10.3' as bigint); \ No newline at end of file diff --git hplsql/src/test/results/local/cast3.out.txt hplsql/src/test/results/local/cast3.out.txt new file mode 100644 index 0000000..cceb582 --- /dev/null +++ hplsql/src/test/results/local/cast3.out.txt @@ -0,0 +1,16 @@ +Ln:1 PRINT +10 +Ln:2 PRINT +10 +Ln:3 PRINT +10 +Ln:4 PRINT +10 +Ln:5 PRINT +10 +Ln:6 PRINT +10 +Ln:7 PRINT +10 +Ln:8 PRINT +10 \ No newline at end of file