Files
impala/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
Michael Ho 3ddafcd295 IMPALA-6184: Clean up after ScalarExprEvaluator::Clone() fails
When ScalarExprEvaluator::Clone() fails, the newly created evaluator was
not added to the output vector. This makes it impossible for callers to
close and clean up the evaluators afterwards. This change fixes this by
always adding the newly created evaluator to the output vector before
checking for the error status.

This path is only exercised in the scanner code. Two new tests are added
to exercise the failure paths.

Testing done: newly added tests in udf-errors.test

Change-Id: I45ffd722d0a69ad05ae3c748cf504c7f1a959a1d
Reviewed-on: http://gerrit.cloudera.org:8080/8572
Reviewed-by: Tim Armstrong <tarmstrong@cloudera.com>
Tested-by: Impala Public Jenkins
2017-11-17 02:24:48 +00:00

117 lines
3.9 KiB
Plaintext

====
---- QUERY
create function if not exists hive_pi() returns double
location '$FILESYSTEM_PREFIX/test-warehouse/hive-exec.jar'
symbol='org.apache.hadoop.hive.ql.udf.UDFPI';
---- RESULTS
====
---- QUERY
create function if not exists foo() returns double
location '$FILESYSTEM_PREFIX/test-warehouse/not-a-real-file.so'
symbol='FnDoesNotExist';
---- CATCH
Could not load binary: $FILESYSTEM_PREFIX/test-warehouse/not-a-real-file.so
====
---- QUERY
create function if not exists foo() returns double
location '$FILESYSTEM_PREFIX/test-warehouse/not-a-real-file.so'
symbol='FnDoesNotExist';
---- CATCH
Could not load binary: $FILESYSTEM_PREFIX/test-warehouse/not-a-real-file.so
====
---- QUERY
# This test is run with codegen disabled. Interpretation only handles up to 20 arguments.
create function if not exists twenty_args(int, int, int, int, int, int,
int, int, int, int, int, int, int, int, int, int, int, int, int, int) returns int
location '$FILESYSTEM_PREFIX/test-warehouse/libTestUdfs.so'
symbol='TwentyArgs';
---- RESULTS
====
---- QUERY
# Verifies that interpretation can support up to 20 arguments
select twenty_args(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
---- TYPES
INT
---- RESULTS
210
====
---- QUERY
# This test is run with codegen disabled. Interpretation only handles up to 20 arguments.
create function if not exists twenty_one_args(int, int, int, int, int, int,
int, int, int, int, int, int, int, int, int, int, int, int, int, int, int) returns int
location '$FILESYSTEM_PREFIX/test-warehouse/libTestUdfs.so'
symbol='TwentyOneArgs';
---- RESULTS
====
---- QUERY
# Verifies that interpretation fails with more than 20 arguments.
select twenty_one_args(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);
---- CATCH
Cannot interpret native UDF 'twenty_one_args': number of arguments is more than 20. Codegen is needed. Please set DISABLE_CODEGEN to false.
====
---- QUERY
# This test is run with codegen disabled. IR UDF will fail.
create function if not exists nine_args_ir(int, int, int, int, int, int,
int, int, int) returns int
location '$FILESYSTEM_PREFIX/test-warehouse/test-udfs.ll'
symbol='NineArgs';
---- RESULTS
====
---- QUERY
select nine_args_ir(1,2,3,4,5,6,7,8,9);
---- CATCH
Cannot interpret LLVM IR UDF 'nine_args_ir': Codegen is needed. Please set DISABLE_CODEGEN to false.
====
---- QUERY
create function if not exists bad_expr(double) returns boolean
location '$FILESYSTEM_PREFIX/test-warehouse/libTestUdfs.so'
symbol='BadExpr' prepare_fn='BadExprPrepare' close_fn='BadExprClose';
---- RESULTS
====
---- QUERY
create function if not exists bad_expr2(double) returns boolean
location '$FILESYSTEM_PREFIX/test-warehouse/libTestUdfs.so'
symbol='BadExpr' prepare_fn='BadExpr2Prepare' close_fn='BadExprClose';
---- RESULTS
====
---- QUERY
select count(t1.int_col) from functional.alltypes t1 join functional.alltypes t2
on (bad_expr(rand()) = (t2.bool_col && t1.bool_col));
---- CATCH
BadExpr prepare error
====
---- QUERY
select count(t1.int_col) from functional.alltypes t1 join functional.alltypes t2
on (bad_expr2(rand()) = (t2.bool_col && t1.bool_col));
---- CATCH
BadExpr error
====
---- QUERY
select count(int_col) from functional.alltypes where bad_expr(rand());
---- CATCH
BadExpr prepare error
====
---- QUERY
select count(int_col) from functional.alltypes where bad_expr2(rand());
---- CATCH
BadExpr2 prepare error
====
---- QUERY
use default;
drop database $DATABASE;
---- CATCH
Cannot drop non-empty database:
====
---- QUERY
use $DATABASE;
drop function hive_pi();
drop function twenty_args(int, int, int, int, int, int, int, int,
int, int, int, int, int, int, int, int, int, int, int, int);
drop function twenty_one_args(int, int, int, int, int, int, int, int,
int, int, int, int, int, int, int, int, int, int, int, int, int);
drop function nine_args_ir(int, int, int, int, int, int, int, int, int);
drop function bad_expr(double);
drop function bad_expr2(double);
---- RESULTS
====