Github user selvaganesang commented on a diff in the pull request:

    
https://github.com/apache/incubator-trafodion/pull/1314#discussion_r153585050
  
    --- Diff: core/sql/executor/OrcFileReader.cpp ---
    @@ -236,58 +314,71 @@ OFR_RetCode OrcFileReader::fetchNextRow(char * 
buffer, long& array_length, long&
     
             tsRecentJMFromJNI = JavaMethods_[JM_FETCHROW2].jm_full_name;
        jobject jresult = (jobject)jenv_->CallObjectMethod(javaObj_, 
JavaMethods_[JM_FETCHROW2].methodID);
    +    if (jenv_->ExceptionCheck()) 
    +    {
    +      getExceptionDetails();
    +      logError(CAT_SQL_HDFS_ORC_FILE_READER, __FILE__, __LINE__);
    +      logError(CAT_SQL_HDFS_ORC_FILE_READER, 
"OrcFileReader::fetchNextRow()", getLastError());
    +      jenv_->PopLocalFrame(NULL);
    +      return OFR_ERROR_FETCHROW_EXCEPTION;
    +    }
        if (jresult==NULL && getLastError()) 
        {
    -             logError(CAT_SQL_HDFS_ORC_FILE_READER, 
"OrcFileReader::fetchNextRow()", getLastError());
    -             return OFR_ERROR_FETCHROW_EXCEPTION;
    +     logError(CAT_SQL_HDFS_ORC_FILE_READER, 
"OrcFileReader::fetchNextRow()", getLastError());
    +     return OFR_ERROR_FETCHROW_EXCEPTION;
        }
     
        if (jresult == NULL)
    -           return (OFR_NOMORE);            //No more rows
    +      return (OFR_NOMORE);         //No more rows
     
     //Retrieve row and associated data         
        jclass cls = jenv_->GetObjectClass(jresult);
        
        fid = jenv_->GetFieldID(cls,"m_row_length","I");
        if (fid ==NULL)
    -           {
    -                   return (OFR_ERROR_FETCHROW_EXCEPTION);
    -           }               
    +   {
    +           jenv_->PopLocalFrame(NULL);
    +      return (OFR_ERROR_FETCHROW_EXCEPTION);
    +   }               
        jint row_length = (jint)jenv_->GetIntField(jresult, fid);
        array_length = (long)row_length;
     
    -   
        fid = jenv_->GetFieldID(cls,"m_column_count","I");
        if (fid ==NULL)
    -           {
    -                   return(OFR_ERROR_FETCHROW_EXCEPTION);
    -           }
    +   {
    +           jenv_->PopLocalFrame(NULL);
    +           return(OFR_ERROR_FETCHROW_EXCEPTION);
    +   }
        jint column_count = (jint)jenv_->GetIntField(jresult, fid);
        num_columns = column_count;
     
        fid = jenv_->GetFieldID(cls,"m_row_number","J");
        if (fid ==NULL)
    -           {
    -                   return(OFR_ERROR_FETCHROW_EXCEPTION);
    -           }
    +   {
    +           jenv_->PopLocalFrame(NULL);
    +      return(OFR_ERROR_FETCHROW_EXCEPTION);
    +   }
        jlong rowNum = (jlong)jenv_->GetIntField(jresult, fid);
        rowNumber = rowNum;
    -
    -   
     // Get the actual row (it is a byte array). Use the row_length above to 
specify how much to copy   
        fid = jenv_->GetFieldID(cls,"m_row_ba","[B");
        if (fid ==NULL)
    -           {
    -                   return (OFR_ERROR_FETCHROW_EXCEPTION);
    -           }
    +   {
    +           jenv_->PopLocalFrame(NULL);
    +      return (OFR_ERROR_FETCHROW_EXCEPTION);
    +   }
        jbyteArray jrow = (jbyteArray)jenv_->GetObjectField(jresult, fid);
     
    -  if (jrow == NULL)
    -           return (OFR_ERROR_FETCHROW_EXCEPTION);
    +        if (jrow == NULL)
    +        {
    +           jenv_->PopLocalFrame(NULL);
    +           return (OFR_ERROR_FETCHROW_EXCEPTION);
    +        }
     
    -           jenv_->GetByteArrayRegion(jrow, 0, row_length, (jbyte*)buffer);
    -           jenv_->DeleteLocalRef(jrow);  
    +   jenv_->GetByteArrayRegion(jrow, 0, row_length, (jbyte*)buffer);
    +   jenv_->DeleteLocalRef(jrow);  
    --- End diff --
    
    Yes. Will remove


---

Reply via email to