diff --git hplsql/src/main/java/org/apache/hive/hplsql/Var.java hplsql/src/main/java/org/apache/hive/hplsql/Var.java index 480d97c..3cbfc8a 100644 --- hplsql/src/main/java/org/apache/hive/hplsql/Var.java +++ hplsql/src/main/java/org/apache/hive/hplsql/Var.java @@ -452,6 +452,12 @@ else if (v == null) { else if (type == Type.BIGINT && v.type == Type.BIGINT) { return ((Long)value).compareTo((Long)v.value); } + else if (type == Type.DOUBLE || v.type == Type.DOUBLE) { + return Double.compare(doubleValue(), v.doubleValue()); + } + else if (type == Type.DECIMAL || v.type == Type.DECIMAL) { + return decimalValue().compareTo(v.decimalValue()); + } else if (type == Type.STRING && v.type == Type.STRING) { return ((String)value).compareTo((String)v.value); } @@ -522,6 +528,9 @@ public BigDecimal decimalValue() { if (type == Type.DECIMAL) { return (BigDecimal)value; } + else if (type == Type.BIGINT) { + return BigDecimal.valueOf(((Long)value).longValue()); + } throw new NumberFormatException(); } diff --git hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java index 8692661..c97bb6b 100644 --- hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java +++ hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java @@ -87,6 +87,11 @@ public void testCoalesce() throws Exception { public void testConcat() throws Exception { run("concat"); } + + @Test + public void testComparison2() throws Exception { + run("comparison2"); + } @Test public void testCreateFunction() throws Exception { diff --git hplsql/src/test/queries/local/comparison2.sql hplsql/src/test/queries/local/comparison2.sql new file mode 100644 index 0000000..5029d4f --- /dev/null +++ hplsql/src/test/queries/local/comparison2.sql @@ -0,0 +1,108 @@ +declare i int default 10; +declare d decimal(4,2) default 1.1; +declare f float default 3.7; +declare db double default 7.1; + +print 'Integer comparison' + +if i > i print 'bad' else print 'ok'; +if i = i print 'ok' else print 'bad'; +if i <= i print 'ok' else print 'bad'; +if i >= i print 'ok' else print 'bad'; +if i < i print 'bad' else print 'ok'; + +if i > d print 'ok' else print 'bad'; +if i = d print 'bad' else print 'ok'; +if i <= d print 'bad' else print 'ok'; +if i >= d print 'ok' else print 'bad'; +if i < d print 'bad' else print 'ok'; + +if i > f print 'ok' else print 'bad'; +if i = f print 'bad' else print 'ok'; +if i <= f print 'bad' else print 'ok'; +if i >= f print 'ok' else print 'bad'; +if i < f print 'bad' else print 'ok'; + +if i > db print 'ok' else print 'bad'; +if i = db print 'bad' else print 'ok'; +if i <= db print 'bad' else print 'ok'; +if i >= db print 'ok' else print 'bad'; +if i < db print 'bad' else print 'ok'; + +print 'Decimal comparison' + +if d > i print 'bad' else print 'ok'; +if d = i print 'bad' else print 'ok'; +if d <= i print 'ok' else print 'bad'; +if d >= i print 'bad' else print 'ok'; +if d < i print 'ok' else print 'bad'; + +if d > d print 'bad' else print 'ok'; +if d = d print 'ok' else print 'bad'; +if d <= d print 'ok' else print 'bad'; +if d >= d print 'ok' else print 'bad'; +if d < d print 'bad' else print 'ok'; + +if d > f print 'bad' else print 'ok'; +if d = f print 'bad' else print 'ok'; +if d <= f print 'ok' else print 'bad'; +if d >= f print 'bad' else print 'ok'; +if d < f print 'ok' else print 'bad'; + +if d > db print 'bad' else print 'ok'; +if d = db print 'bad' else print 'ok'; +if d <= db print 'ok' else print 'bad'; +if d >= db print 'bad' else print 'ok'; +if d < db print 'ok' else print 'bad'; + +print 'Float comparison' + +if f > i print 'bad' else print 'ok'; +if f = i print 'bad' else print 'ok'; +if f <= i print 'ok' else print 'bad'; +if f >= i print 'bad' else print 'ok'; +if f < i print 'ok' else print 'bad'; + +if f > d print 'ok' else print 'bad'; +if f = d print 'bad' else print 'ok'; +if f <= d print 'bad' else print 'ok'; +if f >= d print 'ok' else print 'bad'; +if f < d print 'bad' else print 'ok'; + +if f > f print 'bad' else print 'ok'; +if f = f print 'ok' else print 'bad'; +if f <= f print 'ok' else print 'bad'; +if f >= f print 'ok' else print 'bad'; +if f < f print 'bad' else print 'ok'; + +if f > db print 'bad' else print 'ok'; +if f = db print 'bad' else print 'ok'; +if f <= db print 'ok' else print 'bad'; +if f >= db print 'bad' else print 'ok'; +if f < db print 'ok' else print 'bad'; + +print 'Double comparison' + +if db > i print 'bad' else print 'ok'; +if db = i print 'bad' else print 'ok'; +if db <= i print 'ok' else print 'bad'; +if db >= i print 'bad' else print 'ok'; +if db < i print 'ok' else print 'bad'; + +if db > d print 'ok' else print 'bad'; +if db = d print 'bad' else print 'ok'; +if db <= d print 'bad' else print 'ok'; +if db >= d print 'ok' else print 'bad'; +if db < d print 'bad' else print 'ok'; + +if db > f print 'ok' else print 'bad'; +if db = f print 'bad' else print 'ok'; +if db <= f print 'bad' else print 'ok'; +if db >= f print 'ok' else print 'bad'; +if db < f print 'bad' else print 'ok'; + +if db > db print 'bad' else print 'ok'; +if db = db print 'ok' else print 'bad'; +if db <= db print 'ok' else print 'bad'; +if db >= db print 'ok' else print 'bad'; +if db < db print 'bad' else print 'ok'; \ No newline at end of file diff --git hplsql/src/test/results/local/comparison2.out.txt hplsql/src/test/results/local/comparison2.out.txt new file mode 100644 index 0000000..cb4e0f3 --- /dev/null +++ hplsql/src/test/results/local/comparison2.out.txt @@ -0,0 +1,332 @@ +Ln:1 DECLARE i int = 10 +Ln:2 DECLARE d decimal = 1.1 +Ln:3 DECLARE f float = 3.7 +Ln:4 DECLARE db double = 7.1 +Ln:6 PRINT +Integer comparison +Ln:8 IF +Ln:8 ELSE executed +Ln:8 PRINT +ok +Ln:9 IF +Ln:9 IF TRUE executed +Ln:9 PRINT +ok +Ln:10 IF +Ln:10 IF TRUE executed +Ln:10 PRINT +ok +Ln:11 IF +Ln:11 IF TRUE executed +Ln:11 PRINT +ok +Ln:12 IF +Ln:12 ELSE executed +Ln:12 PRINT +ok +Ln:14 IF +Ln:14 IF TRUE executed +Ln:14 PRINT +ok +Ln:15 IF +Ln:15 ELSE executed +Ln:15 PRINT +ok +Ln:16 IF +Ln:16 ELSE executed +Ln:16 PRINT +ok +Ln:17 IF +Ln:17 IF TRUE executed +Ln:17 PRINT +ok +Ln:18 IF +Ln:18 ELSE executed +Ln:18 PRINT +ok +Ln:20 IF +Ln:20 IF TRUE executed +Ln:20 PRINT +ok +Ln:21 IF +Ln:21 ELSE executed +Ln:21 PRINT +ok +Ln:22 IF +Ln:22 ELSE executed +Ln:22 PRINT +ok +Ln:23 IF +Ln:23 IF TRUE executed +Ln:23 PRINT +ok +Ln:24 IF +Ln:24 ELSE executed +Ln:24 PRINT +ok +Ln:26 IF +Ln:26 IF TRUE executed +Ln:26 PRINT +ok +Ln:27 IF +Ln:27 ELSE executed +Ln:27 PRINT +ok +Ln:28 IF +Ln:28 ELSE executed +Ln:28 PRINT +ok +Ln:29 IF +Ln:29 IF TRUE executed +Ln:29 PRINT +ok +Ln:30 IF +Ln:30 ELSE executed +Ln:30 PRINT +ok +Ln:32 PRINT +Decimal comparison +Ln:34 IF +Ln:34 ELSE executed +Ln:34 PRINT +ok +Ln:35 IF +Ln:35 ELSE executed +Ln:35 PRINT +ok +Ln:36 IF +Ln:36 IF TRUE executed +Ln:36 PRINT +ok +Ln:37 IF +Ln:37 ELSE executed +Ln:37 PRINT +ok +Ln:38 IF +Ln:38 IF TRUE executed +Ln:38 PRINT +ok +Ln:40 IF +Ln:40 ELSE executed +Ln:40 PRINT +ok +Ln:41 IF +Ln:41 IF TRUE executed +Ln:41 PRINT +ok +Ln:42 IF +Ln:42 IF TRUE executed +Ln:42 PRINT +ok +Ln:43 IF +Ln:43 IF TRUE executed +Ln:43 PRINT +ok +Ln:44 IF +Ln:44 ELSE executed +Ln:44 PRINT +ok +Ln:46 IF +Ln:46 ELSE executed +Ln:46 PRINT +ok +Ln:47 IF +Ln:47 ELSE executed +Ln:47 PRINT +ok +Ln:48 IF +Ln:48 IF TRUE executed +Ln:48 PRINT +ok +Ln:49 IF +Ln:49 ELSE executed +Ln:49 PRINT +ok +Ln:50 IF +Ln:50 IF TRUE executed +Ln:50 PRINT +ok +Ln:52 IF +Ln:52 ELSE executed +Ln:52 PRINT +ok +Ln:53 IF +Ln:53 ELSE executed +Ln:53 PRINT +ok +Ln:54 IF +Ln:54 IF TRUE executed +Ln:54 PRINT +ok +Ln:55 IF +Ln:55 ELSE executed +Ln:55 PRINT +ok +Ln:56 IF +Ln:56 IF TRUE executed +Ln:56 PRINT +ok +Ln:58 PRINT +Float comparison +Ln:60 IF +Ln:60 ELSE executed +Ln:60 PRINT +ok +Ln:61 IF +Ln:61 ELSE executed +Ln:61 PRINT +ok +Ln:62 IF +Ln:62 IF TRUE executed +Ln:62 PRINT +ok +Ln:63 IF +Ln:63 ELSE executed +Ln:63 PRINT +ok +Ln:64 IF +Ln:64 IF TRUE executed +Ln:64 PRINT +ok +Ln:66 IF +Ln:66 IF TRUE executed +Ln:66 PRINT +ok +Ln:67 IF +Ln:67 ELSE executed +Ln:67 PRINT +ok +Ln:68 IF +Ln:68 ELSE executed +Ln:68 PRINT +ok +Ln:69 IF +Ln:69 IF TRUE executed +Ln:69 PRINT +ok +Ln:70 IF +Ln:70 ELSE executed +Ln:70 PRINT +ok +Ln:72 IF +Ln:72 ELSE executed +Ln:72 PRINT +ok +Ln:73 IF +Ln:73 IF TRUE executed +Ln:73 PRINT +ok +Ln:74 IF +Ln:74 IF TRUE executed +Ln:74 PRINT +ok +Ln:75 IF +Ln:75 IF TRUE executed +Ln:75 PRINT +ok +Ln:76 IF +Ln:76 ELSE executed +Ln:76 PRINT +ok +Ln:78 IF +Ln:78 ELSE executed +Ln:78 PRINT +ok +Ln:79 IF +Ln:79 ELSE executed +Ln:79 PRINT +ok +Ln:80 IF +Ln:80 IF TRUE executed +Ln:80 PRINT +ok +Ln:81 IF +Ln:81 ELSE executed +Ln:81 PRINT +ok +Ln:82 IF +Ln:82 IF TRUE executed +Ln:82 PRINT +ok +Ln:84 PRINT +Double comparison +Ln:86 IF +Ln:86 ELSE executed +Ln:86 PRINT +ok +Ln:87 IF +Ln:87 ELSE executed +Ln:87 PRINT +ok +Ln:88 IF +Ln:88 IF TRUE executed +Ln:88 PRINT +ok +Ln:89 IF +Ln:89 ELSE executed +Ln:89 PRINT +ok +Ln:90 IF +Ln:90 IF TRUE executed +Ln:90 PRINT +ok +Ln:92 IF +Ln:92 IF TRUE executed +Ln:92 PRINT +ok +Ln:93 IF +Ln:93 ELSE executed +Ln:93 PRINT +ok +Ln:94 IF +Ln:94 ELSE executed +Ln:94 PRINT +ok +Ln:95 IF +Ln:95 IF TRUE executed +Ln:95 PRINT +ok +Ln:96 IF +Ln:96 ELSE executed +Ln:96 PRINT +ok +Ln:98 IF +Ln:98 IF TRUE executed +Ln:98 PRINT +ok +Ln:99 IF +Ln:99 ELSE executed +Ln:99 PRINT +ok +Ln:100 IF +Ln:100 ELSE executed +Ln:100 PRINT +ok +Ln:101 IF +Ln:101 IF TRUE executed +Ln:101 PRINT +ok +Ln:102 IF +Ln:102 ELSE executed +Ln:102 PRINT +ok +Ln:104 IF +Ln:104 ELSE executed +Ln:104 PRINT +ok +Ln:105 IF +Ln:105 IF TRUE executed +Ln:105 PRINT +ok +Ln:106 IF +Ln:106 IF TRUE executed +Ln:106 PRINT +ok +Ln:107 IF +Ln:107 IF TRUE executed +Ln:107 PRINT +ok +Ln:108 IF +Ln:108 ELSE executed +Ln:108 PRINT +ok \ No newline at end of file