Files
impala/testdata/workloads/functional-query/queries/QueryTest/java-udf.test
Philip Zeyliger 635149b85f IMPALA-8016: Fix lifecycle of classloader for UDFs.
The ClassLoader whence a UDF was loaded needs to be kept open for
executions of the UDF, so that the UDF can load other classes from the
same jar. (A typical scenario might be a utility class.) This was
broken by the fix to IMPALA-7668.

This commit moves closing the ClassLoader to the close() function.

A test for a UDF that imports a static method from another file has been
added. Doing so failed without this change.

Change-Id: Ic02e42fb25a2754ede21fe00312a60f07e0ba8a2
Reviewed-on: http://gerrit.cloudera.org:8080/12125
Reviewed-by: Philip Zeyliger <philip@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2018-12-27 21:02:57 +00:00

320 lines
6.4 KiB
Plaintext

====
---- QUERY
select hive_pi()
---- RESULTS
3.141592653589793
---- TYPES
DOUBLE
====
---- QUERY
select hive_bin(100)
---- RESULTS
'1100100'
---- TYPES
STRING
====
---- QUERY
select min(hive_pi()) from functional.alltypesagg
---- RESULTS
3.141592653589793
---- TYPES
DOUBLE
====
---- QUERY
# Test identity functions
select identity(true), identity(cast(NULL as boolean));
---- TYPES
boolean, boolean
---- RESULTS
true,NULL
====
---- QUERY
select identity(cast(10 as tinyint)), identity(cast(NULL as tinyint));
---- TYPES
tinyint, tinyint
---- RESULTS
10,NULL
====
---- QUERY
select identity(cast(10 as smallint)), identity(cast(NULL as smallint));
---- TYPES
smallint, smallint
---- RESULTS
10,NULL
====
---- QUERY
select identity(cast(10 as int)), identity(cast(NULL as int));
---- TYPES
int, int
---- RESULTS
10,NULL
====
---- QUERY
select identity(cast(10 as bigint)), identity(cast(NULL as bigint));
---- TYPES
bigint, bigint
---- RESULTS
10,NULL
====
---- QUERY
select identity(cast(10.0 as float)), identity(cast(NULL as float));
---- TYPES
float, float
---- RESULTS
10,NULL
====
---- QUERY
select identity(cast(10.0 as double)), identity(cast(NULL as double));
---- TYPES
double, double
---- RESULTS
10,NULL
====
---- QUERY
# IMPALA-1456. Each "identity" call below tests a different type (BytesWritable, Text,
# and String).
select identity("why hello there"),
identity("why", " hello there"),
identity("why", " hello", " there"),
identity(cast(NULL as string)),
identity(cast(NULL as string), cast(NULL as string)),
identity(cast(NULL as string), cast(NULL as string), cast(NULL as string));
---- TYPES
string, string, string, string, string, string
---- RESULTS
'why hello there','why hello there','why hello there','NULL','NULL','NULL'
====
---- QUERY
# IMPALA-1134. Each "identity" call below tests a different type (BytesWritable, Text,
# and String). The different types are handled slightly differently.
select length(identity("0123456789")),
length(identity("0123456789", "0123456789")),
length(identity("0123456789", "0123456789", "0123456789"));
---- TYPES
int, int, int
---- RESULTS
10,20,30
====
---- QUERY
# IMPALA-1392: Hive UDFs that throw exceptions should return NULL
select throws_exception();
---- TYPES
boolean
---- RESULTS
NULL
====
---- QUERY
select throws_exception() from functional.alltypestiny;
---- TYPES
boolean
---- RESULTS
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
====
---- QUERY
select hive_add(cast(1 as int), cast(2 as int));
---- TYPES
int
---- RESULTS
3
====
---- QUERY
select hive_add(hive_add(cast(1 as int), cast(2 as int)), cast(2 as int));
---- TYPES
int
---- RESULTS
5
====
---- QUERY
select hive_add(cast(hive_add(cast(1 as int), cast(2 as int)) - hive_add(cast(2 as int), cast(1 as int)) as int), cast(2 as int));
---- TYPES
int
---- RESULTS
2
====
---- QUERY
select hive_add(cast(1 as smallint), cast(2 as smallint));
---- TYPES
smallint
---- RESULTS
3
====
---- QUERY
select hive_add(cast(1.0 as float), cast(2.0 as float));
---- TYPES
float
---- RESULTS
3.0
====
---- QUERY
select hive_add(cast(1.0 as double), cast(2.0 as double));
---- TYPES
double
---- RESULTS
3.0
====
---- QUERY
select hive_add(cast(1 as boolean), cast(0 as boolean));
---- TYPES
boolean
---- RESULTS
false
====
---- QUERY
# Testing whether all of persistent Java udfs are accessible.
select identity_anytype(true);
---- TYPES
boolean
---- RESULTS
true
====
---- QUERY
select identity_anytype(cast(10 as tinyint));
---- TYPES
tinyint
---- RESULTS
10
====
---- QUERY
select identity_anytype(cast(10 as smallint));
---- TYPES
smallint
---- RESULTS
10
====
---- QUERY
select identity_anytype(cast(10 as int));
---- TYPES
int
---- RESULTS
10
====
---- QUERY
select identity_anytype(cast(10 as bigint));
---- TYPES
bigint
---- RESULTS
10
====
---- QUERY
select identity_anytype(cast(10.0 as float));
---- TYPES
float
---- RESULTS
10
====
---- QUERY
select identity_anytype(cast(10.0 as double));
---- TYPES
double
---- RESULTS
10
====
---- QUERY
select identity_anytype("a", "b");
---- TYPES
string
---- RESULTS
'ab'
====
---- QUERY
select identity_anytype("a", "b", "c");
---- TYPES
string
---- RESULTS
'abc'
====
---- QUERY
# IMPALA-3378: test many Java UDFs being opened and run concurrently
select * from
(select max(int_col) from functional.alltypesagg
where identity(bool_col) union all
(select max(int_col) from functional.alltypesagg
where identity(tinyint_col) > 1 union all
(select max(int_col) from functional.alltypesagg
where identity(smallint_col) > 1 union all
(select max(int_col) from functional.alltypesagg
where identity(int_col) > 1 union all
(select max(int_col) from functional.alltypesagg
where identity(bigint_col) > 1 union all
(select max(int_col) from functional.alltypesagg
where identity(float_col) > 1.0 union all
(select max(int_col) from functional.alltypesagg
where identity(double_col) > 1.0 union all
(select max(int_col) from functional.alltypesagg
where identity(string_col) > '1' union all
(select max(int_col) from functional.alltypesagg
where not identity(bool_col) union all
(select max(int_col) from functional.alltypesagg
where identity(tinyint_col) > 2 union all
(select max(int_col) from functional.alltypesagg
where identity(smallint_col) > 2 union all
(select max(int_col) from functional.alltypesagg
where identity(int_col) > 2 union all
(select max(int_col) from functional.alltypesagg
where identity(bigint_col) > 2 union all
(select max(int_col) from functional.alltypesagg
where identity(float_col) > 2.0 union all
(select max(int_col) from functional.alltypesagg
where identity(double_col) > 2.0 union all
(select max(int_col) from functional.alltypesagg
where identity(string_col) > '2'
)))))))))))))))) v
---- TYPES
INT
---- RESULTS
998
999
999
999
999
999
999
999
999
999
999
999
999
999
999
999
====
---- QUERY
drop table if exists replace_string_input
====
---- QUERY
create table replace_string_input as
values('toast'), ('scone'), ('stuff'), ('sssss'), ('yes'), ('scone'), ('stuff');
====
---- QUERY
# Regression test for IMPALA-4266: memory management bugs with output strings from
# Java UDFS, exposed by using the UDF as a grouping key in an aggregation.
# The UDF replaces "s" with "ss" in the strings.
select distinct replace_string(_c0) as es
from replace_string_input
order by 1;
---- TYPES
string
---- RESULTS
'sscone'
'ssssssssss'
'sstuff'
'toasst'
'yess'
====
---- QUERY
# Regression test for IMPALA-8016; this UDF loads another class in the same jar.
select import_nearby_classes("placeholder");
---- TYPES
string
---- RESULTS
'Hello'
====