From 902c28dda7c084f5b0c0771b56f289f313eaf0e5 Mon Sep 17 00:00:00 2001 From: maguoxiong <2710952048@qq.com> Date: Wed, 13 Aug 2025 16:12:22 +0800 Subject: [PATCH] fix orc reader --- .../cpp/src/jni/OrcColumnarBatchJniReader.cpp | 24 +++++++++++++------ .../cpp/src/jni/OrcColumnarBatchJniReader.h | 10 +++++++- .../scan/jni/OrcColumnarBatchJniReader.java | 4 +++- .../spark/jni/OrcColumnarBatchScanReader.java | 9 ++++++- .../orc/OmniOrcColumnarBatchReader.java | 11 +++++---- 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/omnioperator/omniop-native-reader/cpp/src/jni/OrcColumnarBatchJniReader.cpp b/omnioperator/omniop-native-reader/cpp/src/jni/OrcColumnarBatchJniReader.cpp index f202a5cbf..e3a90b828 100644 --- a/omnioperator/omniop-native-reader/cpp/src/jni/OrcColumnarBatchJniReader.cpp +++ b/omnioperator/omniop-native-reader/cpp/src/jni/OrcColumnarBatchJniReader.cpp @@ -470,19 +470,29 @@ JNIEXPORT jfloat JNICALL Java_com_huawei_boostkit_scan_jni_OrcColumnarBatchJniRe * Signature: (J)F */ JNIEXPORT void JNICALL Java_com_huawei_boostkit_scan_jni_OrcColumnarBatchJniReader_recordReaderClose(JNIEnv *env, - jobject jObj, jlong rowReader, jlong reader, jlong batchReader) + jobject jObj, jlong rowReader) { JNI_FUNC_START omniruntime::reader::OmniRowReaderImpl *rowReaderPtr = (omniruntime::reader::OmniRowReaderImpl *)rowReader; - if (nullptr == rowReaderPtr) { - env->ThrowNew(runtimeExceptionClass, "delete nullptr error for row reader"); + if (nullptr != rowReaderPtr) { + delete rowReaderPtr; } - delete rowReaderPtr; + JNI_FUNC_END_VOID(runtimeExceptionClass) +} + +/* + * Class: com_huawei_boostkit_scan_jni_OrcColumnarBatchJniReader + * Method: readerClose + * Signature: (J)F + */ +JNIEXPORT void JNICALL Java_com_huawei_boostkit_scan_jni_OrcColumnarBatchJniReader_readerClose(JNIEnv *env, + jobject jObj, jlong reader) +{ + JNI_FUNC_START omniruntime::reader::OmniReaderImpl *readerPtr = (omniruntime::reader::OmniReaderImpl *)reader; - if (nullptr == readerPtr) { - env->ThrowNew(runtimeExceptionClass, "delete nullptr error for reader"); + if (nullptr != readerPtr) { + delete readerPtr; } - delete readerPtr; JNI_FUNC_END_VOID(runtimeExceptionClass) } diff --git a/omnioperator/omniop-native-reader/cpp/src/jni/OrcColumnarBatchJniReader.h b/omnioperator/omniop-native-reader/cpp/src/jni/OrcColumnarBatchJniReader.h index 3f5fb7a6e..7b3f27c85 100644 --- a/omnioperator/omniop-native-reader/cpp/src/jni/OrcColumnarBatchJniReader.h +++ b/omnioperator/omniop-native-reader/cpp/src/jni/OrcColumnarBatchJniReader.h @@ -119,7 +119,15 @@ JNIEXPORT jfloat JNICALL Java_com_huawei_boostkit_scan_jni_OrcColumnarBatchJniRe * Signature: (JJJ)F */ JNIEXPORT void JNICALL Java_com_huawei_boostkit_scan_jni_OrcColumnarBatchJniReader_recordReaderClose - (JNIEnv *, jobject, jlong, jlong, jlong); + (JNIEnv *, jobject, jlong); + +/* + * Class: com_huawei_boostkit_scan_jni_OrcColumnarBatchJniReader + * Method: readerClose + * Signature: (J)F + */ +JNIEXPORT void JNICALL Java_com_huawei_boostkit_scan_jni_OrcColumnarBatchJniReader_readerClose + (JNIEnv *, jobject, jlong); /* * Class: com_huawei_boostkit_scan_jni_OrcColumnarBatchJniReader diff --git a/omnioperator/omniop-native-reader/java/src/main/java/com/huawei/boostkit/scan/jni/OrcColumnarBatchJniReader.java b/omnioperator/omniop-native-reader/java/src/main/java/com/huawei/boostkit/scan/jni/OrcColumnarBatchJniReader.java index ca4e479f3..783f32afc 100644 --- a/omnioperator/omniop-native-reader/java/src/main/java/com/huawei/boostkit/scan/jni/OrcColumnarBatchJniReader.java +++ b/omnioperator/omniop-native-reader/java/src/main/java/com/huawei/boostkit/scan/jni/OrcColumnarBatchJniReader.java @@ -39,7 +39,9 @@ public class OrcColumnarBatchJniReader { public native float recordReaderGetProgress(long rowReader); - public native void recordReaderClose(long rowReader, long reader, long batchReader); + public native void recordReaderClose(long rowReader); + + public native void readerClose(long reader); public native void recordReaderSeekToRow(long rowReader, long rowNumber); diff --git a/omnioperator/omniop-spark-extension/spark-extension-core/src/main/java/com/huawei/boostkit/spark/jni/OrcColumnarBatchScanReader.java b/omnioperator/omniop-spark-extension/spark-extension-core/src/main/java/com/huawei/boostkit/spark/jni/OrcColumnarBatchScanReader.java index 3f8b2db2c..c87dfe2cf 100644 --- a/omnioperator/omniop-spark-extension/spark-extension-core/src/main/java/com/huawei/boostkit/spark/jni/OrcColumnarBatchScanReader.java +++ b/omnioperator/omniop-spark-extension/spark-extension-core/src/main/java/com/huawei/boostkit/spark/jni/OrcColumnarBatchScanReader.java @@ -230,7 +230,14 @@ public class OrcColumnarBatchScanReader { } public void close() { - jniReader.recordReaderClose(recordReader, reader, batchReader); + if (recordReader != 0) { + jniReader.recordReaderClose(recordReader); + recordReader = 0; + } + if (reader != 0) { + jniReader.readerClose(reader); + reader = 0; + } } public void seekToRow(long rowNumber) { diff --git a/omnioperator/omniop-spark-extension/spark-extension-core/src/main/java/org/apache/spark/sql/execution/datasources/orc/OmniOrcColumnarBatchReader.java b/omnioperator/omniop-spark-extension/spark-extension-core/src/main/java/org/apache/spark/sql/execution/datasources/orc/OmniOrcColumnarBatchReader.java index 1f3c1a8ef..9748151d4 100644 --- a/omnioperator/omniop-spark-extension/spark-extension-core/src/main/java/org/apache/spark/sql/execution/datasources/orc/OmniOrcColumnarBatchReader.java +++ b/omnioperator/omniop-spark-extension/spark-extension-core/src/main/java/org/apache/spark/sql/execution/datasources/orc/OmniOrcColumnarBatchReader.java @@ -107,11 +107,14 @@ public class OmniOrcColumnarBatchReader extends RecordReader