Hans Zeller created TRAFODION-2499:
--------------------------------------

             Summary: TMUDF sometimes does not pass errors from its input table 
up to the caller
                 Key: TRAFODION-2499
                 URL: https://issues.apache.org/jira/browse/TRAFODION-2499
             Project: Apache Trafodion
          Issue Type: Bug
          Components: sql-exe
    Affects Versions: 2.0-incubating
         Environment: Any
            Reporter: Hans Zeller


This only happens in very limited circumstances. In the test case below, we get 
an error while processing the input table of the UDF. In this case it's a 
duplicate key error. But, the caller of the UDF gets this error message:

{noformat}

*** ERROR[8810] Executor ran into an internal failure and returned an error 
without populating the diagnostics area. This error is being injected to 
indicate that.

Here is the UDF code (file SimpleFunc.java):


import org.trafodion.sql.udr.*;

public class SimpleFunc extends UDR {

        // empty constructor
        public SimpleFunc() {}
        
        @Override
        public void describeParamsAndColumns(UDRInvocationInfo info)
         throws UDRException
        {
                info.out().addLongColumn("ROWS_IN", false);
        }
        
        @Override
        public void processData(UDRInvocationInfo info,
                                UDRPlanInfo plan)
                throws UDRException
        {
                long rowCount = 0;
                try {
                        while (getNextRow(info)) {
                                rowCount++;
                                
                        } // while processData rows

                        info.out().setLong(0, rowCount);
                        emitRow(info);
                } // try
                catch (Exception ex) {
                        throw new UDRException (38110, "processData exception: 
" + ex.getMessage());
                }
        }
        
}


Here is how to compile file SimpleFunc.java:


$JAVA_HOME/bin/javac SimpleFunc.java

jar cvf simple_func.jar SimpleFunc.*



Here are the SQL statements:

-- create library
create library simple_func file '..../simple_func.jar';

-- create UDF
drop TABLE_MAPPING FUNCTION simple_func;
CREATE TABLE_MAPPING FUNCTION simple_func()
EXTERNAL NAME 'SimpleFunc'
LIBRARY simple_func
LANGUAGE JAVA
;

drop table tgt;
create table tgt (
     pk        smallint not null no default,
     val       varchar(100),
     primary key (pk)
)
attributes aligned format
;
insert into tgt values (1,'x');


cqd udr_debug_flags '16';
prepare s from
SELECT *
FROM UDF(simple_func(TABLE(
                           select pk, val
                           from (INSERT INTO tgt values ( 1, 'DAVID')) t
                          )))
;

execute s;

{noformat}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to